Фигуры и их характеристики Разработайте иерархию классов для расчета периметров и площадей геометрических фигур. 1. Создайте базовый класс Shape. Определите в нём методы calculate_perimeter() и calculate_area(), которые будут возвращать периметр и площадь фигуры соответственно (сейчас возвращают 0). 2. Создайте классы-потомки Shape, описывающие следующие геометрические фигуры: 2.1. Circle (Круг): Определите метод __init__(self, radius), который принимает радиус круга и сохраняет его как атрибут. Переопределите методы calculate_perimeter() и calculate_area() для вычисления периметра и площади круга. 2.2. Rectangle (Прямоугольник): Определите метод __init__(self, width, height), который принимает ширину и высоту прямоугольника и сохраняет их как атрибуты. Переопределите методы calculate_perimeter() и calculate_area() для вычисления периметра и площади прямоугольника. 2.3. Triangle (Треугольник): Определите метод __init__(self, side1, side2, side3), который принимает длины трех сторон треугольника и сохраняет их как атрибуты. Переопределите методы calculate_perimeter() и calculate_area() для вычисления периметра и площади треугольника. 3. Создайте класс Square (Квадрат), наследующий от Rectangle. Переопределите его конструктор и методы calculate_perimeter() и calculate_area(), чтобы они работали только с одной стороной (так как у квадрата все стороны равны). 4. Создайте класс RightTriangle (прямоугольный треугольник), наследующий от Triangle. Переопределите его конструктор и методы calculate_perimeter() и calculate_area(), чтобы они работали только с длинами катетов. 5. Создайте класс ShapeList, хранящий список фигур. Определите метод __init__(self), создающий атрибут shape_list, содержащий пустой список. Определите метод add_shape(self, shape), добавляющий в список shape_list фигуру shape. Определите методы calculate_perimeters() и calculate_areas() возвращающие кортежи периметров и площадей всех фигур, хранящихся в списке shape_list. Тесты: 1. Создайте объект класса ShapeList 2. Заполните его случайным количеством (от 2 до 10) произвольных фигур. 3. Выведите результаты работы методов calculate_perimeters() и calculate_areas() для этого объекта
Ответы
Відповідь:
import math
class Shape:
def calculate_perimeter(self):
return 0
def calculate_area(self):
return 0
class Circle(Shape):
def __init__(self, radius):
self.radius = radius
def calculate_perimeter(self):
return 2 * math.pi * self.radius
def calculate_area(self):
return math.pi * (self.radius ** 2)
class Rectangle(Shape):
def __init__(self, width, height):
self.width = width
self.height = height
def calculate_perimeter(self):
return 2 * (self.width + self.height)
def calculate_area(self):
return self.width * self.height
class Triangle(Shape):
def __init__(self, side1, side2, side3):
self.side1 = side1
self.side2 = side2
self.side3 = side3
def calculate_perimeter(self):
return self.side1 + self.side2 + self.side3
def calculate_area(self):
s = (self.side1 + self.side2 + self.side3) / 2
return math.sqrt(s * (s - self.side1) * (s - self.side2) * (s - self.side3))
class Square(Rectangle):
def __init__(self, side):
super().__init__(side, side)
class RightTriangle(Triangle):
def __init__(self, cathetus1, cathetus2):
super().__init__(cathetus1, cathetus2, math.sqrt(cathetus1**2 + cathetus2**2))
def calculate_area(self):
return 0.5 * self.side1 * self.side2
class ShapeList:
def __init__(self):
self.shape_list = []
def add_shape(self, shape):
if isinstance(shape, Shape):
self.shape_list.append(shape)
def calculate_perimeters(self):
return tuple(shape.calculate_perimeter() for shape in self.shape_list)
def calculate_areas(self):
return tuple(shape.calculate_area() for shape in self.shape_list)
Пояснення:
Цей код створює класи для різних геометричних фігур і визначає методи для розрахунку їхніх периметрів і площ.