/
Argentovsky
/
Python_OOP
Обзор
Документация
Войти
/
Argentovsky
/
Python_OOP
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
main
OOP_DS4.py
140 строк
6 KB
Argentovskii
Домашние задание 4
24 июн 2025, 14:56
24 июн 2025, 14:56
2221f5c
Код
Авторство
О чём код?
from functools import total_ordering @total_ordering class Student: def __init__(self, name, surname, gender): self.name = name self.surname = surname self.gender = gender self.finished_courses = [] self.courses_in_progress = [] self.grades = {} def rate_lecture(self, lecture, course, grade): if isinstance(lecture, Lecturer) and course in self.courses_in_progress and course in lecture.courses_attached: if course in lecture.grades: lecture.grades[course] += [grade] else: lecture.grades[course] = [grade] else: return 'Ошибка' def __str__(self): sum_rate=[] for i in self.grades.values(): sum_rate.append(sum(i)/len(i)) self.average_rate=int(sum(sum_rate)/len(sum_rate)) return f' Имя: {self.name} \n Фамилия: {self.surname} \n Средняя оценка: {self.average_rate} \n Курсы В процессе изучения: {self.courses_in_progress}\n Завершенные курсы: {self.finished_courses}' def __lt__(self, other): return self.average_rate < other.average_rate def __eq__(self, other): return self.average_rate == other.average_rate class Mentor: def __init__(self, name, surname): self.name = name self.surname = surname self.courses_attached = [] class Lecturer(Mentor): def __init__(self, name, surname): super().__init__(name, surname) self.grades = {} def __lt__(self, other): return self.average_rate < other.average_rate def __eq__(self, other): return self.average_rate == other.average_rate def __str__(self): sum_rate=[] for i in self.grades.values(): sum_rate.append(sum(i)/len(i)) self.average_rate=int(sum(sum_rate)/len(sum_rate)) return f' Имя: {self.name} \n Фамилия: {self.surname} \n Средняя оценка: {self.average_rate} \n' class Reviewer(Mentor): def __init__(self, name, surname): super().__init__(name, surname) def rate_student(self, student, course, grade): if isinstance(student, Student) and course in self.courses_attached and course in student.courses_in_progress: if course in student.grades: student.grades[course] += [grade] else: student.grades[course] = [grade] else: return 'Ошибка' def __str__(self): return f' Имя: {self.name} \n Фамилия: {self.surname} \n' def average_rate_all(list_assessed, course): # Подсчет общей оценки Лекторов или студентов average_rate=[] for obj in list_assessed: average_rate.append(sum(obj.grades[course])/len(obj.grades[course])) return int(sum(average_rate)/len(average_rate)) def best_assessed(list_assessed): # возможность сравнивать (через МАГИЧЕСКИЕ операторы сравнения) между собой лекторов max_rare=list_assessed[0] # по средней оценке за лекции и студентов по средней оценке за домашние задания. for obj in list_assessed: if obj > max_rare: max_rare = obj return max_rare lecturer = Lecturer('Иван', 'Иванов') lecturer2 = Lecturer('Дмитрий', 'Николаевич') reviewer = Reviewer('Пётр', 'Петров') student = Student('Алёхина', 'Ольга', 'Ж') student2 = Student('Николаенко','Виктор', 'М') student.courses_in_progress += ['Python', 'Java', 'C++'] student.finished_courses+=['Введение в программирование'] student2.courses_in_progress += ['Python', 'Java'] student2.finished_courses+=['Введение в программирование', 'C++'] lecturer.courses_attached += ['Python', 'C++'] lecturer2.courses_attached += ['Python', 'Введение в программирование'] reviewer.courses_attached += ['Python', 'C++'] student.rate_lecture(lecturer, 'Python', 7) # None student.rate_lecture(lecturer, 'Python', 6) student.rate_lecture(lecturer, 'Python', 9) student.rate_lecture(lecturer, 'C++', 4) student.rate_lecture(lecturer, 'C++', 8) student.rate_lecture(lecturer, 'Java', 8) # Ошибка student.rate_lecture(lecturer, 'С++', 8) # Ошибка student.rate_lecture(reviewer, 'Python', 6) # Ошибка student.rate_lecture(lecturer2, 'С++', 8) # Ошибка student2.rate_lecture(lecturer2, 'Python', 8) # Ошибка reviewer.rate_student(student, 'Python', 9) # None reviewer.rate_student(student, 'Python', 7) # None reviewer.rate_student(student2, 'Python', 5) # None reviewer.rate_student(student2, 'C++', 9) # None student.rate_lecture(lecturer2, 'Python', 10) student.rate_lecture(lecturer2, 'Введение в программирование', 10) list_students = [student, student2] list_lecturers = [lecturer, lecturer2] some_reviewer=str(reviewer) some_lecturer=str(lecturer) some_lecturer2=str(lecturer2) some_student=str(student) print(some_reviewer) print(some_lecturer) print(some_lecturer2) print(student2) print(f' Средняя общая оценка всех Лекторов: { average_rate_all(list_lecturers,"Python") }') print(f' Средняя общая оценка всех Студентов: { average_rate_all(list_students,"Python") }') # Сравнение по средней оценки через переназначенные операторы ><= print(f' 🏆Лучший преподователь из списка преподователей 🏆 : \n{best_assessed(list_lecturers)}') print(f' 🏅Лучший студент из списка студентов 🏅 : \n{best_assessed(list_students)}') print(student2==student)