Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
Second solution in Creative category for Building Base by AlexanderSafronov
class Building:
def __init__(self, *args):
if len(args)==4:
args+=(10,)
self.data = {key:args[i] for i,key in enumerate(('south', 'west', 'width_WE', 'width_NS','height'))}
self.data.update({"north": sum(args[0::3]), "east": sum(args[1:3])})
def corners(self):
return {'-'.join((v,h)):(self.data[v],self.data[h]) for v in ('north','south') for h in ('west','east')}
def area(self):
return self.data['width_WE']*self.data['width_NS']
def volume(self):
return self.area()*self.data['height']
def __repr__(self):
return "Building({south}, {west}, {width_WE}, {width_NS}, {height})".format(**self.data)
if __name__ == '__main__':
#These "asserts" using only for self-checking and not necessary for auto-testing
def json_dict(d):
return dict((k, list(v)) for k, v in d.items())
b = Building(1, 2, 2, 3)
b2 = Building(1, 2, 2, 3, 5)
assert json_dict(b.corners()) == {'north-east': [4, 4], 'south-east': [1, 4],
'south-west': [1, 2], 'north-west': [4, 2]}, "Corners"
assert b.area() == 6, "Area"
assert b.volume() == 60, "Volume"
assert b2.volume() == 30, "Volume2"
assert str(b) == "Building(1, 2, 2, 3, 10)", "String"
March 18, 2015
Comments: