Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
ABC solution in Clear category for Geometry Figures by Sim0000
from abc import ABC, abstractmethod
from math import pi, sqrt
class Parameters:
def __init__(self, *args):
self.args = args
def choose_figure(self, figure):
self.figure = figure
def perimeter(self):
return round(self.figure.perimeter(*self.args), 2)
def area(self):
return round(self.figure.area(*self.args), 2)
def volume(self):
return round(self.figure.volume(*self.args), 2)
class Figure(ABC):
@abstractmethod
def perimeter(self, a):
pass
@abstractmethod
def area(self, a):
pass
def volume(self, a):
return 0
class Circle(Figure):
perimeter = lambda self, a: 2 * pi * a
area = lambda self, a: pi * a**2
class Triangle(Figure):
perimeter = lambda self, a: 3 * a
area = lambda self, a: sqrt(3) / 4 * a**2
class Square(Figure):
perimeter = lambda self, a: 4 * a
area = lambda self, a: a**2
class Pentagon(Figure):
perimeter = lambda self, a: 5 * a
area = lambda self, a: sqrt(25 + 10 * sqrt(5)) / 4 * a**2
class Hexagon(Figure):
perimeter = lambda self, a: 6 * a
area = lambda self, a: 3 * sqrt(3) / 2 * a**2
class Cube(Figure):
perimeter = lambda self, a: 12 * a
area = lambda self, a: 6 * a**2
volume = lambda self, a: a**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!")
June 23, 2018
Comments: