привет , сформулируй мне 2 задачи для ООП на pytho...
Создано: 2 марта 2025 г.
Создано: 2 марта 2025 г.
привет , сформулируй мне 2 задачи для ООП на python с их решением, используя следующие пункты:
Ниже приведены два примера задач, каждая из которых демонстрирует применение принципов объектно-ориентированного программирования на Python. Каждая задача структурирована по указанным семи пунктам.
Необходимо создать иерархию классов для представления различных геометрических фигур (например, круг, прямоугольник и т.д.). Каждая фигура должна уметь вычислять свою площадь и периметр. Также нужно уметь работать со списком таких фигур, чтобы, например, найти суммарную площадь всех фигур.
Цель:
get_area() и get_perimeter().Shape, имеет уникальные свойства – ширина и высота.Shape, имеет уникальное свойство – радиус.get_area() — вычислить площадь.get_perimeter() — вычислить периметр.width (ширина)height (высота)get_area() — площадь прямоугольника (width * height).get_perimeter() — периметр прямоугольника (2*(width + height)).radius (радиус)get_area() — площадь круга (π * radius^2).get_perimeter() — длина окружности (2 * π * radius).pythonimport math from abc import ABC, abstractmethod class Shape(ABC): @abstractmethod def get_area(self): pass @abstractmethod def get_perimeter(self): pass class Rectangle(Shape): def __init__(self, width, height): self.width = width self.height = height def get_area(self): return self.width * self.height def get_perimeter(self): return 2 * (self.width + self.height) class Circle(Shape): def __init__(self, radius): self.radius = radius def get_area(self): return math.pi * (self.radius ** 2) def get_perimeter(self): return 2 * math.pi * self.radius
pythonrectangle1 = Rectangle(3, 4) rectangle2 = Rectangle(5, 6) circle1 = Circle(2) circle2 = Circle(5)
Предположим, нужно найти суммарную площадь всех фигур в списке:
pythonshapes = [rectangle1, rectangle2, circle1, circle2] total_area = 0 for shape in shapes: total_area += shape.get_area() print("Суммарная площадь всех фигур:", total_area)
Аналогично можно пройтись циклом для вычисления суммарного периметра или любой другой операции.
Необходимо создать базовую учебную систему, в которой есть курсы, преподаватели и студенты. Студент может записаться на курс, преподаватель ведёт один или несколько курсов. Нужно обеспечить:
Цель:
Student
name, enrolled_courses — список курсов, на которые записан студент.enroll(course) — записать студента на курс (и наоборот — добавить студента в список курса).Teacher
name, courses_taught — курсы, которые ведёт преподаватель.assign_course(course) — назначить преподавателя на курс (и добавить курс в список курсов преподавателя).Course
title — название курса.teacher — преподаватель, ведущий курс (по умолчанию может быть None).students — список студентов, записанных на курс.set_teacher(teacher) — назначить преподавателя.add_student(student) — добавить студента.list_students() — вывести список студентов.pythonclass Student: def __init__(self, name): self.name = name self.enrolled_courses = [] def enroll(self, course): """Записывает студента на указанный курс и добавляет этого студента в список студентов курса.""" if course not in self.enrolled_courses: self.enrolled_courses.append(course) course.add_student(self) def __str__(self): return f"Студент: {self.name}" class Teacher: def __init__(self, name): self.name = name self.courses_taught = [] def assign_course(self, course): """Назначает преподавателя на указанный курс, добавляет курс в список курсов преподавателя.""" if course not in self.courses_taught: self.courses_taught.append(course) course.set_teacher(self) def __str__(self): return f"Преподаватель: {self.name}" class Course: def __init__(self, title): self.title = title self.teacher = None self.students = [] def set_teacher(self, teacher): self.teacher = teacher def add_student(self, student): if student not in self.students: self.students.append(student) def list_students(self): if not self.students: print(f"На курсе «{self.title}» пока нет студентов.") else: print(f"Список студентов на курсе «{self.title}»:") for s in self.students: print(f"- {s.name}") def __str__(self): teacher_name = self.teacher.name if self.teacher else "не назначен" return f"Курс: {self.title}, Преподаватель: {teacher_name}"
python# Создаём студентов student1 = Student("Иван Иванов") student2 = Student("Мария Петрова") # Создаём преподавателей teacher1 = Teacher("Проф. Сергей Львов") teacher2 = Teacher("Проф. Анна Козлова") # Создаём курсы course_python = Course("Основы Python") course_math = Course("Высшая математика")
python# Назначаем преподавателей на курсы teacher1.assign_course(course_python) teacher2.assign_course(course_math) # Записываем студентов на курсы student1.enroll(course_python) student1.enroll(course_math) student2.enroll(course_python) # Выводим информацию print(course_python) # Информация о курсе Python course_python.list_students() print(course_math) # Информация о курсе математики course_math.list_students()
Результатом будет:
course_python — преподаватель «Проф. Сергей Львов» и список студентов (Иван Иванов, Мария Петрова).course_math — преподаватель «Проф. Анна Козлова» и список студентов (Иван Иванов).Таким образом, мы продемонстрировали создание объектов классов Student, Teacher и Course, а также их взаимодействие при решении учебной задачи.
Обе задачи показывают базовые принципы ООП:
Circle и Rectangle наследуют от общего класса Shape.Circle и Rectangle по-разному реализуют методы для вычисления площади и периметра, но для внешнего кода эти методы доступны одинаковым образом (shape.get_area()).Вторая задача демонстрирует работу с несколькими взаимосвязанными классами: Student, Teacher, Course, где объекты этих классов обмениваются ссылками друг на друга (студент записывается на курс, а курс хранит информацию о студенте).