
Добавил:
Psixoznik
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:3 семестр / laba_7
.pyfrom abc import ABC, abstractmethod
import math
class Shape(ABC):
def __init__(self, num_vertices):
self.num_vertices = num_vertices
self.name = self.__class__.__name__
self.perimeter = self.calculate_perimeter()
self.area = self.calculate_area()
self.is_symmetric = self.check_symmetry()
self.description = self.generate_description()
self.__value = 1
self.__value2 = 5
@abstractmethod
def calculate_perimeter(self):
pass
@abstractmethod
def calculate_area(self):
pass
@abstractmethod
def check_symmetry(self):
pass
def func(self):
self.__value = 'any_1'
return self.__value
def func2(self):
return self.__value2
def generate_description(self):
return f"{self.name} с {self.num_vertices} сторонами, периметр {self.perimeter}, площадь {self.area}, симметрия: {self.is_symmetric}"
value_read1 = property(func)
value_read2 = property(func2)
def shape_selector(func):
def wrapper(*args, **kwargs):
shape_name = func(*args, **kwargs)
shape_classes = {cls.__name__.lower(): cls for cls in Shape.__subclasses__()}
if shape_name.lower() not in shape_classes:
similar_names = [name for name in shape_classes if shape_name.lower() in name]
if similar_names:
print(f"Может ты имел в виду что-то такое: {', '.join(similar_names)}?")
chosen_name = input("Уточните фигуру: ").strip().lower()
if chosen_name in shape_classes:
return shape_classes[chosen_name]
print("Фигура некорректна")
return None
return shape_classes[shape_name.lower()]
return wrapper
@shape_selector
def get_shape_class(shape_name):
return shape_name
class Heptagon(Shape):
def calculate_perimeter(self):
return self.num_vertices * 0.32
def calculate_area(self):
return ((7*0.32)**2)/(4*math.tan(math.pi/7))
def check_symmetry(self):
return True
class Square(Shape):
def calculate_perimeter(self):
return self.num_vertices * 0.32
def calculate_area(self):
return self.num_vertices ** 2
def check_symmetry(self):
return True
while True:
shape_name = input("Напишите название фигуры на английском: ").strip().lower()
if shape_name == 'exit':
break
ShapeClass = get_shape_class(shape_name)
if ShapeClass:
num_vertices = int(input(f"Количество сторон: {shape_name}: "))
shape_instance = ShapeClass(num_vertices)
print(shape_instance.description)
print('Демонстрирую использование переменной для чтения:', shape_instance.value_read1, shape_instance.value_read2)