/
IlyaPRO
/
practice_task
Обзор
Документация
Войти
/
IlyaPRO
/
practice_task
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
fourth_task.py
236 строк
9 KB
IlyaPRO
Update: fourth_task.py
21 июн 2026, 18:25
Верифицирован
21 июн 2026, 18:25
ef70a3b
Код
Авторство
О чём код?
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) student_1 = Student('Ruoy', 'Eman', 'male') student_2 = Student('Anna', 'Smith', 'female') reviewer_1 = Reviewer('Some', 'Buddy') reviewer_2 = Reviewer('Alex', 'Brown') lecturer_1 = Lecturer('John', 'Doe') lecturer_2 = Lecturer('Emily', 'Watson') student_1.courses_in_progress += ['Python', 'Git'] student_1.finished_courses += ['Введение в программирование'] student_2.courses_in_progress += ['Python'] student_2.finished_courses += ['Основы дизайна'] reviewer_1.courses_attached += ['Python', 'Git'] reviewer_2.courses_attached += ['Python'] lecturer_1.courses_attached += ['Python'] lecturer_2.courses_attached += ['Python', 'Git'] reviewer_1.rate_hw(student_1, 'Python', 10) reviewer_1.rate_hw(student_1, 'Python', 9) reviewer_1.rate_hw(student_1, 'Git', 8) reviewer_2.rate_hw(student_2, 'Python', 8) reviewer_2.rate_hw(student_2, 'Python', 7) student_1.rate_lecturer(lecturer_1, 'Python', 10) student_1.rate_lecturer(lecturer_2, 'Python', 9) student_1.rate_lecturer(lecturer_2, 'Git', 10) student_2.rate_lecturer(lecturer_1, 'Python', 8) student_2.rate_lecturer(lecturer_2, 'Python', 7) print("--- Проверяющие ---") print(reviewer_1) print() print("--- Лекторы ---") print(lecturer_1) print() print(lecturer_2) print() print("--- Студенты ---") print(student_1) print() print(student_2) print() print("--- Сравнение ---") print(f"student_1 > student_2: {student_1 > student_2}") print(f"lecturer_1 > lecturer_2: {lecturer_1 > lecturer_2}") print() students_list = [student_1, student_2] lecturers_list = [lecturer_1, lecturer_2] avg_stud_py = get_avg_student_grade_by_course(students_list, 'Python') avg_lect_py = get_avg_lecturer_grade_by_course(lecturers_list, 'Python') print("--- Средние по курсам ---") print(f"Средняя оценка студентов по курсу Python: {avg_stud_py:.2f}") print(f"Средняя оценка лекторов за лекции по курсу Python: {avg_lect_py:.2f}") print("--- Отказные сценариии ---") print("Попытка лектора оценить работу студента:") try: lecturer_1.rate_hw(student_1, 'Python', 10) except AttributeError as e: print(f"Результат: Метод заблокирован на уровне роли. Ошибка: {e}") print() print("Попытка студента оценить лектора по чужому курсу:") result_course_error = student_2.rate_lecturer(lecturer_2, 'Git', 10) print(f"Результат вызова rate_lecturer: {result_course_error}")