/
RecentFellowKid
/
OOP
Обзор
Документация
Войти
/
RecentFellowKid
/
OOP
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
fourth_task.py
170 строк
6 KB
RecentFellowKid
Fourth task
11 авг 2025, 03:06
11 авг 2025, 03:06
abe10be
Код
Авторство
О чём код?
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: lecturer.grades.setdefault(course, []).append(grade) else: return 'Ошибка' def average_grade(self): total = sum(sum(g) for g in self.grades.values()) count = sum(len(g) for g in self.grades.values()) return round(total / count, 1) if count else 0 def __str__(self): return (f"Имя: {self.name}\n" f"Фамилия: {self.surname}\n" f"Средняя оценка за домашние задания: {self.average_grade()}\n" f"Курсы в процессе изучения: {', '.join(self.courses_in_progress)}\n" f"Завершенные курсы: {', '.join(self.finished_courses)}") 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 average_grade(self): total = sum(sum(g) for g in self.grades.values()) count = sum(len(g) for g in self.grades.values()) return round(total / count, 1) if count else 0 def __str__(self): return (f"Имя: {self.name}\n" f"Фамилия: {self.surname}\n" f"Средняя оценка за лекции: {self.average_grade()}") class Reviewer(Mentor): 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 \ 1 <= grade <= 10: student.grades.setdefault(course, []).append(grade) else: return 'Ошибка' def __str__(self): return f"Имя: {self.name}\nФамилия: {self.surname}" def average_grade_for_students(students, course): total = 0 count = 0 for student in students: if course in student.grades: total += sum(student.grades[course]) count += len(student.grades[course]) return round(total / count, 1) if count else 0 def average_grade_for_lecturers(lecturers, course): total = 0 count = 0 for lecturer in lecturers: if course in lecturer.grades: total += sum(lecturer.grades[course]) count += len(lecturer.grades[course]) return round(total / count, 1) if count else 0 courses = ['Python', 'JavaScript', 'C++', 'Data Science'] student1 = Student('Иван', 'Иванов', 'm') student1.courses_in_progress += ['Python', 'C++'] student1.finished_courses += ['Git'] student2 = Student('Анна', 'Анновна', 'f') student2.courses_in_progress += ['Python', 'Data Science'] student2.finished_courses += ['Введение в программирование'] student3 = Student('Пётр', 'Петров', 'M') student3.courses_in_progress += ['JavaScript', 'C++'] student3.finished_courses += ['Git'] students = [student1, student2, student3] lecturer1 = Lecturer('Сергей', 'Сергеев') lecturer1.courses_attached += ['Python'] lecturer2 = Lecturer('Андрей', 'Андреев') lecturer2.courses_attached += ['C++'] lecturer3 = Lecturer('Константин', 'Константинов') lecturer3.courses_attached += ['JavaScript'] lecturer4 = Lecturer('Ярослав', 'Ярославский') lecturer4.courses_attached += ['Data Science'] lecturer5 = Lecturer('Павел', 'Павлович') lecturer5.courses_attached += ['Python', 'C++'] lecturers = [lecturer1, lecturer2, lecturer3, lecturer4, lecturer5] reviewer1 = Reviewer('Екатерина', 'Екатеринская') reviewer1.courses_attached += courses reviewer2 = Reviewer('Илья', 'Ильич') reviewer2.courses_attached += courses for reviewer in [reviewer1, reviewer2]: reviewer.rate_hw(student1, 'Python', 8) reviewer.rate_hw(student1, 'C++', 9) reviewer.rate_hw(student2, 'Python', 10) reviewer.rate_hw(student2, 'Data Science', 9) reviewer.rate_hw(student3, 'JavaScript', 10) reviewer.rate_hw(student3, 'C++', 7) student1.rate_lecturer(lecturer1, 'Python', 6) student1.rate_lecturer(lecturer2, 'C++', 8) student1.rate_lecturer(lecturer5, 'Python', 9) student2.rate_lecturer(lecturer1, 'Python', 10) student2.rate_lecturer(lecturer4, 'Data Science', 10) student2.rate_lecturer(lecturer5, 'Python', 10) student3.rate_lecturer(lecturer2, 'C++', 7) student3.rate_lecturer(lecturer3, 'JavaScript', 7) student3.rate_lecturer(lecturer5, 'C++', 7) print("\nСтуденты") for s in students: print(s) print() print("Лекторы") for l in lecturers: print(l) print() print("Проверяющие") print(reviewer1) print() print(reviewer2) print() print("Средние оценки по курсам (студенты)") for course in courses: print(f"{course}: {average_grade_for_students(students, course)}") print("\nСредние оценки по курсам (лекторы)") for course in courses: print(f"{course}: {average_grade_for_lecturers(lecturers, course)}")