/
netogithubik
/
Neto_OOP
Обзор
Документация
Войти
/
netogithubik
/
Neto_OOP
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
4.py
164 строки
5 KB
rskuro
rewrote the get_average_grade function using list comprehension and brought it out as a separate function
27 янв 2026, 19:44
27 янв 2026, 19:44
a1f3610
Код
Авторство
О чём код?
def get_average_grade(student_or_lecturer): average_list = [grade for key in student_or_lecturer.grades for grade in student_or_lecturer.grades[key]] if len(average_list) > 0: return sum(average_list) / len(average_list) else: return 0 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 get_average_grade(self): return get_average_grade(self) def __str__(self): return f"""Имя: {self.name} Фамилия: {self.surname} Средняя оценка за домашние задания: {self.get_average_grade()} Курсы в процессе изучения: {", ".join(self.courses_in_progress)} Завершенные курсы: {", ".join(self.finished_courses)}""" def __gt__(self, other): if isinstance(other, Student): self_g = self.get_average_grade() other_g = other.get_average_grade() return self_g > other_g else: return NotImplemented def rate_lecture(self, lecturer, course_name, rate): if ( isinstance(lecturer, Lecturer) and course_name in lecturer.courses_attached and rate > 0 and rate <= 10 and course_name in self.courses_in_progress ): if course_name in lecturer.grades: lecturer.grades[course_name] += [rate] else: lecturer.grades[course_name] = [rate] else: return "Ошибка" 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 get_average_grade(self): return get_average_grade(self) def __str__(self): return f"""Имя: {self.name} Фамилия: {self.surname} Средняя оценка за лекции: {self.get_average_grade()}""" def __gt__(self, other): if isinstance(other, Lecturer): self_g = self.get_average_grade() other_g = other.get_average_grade() return self_g > other_g else: return NotImplemented class Reviewer(Mentor): def __str__(self): return f"""Имя: {self.name} Фамилия: {self.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 and 0 < grade <= 10 ): if course in student.grades: student.grades[course] += [grade] else: student.grades[course] = [grade] else: return "Ошибка" def get_all_students_average_grade(course_name, students_list): union_grades_list = [] for student in students_list: if isinstance(student, Student): if course_name in student.grades: union_grades_list.extend(student.grades[course_name]) else: continue else: raise TypeError( f"Один из элементов списка не является экземпляром класса Student" ) if len(union_grades_list) > 0: return sum(union_grades_list) / len(union_grades_list) else: return 0 def get_all_lecturers_average_grade(course_name, lecturers_list): union_grades_list = [] for lecturer in lecturers_list: if isinstance(lecturer, Lecturer): if course_name in lecturer.grades: union_grades_list.extend(lecturer.grades[course_name]) else: continue else: raise TypeError( f"Один из элементов списка не является экземпляром класса Lecturer" ) if len(union_grades_list) > 0: return sum(union_grades_list) / len(union_grades_list) else: return 0 student_one = Student("Петя", "Петров", "М") student_two = Student("Олег", "Олежин", "М") reviewer_one = Reviewer("Степан", "Тровин") reviewer_two = Reviewer("Денис", "Деревин") lecturer_one = Lecturer("Виктор", "Стигин") lecturer_two = Lecturer("Юрий", "Николав") student_one.courses_in_progress += ["Python", "C++"] student_two.courses_in_progress += ["C++", "Java"] lecturer_one.courses_attached += ["Java", "C++"] lecturer_two.courses_attached += ["Javascript", "C++"] reviewer_one.courses_attached += ["Python", "C++"] reviewer_two.courses_attached += ["Python", "C++"] student_one.rate_lecture(lecturer_one, "C++", 5) student_two.rate_lecture(lecturer_two, "C++", 8) reviewer_one.rate_hw(student_one, "Python", 3) reviewer_two.rate_hw(student_two, "Python", 5) get_all_students_average_grade("Python", [student_one, student_two]) get_all_lecturers_average_grade("C++", [lecturer_one, lecturer_two])