import math
class Circle:
def __init__ ( self , radius) :
self .radius = radius
def getDiameter( self ) :
return 2 * self .radius
def getPerimeter( self ) :
return math .pi * self .getDiameter ( )
def getArea( self ) :
return math .pi * self .radius **2
def __repr__ ( self ) :
return 'Circle({})' .format ( self .radius )
def perimeter_sum( circles) :
return sum ( circle.getPerimeter ( ) for circle in circles)
def area_sum( circles) :
return sum ( circle.getArea ( ) for circle in circles)
def inches2yards( inches) :
return inches / 36
def percent_more( x1, x2) :
return 100 * ( x1 - x2) / x2
# buying ribbon for hat bands
hats = [ Circle( 3 ) , Circle( 3.5 ) , Circle( 4 ) , Circle( 4.5 ) ]
print ( hats, perimeter_sum( hats) )
yards = inches2yards( perimeter_sum( hats) )
print ( 'Need at least {:.1f} yards of ribbon for {} hats.' .format ( yards, len ( hats) ) )
# eating pancakes
ralph = [ Circle( 2 ) , Circle( 3 ) , Circle( 4 ) ]
sally = [ Circle( 3 ) , Circle( 5 ) ]
print ( ralph, area_sum( ralph) )
print ( sally, area_sum( sally) )
pmore = percent_more( area_sum( sally) , area_sum( ralph) )
print ( 'Sally ate {:.0f}% more than Ralph.' .format ( pmore) )
aW1wb3J0IG1hdGgKCmNsYXNzIENpcmNsZToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCByYWRpdXMpOgogICAgICAgIHNlbGYucmFkaXVzID0gcmFkaXVzCiAgICBkZWYgZ2V0RGlhbWV0ZXIoc2VsZik6CiAgICAgICAgcmV0dXJuIDIgKiBzZWxmLnJhZGl1cwogICAgZGVmIGdldFBlcmltZXRlcihzZWxmKToKICAgICAgICByZXR1cm4gbWF0aC5waSAqIHNlbGYuZ2V0RGlhbWV0ZXIoKQogICAgZGVmIGdldEFyZWEoc2VsZik6CiAgICAgICAgcmV0dXJuIG1hdGgucGkgKiBzZWxmLnJhZGl1cyoqMgogICAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgICAgIHJldHVybiAnQ2lyY2xlKHt9KScuZm9ybWF0KHNlbGYucmFkaXVzKQoKZGVmIHBlcmltZXRlcl9zdW0oY2lyY2xlcyk6CiAgICByZXR1cm4gc3VtKGNpcmNsZS5nZXRQZXJpbWV0ZXIoKSBmb3IgY2lyY2xlIGluIGNpcmNsZXMpCgpkZWYgYXJlYV9zdW0oY2lyY2xlcyk6CiAgICByZXR1cm4gc3VtKGNpcmNsZS5nZXRBcmVhKCkgZm9yIGNpcmNsZSBpbiBjaXJjbGVzKQoKZGVmIGluY2hlczJ5YXJkcyhpbmNoZXMpOgogICAgcmV0dXJuIGluY2hlcyAvIDM2CgpkZWYgcGVyY2VudF9tb3JlKHgxLCB4Mik6CiAgICByZXR1cm4gMTAwICogKHgxIC0geDIpIC8geDIKCiMgYnV5aW5nIHJpYmJvbiBmb3IgaGF0IGJhbmRzCmhhdHMgPSBbQ2lyY2xlKDMpLCBDaXJjbGUoMy41KSwgQ2lyY2xlKDQpLCBDaXJjbGUoNC41KV0KcHJpbnQoaGF0cywgcGVyaW1ldGVyX3N1bShoYXRzKSkKeWFyZHMgPSBpbmNoZXMyeWFyZHMocGVyaW1ldGVyX3N1bShoYXRzKSkKcHJpbnQoJ05lZWQgYXQgbGVhc3QgezouMWZ9IHlhcmRzIG9mIHJpYmJvbiBmb3Ige30gaGF0cy4nLmZvcm1hdCh5YXJkcywgbGVuKGhhdHMpKSkKCiMgZWF0aW5nIHBhbmNha2VzCnJhbHBoID0gW0NpcmNsZSgyKSwgQ2lyY2xlKDMpLCBDaXJjbGUoNCldCnNhbGx5ID0gW0NpcmNsZSgzKSwgQ2lyY2xlKDUpXQpwcmludChyYWxwaCwgYXJlYV9zdW0ocmFscGgpKQpwcmludChzYWxseSwgYXJlYV9zdW0oc2FsbHkpKQpwbW9yZSA9IHBlcmNlbnRfbW9yZShhcmVhX3N1bShzYWxseSksIGFyZWFfc3VtKHJhbHBoKSkKcHJpbnQoJ1NhbGx5IGF0ZSB7Oi4wZn0lIG1vcmUgdGhhbiBSYWxwaC4nLmZvcm1hdChwbW9yZSkpCg==
stdout
[Circle(3), Circle(3.5), Circle(4), Circle(4.5)] 94.2477796076938
Need at least 2.6 yards of ribbon for 4 hats.
[Circle(2), Circle(3), Circle(4)] 91.106186954104
[Circle(3), Circle(5)] 106.81415022205297
Sally ate 17% more than Ralph.