/
IlyaPRO
/
practice_task
Обзор
Документация
Войти
/
IlyaPRO
/
practice_task
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
third_task.py
187 строк
7 KB
IlyaPRO
Update: third_task.py
20 июн 2026, 13:55
Верифицирован
20 июн 2026, 13:55
ce5d47f
Код
Авторство
О чём код?
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_lecturer(self, lecturer, course, grade): if (isinstance(lecturer, Lecturer) and course in self.courses_in_progress and course in lecturer.courses_attached and 1 <= grade <= 10): if course in lecturer.grades: lecturer.grades[course] += [grade] else: lecturer.grades[course] = [grade] else: return 'Ошибка' def __str__(self): all_grades = [grade for grades_list in self.grades.values() for grade in grades_list] avg_grade = sum(all_grades) / len(all_grades) if all_grades else 0.0 in_progress = ", ".join(self.courses_in_progress) if self.courses_in_progress else "Нет" finished = ", ".join(self.finished_courses) if self.finished_courses else "Нет" return (f"Имя: {self.name}\n" f"Фамилия: {self.surname}\n" f"Средняя оценка задания: {avg_grade:.1f}\n" f"Курсы в процессе: {in_progress}\n" f"Завершенные курсы: {finished}") def __lt__(self, other): if not isinstance(other, Student): return NotImplemented self_all_grades = [grade for grades_list in self.grades.values() for grade in grades_list] self_avg = sum(self_all_grades) / len(self_all_grades) if self_all_grades else 0.0 other_all_grades = [grade for grades_list in other.grades.values() for grade in grades_list] other_avg = sum(other_all_grades) / len(other_all_grades) if other_all_grades else 0.0 return self_avg < other_avg def __le__(self, other): if not isinstance(other, Student): return NotImplemented self_all_grades = [grade for grades_list in self.grades.values() for grade in grades_list] self_avg = sum(self_all_grades) / len(self_all_grades) if self_all_grades else 0.0 other_all_grades = [grade for grades_list in other.grades.values() for grade in grades_list] other_avg = sum(other_all_grades) / len(other_all_grades) if other_all_grades else 0.0 return self_avg <= other_avg def __eq__(self, other): if not isinstance(other, Student): return NotImplemented self_all_grades = [grade for grades_list in self.grades.values() for grade in grades_list] self_avg = sum(self_all_grades) / len(self_all_grades) if self_all_grades else 0.0 other_all_grades = [grade for grades_list in other.grades.values() for grade in grades_list] other_avg = sum(other_all_grades) / len(other_all_grades) if other_all_grades else 0.0 return self_avg == other_avg 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 __str__(self): all_grades = [grade for grades_list in self.grades.values() for grade in grades_list] avg_grade = sum(all_grades) / len(all_grades) if all_grades else 0.0 return (f"Имя: {self.name}\n" f"Фамилия: {self.surname}\n" f"Средняя оценка за лекции: {avg_grade:.1f}") def __lt__(self, other): if not isinstance(other, Lecturer): return NotImplemented self_all_grades = [grade for grades_list in self.grades.values() for grade in grades_list] self_avg = sum(self_all_grades) / len(self_all_grades) if self_all_grades else 0.0 other_all_grades = [grade for grades_list in other.grades.values() for grade in grades_list] other_avg = sum(other_all_grades) / len(other_all_grades) if other_all_grades else 0.0 return self_avg < other_avg def __le__(self, other): if not isinstance(other, Lecturer): return NotImplemented self_all_grades = [grade for grades_list in self.grades.values() for grade in grades_list] self_avg = sum(self_all_grades) / len(self_all_grades) if self_all_grades else 0.0 other_all_grades = [grade for grades_list in other.grades.values() for grade in grades_list] other_avg = sum(other_all_grades) / len(other_all_grades) if other_all_grades else 0.0 return self_avg <= other_avg def __eq__(self, other): if not isinstance(other, Lecturer): return NotImplemented self_all_grades = [grade for grades_list in self.grades.values() for grade in grades_list] self_avg = sum(self_all_grades) / len(self_all_grades) if self_all_grades else 0.0 other_all_grades = [grade for grades_list in other.grades.values() for grade in grades_list] other_avg = sum(other_all_grades) / len(other_all_grades) if other_all_grades else 0.0 return self_avg == other_avg class Reviewer(Mentor): def __init__(self, name, surname): super().__init__(name, surname) def rate_hw(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}" def get_avg_student_grade_by_course(students_list, course_name): total_grades = [] for student in students_list: if course_name in student.grades: total_grades.extend(student.grades[course_name]) if not total_grades: return 0.0 return sum(total_grades) / len(total_grades) def get_avg_lecturer_grade_by_course(lecturers_list, course_name): total_grades = [] for lecturer in lecturers_list: if course_name in lecturer.grades: total_grades.extend(lecturer.grades[course_name]) if not total_grades: return 0.0 return sum(total_grades) / len(total_grades) some_student = Student('Ruoy', 'Eman', 'male') some_reviewer = Reviewer('Some', 'Buddy') some_lecturer = Lecturer('Some', 'Buddy') some_student.courses_in_progress += ['Python', 'Git'] some_student.finished_courses += ['Введение в программирование'] some_lecturer.courses_attached += ['Python', 'Git'] some_reviewer.courses_attached += ['Python'] some_student.rate_lecturer(some_lecturer, 'Python', 10) some_student.rate_lecturer(some_lecturer, 'Python', 9) some_student.rate_lecturer(some_lecturer, 'Git', 10) some_reviewer.rate_hw(some_student, 'Python', 10) some_reviewer.rate_hw(some_student, 'Python', 8) some_reviewer.rate_hw(some_student, 'Python', 9) print("some_reviewer") print(some_reviewer) print() print ("some_lecturer") print (some_lecturer) print() print ("some_student") print (some_student) print()