Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 24, 2022 22:34:40

Chicony_@mail.ru
Зарегистрирован: 2022-11-24
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

пожалуйста помогите мне в решении задачи ,сил больше нету решить ее!

Задание № 1. Наследование
Исходя из квиза к предыдущему занятию, у нас уже есть класс преподавателей и класс студентов (вы можете взять этот код за основу или написать свой). Студентов пока оставим без изменения, а вот преподаватели бывают разные, поэтому теперь класс Mentor должен стать родительским классом, а от него нужно реализовать наследование классов Lecturer (лекторы) и Reviewer (эксперты, проверяющие домашние задания). Очевидно, имя, фамилия и список закрепленных курсов логично реализовать на уровне родительского класса. А чем же будут специфичны дочерние классы? Об этом в следующих заданиях.

Задание № 2. Атрибуты и взаимодействие классов.
В квизе к предыдущей лекции мы реализовали возможность выставлять студентам оценки за домашние задания. Теперь это могут делать только Reviewer (реализуйте такой метод)! А что могут делать лекторы? Получать оценки за лекции от студентов Реализуйте метод выставления оценок лекторам у класса Student (оценки по 10-балльной шкале, хранятся в атрибуте-словаре у Lecturer, в котором ключи – названия курсов, а значения – списки оценок). Лектор при этом должен быть закреплен за тем курсом, на который записан студент.

Задание № 3. Полиморфизм и магические методы
Перегрузите магический метод __str__ у всех классов.
У проверяющих он должен выводить информацию в следующем виде:

print(some_reviewer)
Имя: Some
Фамилия: Buddy
У лекторов:

print(some_lecturer)
Имя: Some
Фамилия: Buddy
Средняя оценка за лекции: 9.9
А у студентов так:

print(some_student)
Имя: Ruoy
Фамилия: Eman
Средняя оценка за домашние задания: 9.9
Курсы в процессе изучения: Python, Git
Завершенные курсы: Введение в программирование
Реализуйте возможность сравнивать (через операторы сравнения) между собой лекторов по средней оценке за лекции и студентов по средней оценке за домашние задания.
Задание № 4. Полевые испытания
Создайте по 2 экземпляра каждого класса, вызовите все созданные методы, а также реализуйте две функции:

для подсчета средней оценки за домашние задания по всем студентам в рамках конкретного курса (в качестве аргументов принимаем список студентов и название курса);
для подсчета средней оценки за лекции всех лекторов в рамках курса (в качестве аргумента принимаем список лекторов и название курса).
https://replit.com/@nikolaivinnitsk/DZ-1#main.py

Отредактировано Chicony_@mail.ru (Ноя. 25, 2022 11:28:16)

Офлайн

#2 Ноя. 24, 2022 22:45:29

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1019
Репутация: +  94  -
Профиль   Отправить e-mail  

пожалуйста помогите мне в решении задачи ,сил больше нету решить ее!

[code python]между этими тегами вставить код[/code]

Офлайн

#3 Ноя. 25, 2022 09:31:56

Chicony_@mail.ru
Зарегистрирован: 2022-11-24
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

пожалуйста помогите мне в решении задачи ,сил больше нету решить ее!


xam1816
что вы предлогаете я не пойму как это решить мой вопрос

Офлайн

#4 Ноя. 25, 2022 09:40:51

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2098
Репутация: +  59  -
Профиль   Отправить e-mail  

пожалуйста помогите мне в решении задачи ,сил больше нету решить ее!

Chicony_@mail.ru
xam1816что вы предлогаете я не пойму как это решить мой вопрос
попробуйте закончить школу хотябы до 5 класса



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#5 Ноя. 25, 2022 10:26:36

Chicony_@mail.ru
Зарегистрирован: 2022-11-24
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

пожалуйста помогите мне в решении задачи ,сил больше нету решить ее!

ZerG
Очень не ккоректо на зов о помощи язвить!Естественно дело каждого проявлять свою степень воспитанности.

Офлайн

#6 Ноя. 25, 2022 11:26:56

Chicony_@mail.ru
Зарегистрирован: 2022-11-24
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

пожалуйста помогите мне в решении задачи ,сил больше нету решить ее!

 class Student:
    def __init__(self, name, surname):
        self.name = name
        self.surname = surname
        self.finished_courses = []
        self.courses_in_progress = []
        self.grades = {}
        self.srgr=float()
    def srgr(self):
        grades_count=0
        if not self.grades:
            return 0
        spisok=[]
        for k in self.grades:
             grades_count += len(self.grades[k])
             spisok.extent(k)
        return float(sum(spisok)/max(len(spisok), 1))
      
    def __str__(self):
       # grades_count = 0
        courses_in_progress_string = ', '.join(self.courses_in_progress)
        finished_courses_string = ', '.join(self.finished_courses)
 #      for k in self.grades:
  #          grades_count += len(self.grades[k])
   #     self.average_rating = sum(map(sum, self.grades.values())) / grades_count  '''
        
        res = f'Имя:{self.name}\n' \
              f'Фамилия:{self.surname}\n' \
              f'Средняя оценка за домашнее задание:{self.srgr}\n' \
              f'Курсы в процессе обучени:{courses_in_progress_string}\n' \
              f'Завершенные курсы:{finished_courses_string}'
        return res
      
    def rate_hw(self, lecturer, course, grade):
        if isinstance(lecturer,Lecturer) and course in self.courses_in_progress and course in lecturer.courses_attached:
           if course in lecturer.grades:
               lecturer.grades[course] += [grade]
           else:
               lecturer.grades[course] = [grade]
        else:
            return'Ошибка'
          
    def __lt__(self, other):
        if not isinstance(other, Student):
            print('Такое сравнение некорректно')
            return
        return self.srgr < other.srgr
      
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.average_rating = float()
        self.grades = {}
        self.srgr = float()
    def srgr(self):
        grades_count=0
        if not self.grades:
            return 0
        spisok=[]
        for k in self.grades.values():
           grades_count += len(self.grades[k])
           spisok.extent(k)
        return float(sum(spisok)/max(len(spisok), 1))
      
    def __str__(self):
    #    grades_count = 0 
     #   for k in self.grades:
      #      grades_count += len(self.grades[k])
       # self.average_rating = sum(map(sum, self.grades.values())) / grades_count
        res = f'Имя: {self.name}\nФамилия: {self.surname}\nСредняя оценка за лекции: {self.srgr}'
        return res
    def __lt__(self, other):
        if not isinstance(other, Lecturer):
            print('Такое сравнение некорректно')
            return
        return self.srgr < other.srgr
      
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:
            if course in student.grades:
                student.grades[course] += [grade]
            else: 
                student.grades[course] = [grade]
        else:
            return'Ошибка'
          
    def __str__(self):
        res = f'Имя: {self.name}\nФамилия: {self.surname}'
        return res
      
best_lecturer_1 = Lecturer('Ivan', 'Ivanov')
best_lecturer_1.courses_attached += ['Python']
best_lecturer_2 = Lecturer('Petr', 'Petrov')
best_lecturer_2.courses_attached += ['Java']
best_lecturer_3 = Lecturer('Semen', 'Zarev')
best_lecturer_3.courses_attached += ['Python']
    
cool_rewiewer_1 = Reviewer('Some', 'Buddy')
cool_rewiewer_1.courses_attached += ['Python']
cool_rewiewer_1.courses_attached += ['Java']
cool_rewiewer_2 = Reviewer('Ostap', 'Bender')
cool_rewiewer_2.courses_attached += ['Python']
cool_rewiewer_2.courses_attached += ['Java']
student_1 = Student('Denis', 'Sviridov')
student_1.courses_in_progres += ['Python']
student_1.finished_coursers += ['Введение в программирование']
student_2 = Student('Roman', 'Malikov')
student_2.courses_in_progres += ['Java']
student_2.finished_coursers += ['Введение в программирование']
student_3 = Student('Sidor', 'Petrov')
student_3.courses_in_progres += ['Python']
student_3.finished_courses += ['Введение в программирование']
student_1.rate_hw(best_lecturer_1, 'Python', 10)
student_1.rate_hw(best_lecturer_1, 'Python', 10)
student_1.rate_hw(best_lecturer_1, 'Python', 10)
student_1.rate_hw(best_lecturer_2, 'Python', 5)
student_1.rate_hw(best_lecturer_2, 'Python', 7)
student_1.rate_hw(best_lecturer_2, 'Python', 8) 
student_1.rate_hw(best_lecturer_1, 'Python', 7)
student_1.rate_hw(best_lecturer_1, 'Python', 8)
student_1.rate_hw(best_lecturer_1, 'Python', 9)
student_2.rate_hw(best_lecturer_2, 'Python', 10)
student_2.rate_hw(best_lecturer_2, 'Python', 8)
student_2.rate_hw(best_lecturer_2, 'Python', 9)
student_3.rate_hw(best_lecturer_3, 'Python', 5)
student_3.rate_hw(best_lecturer_3, 'Python', 6)
student_3.rate_hw(best_lecturer_3, 'Python', 7)
cool_rewiewer_1.rate_hw(student_1, 'Python', 8)
cool_rewiewer_1.rate_hw(student_1, 'Python', 9)
cool_rewiewer_1.rate_hw(student_1, 'Python', 10)
cool_rewiewer_2.rate_hw(student_2, 'Java', 8)
cool_rewiewer_2.rate_hw(student_2, 'Java', 7)
cool_rewiewer_2.rate_hw(student_2, 'Java', 9)
cool_rewiewer_2.rate_hw(student_3, 'Python', 8)
cool_rewiewer_2.rate_hw(student_3, 'Python', 7)
cool_rewiewer_2.rate_hw(student_3, 'Python', 9)
cool_rewiewer_2.rate_hw(student_3, 'Python', 8)
cool_rewiewer_2.rate_hw(student_3, 'Python', 7)
cool_rewiewer_2.rate_hw(student_3, 'Python', 9)
print(f'Перечень студентов:\n\n{student_1}\n\n{student_2}\n\n{student_3}')
print()
print()
print(f'Перечень лекторов:\n\n{best_lecturer_1}\n\n{best_lecturer_2}\n\n{best_lecturer_3}')
print()
print()
print(f'Результат сравнения студентов(по средним оценкам за ДЗ): '
      f'{student_1.name} {student_1.surname} < {student_2.name} {student_2.surname} ={student_1 > student_2}')
print()
print(f'Результат сравнения лекторов (по средним оценкам за лекции): '
      f'{best_lecturer_1.name} {best_lecturer_1.surname} < {best_lecturer_2.name} {best_lecturer_2.surname} = {best_lecturer_1 > best_lecturer_2}')
print()
student_list = [student_1, student_2, student_3]
lecturer_list = [best_lecturer_1, best_lecturer_2, best_lecturer_3]
def student_rating(student_list, course_name):
  
    sum_all = 0
    count_all = []
    for stud in student_list:
       if stud.courses_in_progress == [course_name]:
            sum_all += len(student_list[stud])
            count_all.extent(stud)
    #average_for_all = sum_all / count_all
    return float (sum(count_all)/max(len(count_all),1))#average_for_all
def lecturer_rating(lecturer_list, course_name):
    sum_all = 0
    count_all = 0
    for lect in lecturer_list:
        if lect.courses_attached == [course_name]:
          sum_all += len(lecturer_list[lect])
          count_all.extent(lect)
    #average_for_all = sum_all / count_all
    return float (sum(count_all)/max(len(count_all),1))#average_for_all
print(f"Средняя оценка для всех студентов по курсу {'Python'}: {student_rating(student_list, 'Python')}")
print()
print(f"Средняя оценка для всех лекторов по курсу {'Python'}: {lecturer_rating(lecturer_list, 'Python')}")
print()

Офлайн

#7 Ноя. 25, 2022 23:52:37

Chicony_@mail.ru
Зарегистрирован: 2022-11-24
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

пожалуйста помогите мне в решении задачи ,сил больше нету решить ее!

Некто не поможет?

Офлайн

#8 Ноя. 26, 2022 09:36:06

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 8823
Репутация: +  787  -
Профиль   Отправить e-mail  

пожалуйста помогите мне в решении задачи ,сил больше нету решить ее!

Chicony_@mail.ru
 class Lecturer(Mentor):
    def __init__(self, name, surname):
        super().__init__(name, surname)
        #self.average_rating = float()
        self.grades = {}
        self.srgr = float()
    def srgr(self):
        grades_count=0
        if not self.grades:
            return 0
        spisok=[]
        for k in self.grades.values():
           grades_count += len(self.grades[k])
           spisok.extent(k)
        return float(sum(spisok)/max(len(spisok), 1))
А как ты так создаёшь атрибут srgr и метод srgr?

Лучше это всё отложи в другой файл, создай новый файл и делай всё сначала. Потому что это какая-то параша, если так в целом смотреть.

Chicony_@mail.ru
Исходя из квиза к предыдущему занятию, у нас уже есть класс преподавателей и класс студентов (вы можете взять этот код за основу или написать свой).
Вот надо написать свой. Не надо за основу брать какую-то парашу из предыдущего квиза. Пока ты не умеешь писать такие коды, которые потом можно переиспользовать, лучше каждый раз писать новые коды, чтобы руку набить и приучиться писать всё в чистом виде и только самое необходимое. А потом уже, когда ты будешь коды шлёпать один за другим без проблем и довольно чистые и минимальные, тогда уж можно учиться писать переиспользуемые коды. Иначе ты будешь пытаться разобраться в плохом коде, чтобы его дописать и получить ещё более плохой код. Так ты программировать не научишься. Хорошая программа состоит из хороших кодов. А из плохих кодов ты даже плохую программу сделать не сможешь, она просто не получится в целом виде.



Отредактировано py.user.next (Ноя. 26, 2022 09:36:34)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version