привет , сформулируй мне 2 задачи для ООП на pytho...
Creado el: 2 de marzo de 2025
Creado el: 2 de marzo de 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
, где объекты этих классов обмениваются ссылками друг на друга (студент записывается на курс, а курс хранит информацию о студенте).