Skip to content

oop_homework+_3.py #20

@anton216216

Description

@anton216216

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, lecturer, course, grade):
    if not isinstance(lecturer, Lecturer):
        return "Ошибка: можно оценивать только лекторов"
    
    if course not in self.courses_in_progress:
        return "Ошибка: студент не записан на этот курс"
    
    if course not in lecturer.courses_attached:
        return "Ошибка: лектор не ведет этот курс"
    
    if not (0 <= grade <= 10):
        return "Ошибка: оценка должна быть от 0 до 10"
    
    if course not in lecturer.grades:
        lecturer.grades[course] = []
    lecturer.grades[course].append(grade)
    return None

def get_average_grade(self):
    if not self.grades:
        return 0
    all_grades = []
    for course_grades in self.grades.values():
        all_grades.extend(course_grades)
    return sum(all_grades) / len(all_grades)

def __str__(self):
    courses_in_progress_str = ', '.join(self.courses_in_progress)
    finished_courses_str = ', '.join(self.finished_courses)
    avg_grade = self.get_average_grade()
    return (f"Имя: {self.name}\n"
            f"Фамилия: {self.surname}\n"
            f"Средняя оценка за домашние задания: {avg_grade:.1f}\n"
            f"Курсы в процессе изучения: {courses_in_progress_str}\n"
            f"Завершенные курсы: {finished_courses_str}")

def __lt__(self, other):
    if not isinstance(other, Student):
        return NotImplemented
    return self.get_average_grade() < other.get_average_grade()

def __le__(self, other):
    if not isinstance(other, Student):
        return NotImplemented
    return self.get_average_grade() <= other.get_average_grade()

def __eq__(self, other):
    if not isinstance(other, Student):
        return NotImplemented
    return self.get_average_grade() == other.get_average_grade()

def __ne__(self, other):
    if not isinstance(other, Student):
        return NotImplemented
    return self.get_average_grade() != other.get_average_grade()

def __gt__(self, other):
    if not isinstance(other, Student):
        return NotImplemented
    return self.get_average_grade() > other.get_average_grade()

def __ge__(self, other):
    if not isinstance(other, Student):
        return NotImplemented
    return self.get_average_grade() >= other.get_average_grade()

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):
    if not self.grades:
        return 0
    all_grades = []
    for course_grades in self.grades.values():
        all_grades.extend(course_grades)
    return sum(all_grades) / len(all_grades)

def __str__(self):
    avg_grade = self.get_average_grade()
    return (f"Имя: {self.name}\n"
            f"Фамилия: {self.surname}\n"
            f"Средняя оценка за лекции: {avg_grade:.1f}")

def __lt__(self, other):
    if not isinstance(other, Lecturer):
        return NotImplemented
    return self.get_average_grade() < other.get_average_grade()

def __le__(self, other):
    if not isinstance(other, Lecturer):
        return NotImplemented
    return self.get_average_grade() <= other.get_average_grade()

def __eq__(self, other):
    if not isinstance(other, Lecturer):
        return NotImplemented
    return self.get_average_grade() == other.get_average_grade()

def __ne__(self, other):
    if not isinstance(other, Lecturer):
        return NotImplemented
    return self.get_average_grade() != other.get_average_grade()

def __gt__(self, other):
    if not isinstance(other, Lecturer):
        return NotImplemented
    return self.get_average_grade() > other.get_average_grade()

def __ge__(self, other):
    if not isinstance(other, Lecturer):
        return NotImplemented
    return self.get_average_grade() >= other.get_average_grade()

class Reviewer(Mentor):
def init(self, name, surname):
super().init(name, surname)

def rate_hw(self, student, course, grade):
    if course not in self.courses_attached:
        return "Ошибка: ревьюер не прикреплен к этому курсу"
    
    if course not in student.courses_in_progress:
        return "Ошибка: студент не изучает этот курс"
    
    if course not in student.grades:
        student.grades[course] = []
    student.grades[course].append(grade)
    return None

def __str__(self):
    return f"Имя: {self.name}\nФамилия: {self.surname}"

Демонстрация работы

lecturer1 = Lecturer('Иван', 'Иванов')
lecturer2 = Lecturer('Петр', 'Петров')
reviewer = Reviewer('Сергей', 'Сергеев')
student1 = Student('Анна', 'Аннова', 'Ж')
student2 = Student('Олег', 'Олегов', 'М')

Настройка курсов

student1.courses_in_progress = ['Python', 'Git']
student1.finished_courses = ['Введение в программирование']
student2.courses_in_progress = ['Python', 'Java']

lecturer1.courses_attached = ['Python', 'C++']
lecturer2.courses_attached = ['Python', 'Java']
reviewer.courses_attached = ['Python', 'Java']

Добавление оценок

reviewer.rate_hw(student1, 'Python', 9)
reviewer.rate_hw(student1, 'Python', 8)
reviewer.rate_hw(student1, 'Git', 10)

reviewer.rate_hw(student2, 'Python', 7)
reviewer.rate_hw(student2, 'Python', 6)
reviewer.rate_hw(student2, 'Java', 8)

student1.rate_lecture(lecturer1, 'Python', 9)
student1.rate_lecture(lecturer1, 'Python', 10)
student2.rate_lecture(lecturer2, 'Python', 8)
student2.rate_lecture(lecturer2, 'Java', 9)

Тестирование str

print("=== Reviewer ===")
print(reviewer)
print("\n=== Lecturer 1 ===")
print(lecturer1)
print("\n=== Lecturer 2 ===")
print(lecturer2)
print("\n=== Student 1 ===")
print(student1)
print("\n=== Student 2 ===")
print(student2)

Тестирование сравнения

print("\n=== Сравнение ===")
print(f"lecturer1 > lecturer2: {lecturer1 > lecturer2}")
print(f"lecturer1 < lecturer2: {lecturer1 < lecturer2}")
print(f"student1 == student2: {student1 == student2}")
print(f"student1 >= student2: {student1 >= student2}")

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions