Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
First solution in Clear category for Geometry Figures by liuq901
import functools
import math
class Parameters:
def __init__(self, param):
self.param = param
def choose_figure(self, inst):
self.inst = inst
self.inst.init(self.param)
def __getattr__(self, name):
func = getattr(self.inst, name)
@functools.wraps(func)
def wrap():
return round(func(), 2)
return wrap
class Circle:
def init(self, param):
self.r = param
def area(self):
return self.r ** 2 * math.pi
def perimeter(self):
return 2 * math.pi * self.r
def volume(self):
return 0
class Triangle:
def init(self, param):
self.l = param
def area(self):
return self.l ** 2 * math.sqrt(3) / 4
def perimeter(self):
return self.l * 3
def volume(self):
return 0
class Square:
def init(self, param):
self.l = param
def area(self):
return self.l ** 2
def perimeter(self):
return self.l * 4
def volume(self):
return 0
class Pentagon:
def init(self, param):
self.l = param
def area(self):
return self.l ** 2 * math.tan(54 / 180 * math.pi) * 5 / 4
def perimeter(self):
return self.l * 5
def volume(self):
return 0
class Hexagon:
def init(self, param):
self.l = param
def area(self):
return self.l ** 2 * math.sqrt(3) * 3 / 2
def perimeter(self):
return self.l * 6
def volume(self):
return 0
class Cube:
def init(self, param):
self.l = param
def area(self):
return self.l ** 2 * 6
def perimeter(self):
return self.l * 12
def volume(self):
return self.l ** 3
if __name__ == '__main__':
#These "asserts" using only for self-checking and not necessary for auto-testing
figure = Parameters(10)
figure.choose_figure(Circle())
assert figure.area() == 314.16
figure.choose_figure(Triangle())
assert figure.perimeter() == 30
figure.choose_figure(Square())
assert figure.area() == 100
figure.choose_figure(Pentagon())
assert figure.perimeter() == 50
figure.choose_figure(Hexagon())
assert figure.perimeter() == 60
figure.choose_figure(Cube())
assert figure.volume() == 1000
print("Coding complete? Let's try tests!")
Nov. 22, 2021