Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
First solution in Clear category for Geometry Figures by PythonLearner
import math
def rounded(n):
def _rounded(function):
def rounded_function(*args, **kargs):
return round(function(*args, **kargs), n)
return rounded_function
return _rounded
class Parameters:
def __init__(self, dimension):
self.dimension = dimension
def choose_figure(self, figure):
self.figure = figure
@rounded(2)
def perimeter(self):
return self.figure.perimeter(self.dimension)
@rounded(2)
def area(self):
return self.figure.area(self.dimension)
@rounded(2)
def volume(self):
return self.figure.volume(self.dimension)
class Circle:
def perimeter(self, radius):
return 2*math.pi*radius
def area(self, radius):
return math.pi*radius**2
def volume(self, radius):
return 0
class Poligon:
def __init__(self, side_number):
self.side_number = side_number
def perimeter(self, side):
return self.side_number*side
def area(self, side):
return self.side_number*side**2/4/math.tan(math.pi/self.side_number)
def volume(self, side):
return 0
class Triangle(Poligon):
def __init__(self):
side_number = 3
super().__init__(side_number)
class Square(Poligon):
def __init__(self):
side_number = 4
super().__init__(side_number)
class Pentagon(Poligon):
def __init__(self):
side_number = 5
super().__init__(side_number)
class Hexagon(Poligon):
def __init__(self):
side_number = 6
super().__init__(side_number)
class Cube:
def __init__(self):
self.side_number = 12
self.facet_number = 6
def perimeter(self, side):
side_number = 12
return side_number*side
def area(self, side):
return self.facet_number*side**2
def volume(self, side):
return side**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!")
Sept. 23, 2018