Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.74/34: Рейтинг темы: голосов - 34, средняя оценка - 4.74
0 / 0 / 0
Регистрация: 22.10.2022
Сообщений: 25

Наследование, полиморфизм, атрибуты классов

25.11.2022, 10:54. Показов 7800. Ответов 35
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите в решении задачи

Добавлено через 50 секунд
Задание № 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 экземпляра каждого класса, вызовите все созданные методы, а также реализуйте две функции:

для подсчета средней оценки за домашние задания по всем студентам в рамках конкретного курса (в качестве аргументов принимаем список студентов и название курса);
для подсчета средней оценки за лекции всех лекторов в рамках курса (в качестве аргумента принимаем список лекторов и название курса).

Добавлено через 5 минут
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
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()
Добавлено через 1 минуту
Лучше если по ссылке там все нормально с синтаксисом https://replit.com/@nikolaivinnitsk/DZ-1#main.py

Добавлено через 57 секунд
Странно что на форум копирую со всеми отступами как положено а на форуме по факту выдает без отступов.!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.11.2022, 10:54
Ответы с готовыми решениями:

Наследование классов
Приветствую, дорогие Господа и дамы, прошу проверить выполнение домашнего задания. Заранее спасибо. Единственное, прошу учитывать, что...

Наследование классов
Всем привет. Только начал изучать классы и уже появились проблемы в понимании наследования. Я ищу площадь и длину окружности на...

Наследование классов(Сириус)
Класс разработчик имеет поля: name-имя surname-Фамилия skills-лист языков программирования salary-зарплата Tpel - метод на...

35
 Аватар для Semen-Semenich
5239 / 3483 / 1176
Регистрация: 21.03.2016
Сообщений: 8,314
28.11.2022, 15:56
Студворк — интернет-сервис помощи студентам
подавайте требуемое количество аргументов. но ваш код у меня уже на 14 строке выдал ошибку не говоря уже 206

for k in self.grades.values():
AttributeError: 'int' object has no attribute 'values'
почему то словарь self.grades стал числом.
0
0 / 0 / 0
Регистрация: 22.10.2022
Сообщений: 25
28.11.2022, 15:59  [ТС]
Semen-Semenich, В 206 строку внес аргумент 'grades_st_list' ничего не изменилось щас я 14 уже исправил строку я загружу исправленный код

Добавлено через 2 минуты
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
class Student:
    def __init__(self, name, surname):
        self.name = name
        self.surname = surname
        self.finished_courses = []
        self.courses_in_progress = []
        self.grades = {}
        
 
    def srgr(self):
        if not self.grades:
            return 0
        spisok=[] 
        for k in self.grades.values():
             spisok.extend(k)
        #return sum([self.grades for self.grades in spisok])/len(spisok)
        return round(sum(spisok)/len(spisok), 2)
    def __str__(self):
        courses_in_progress_string = ', '.join(self.courses_in_progress)
        finished_courses_string = ', '.join(self.finished_courses)
        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()
      
    def __le__(self, other):
        if not isinstance(other, Student):
            print('Такое сравнение некорректно')
            return  
        return self.srgr() > other.srgr()
  
  
    def __eq__(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.grades = {}
        
      
    def srgr(self):
        if not self.grades:
            return 0
        spisok=[]
        for k in self.grades.values():
           spisok.extend(k)
        #return sum([self.grades for self.grades in spisok])/len(spisok)
        return round(sum(spisok)/len(spisok), 2)
    def __str__(self):
        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()
 
    def __eq__(self,other):
        if not isinstance(other, Lecturer):
            print('Такое сравнение некорректно')
            return
        return self.course_name == other.course_name
      
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('Иван', 'Иванов')
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_progress += ['Python']
student_1.finished_courses += ['Введение в программирование']
 
student_2 = Student('Roman', 'Malikov')
student_2.courses_in_progress += ['Java']
student_2.finished_courses += ['Введение в программирование']
 
student_3 = Student('Sidor', 'Petrov')
student_3.courses_in_progress += ['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, 'Java', 5)
student_1.rate_hw(best_lecturer_2, 'Java', 7)
student_1.rate_hw(best_lecturer_2, 'Java', 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, 'Java', 10)
student_2.rate_hw(best_lecturer_2, 'Java', 5)
student_2.rate_hw(best_lecturer_2, 'Java', 6)
 
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, grades_st_list):
    count_all = []
    for stud in student_list:
       if stud.courses_in_progress == [course_name]:
            count_all.extend(stud)
    return sum(student_list.srgr())/len(count_all)
 
def lecturer_rating(lecturer_list, course_name):
    sum_all = 0
    count_all = []
    for lect in lecturer_list:
       if lect.courses_attached == [course_name]:
            sum_all += len(lecturer_list[lect])
            count_all.extend(lect)
    return sum(count_all)/max(len(count_all))
 
print(f"Средняя оценка для всех студентов по курсу {'Python'}: {student_rating(student_list, 'Python')}")
print()
 
print(f"Средняя оценка для всех лекторов по курсу {'Python'}: {lecturer_rating(lecturer_list, 'Python')}")
print()
0
 Аватар для Semen-Semenich
5239 / 3483 / 1176
Регистрация: 21.03.2016
Сообщений: 8,314
28.11.2022, 16:05
Цитата Сообщение от Chicony91 Посмотреть сообщение
В 206 строку внес аргумент 'grades_st_list'
где???
206 print(f"Средняя оценка для всех студентов по курсу {'Python'}: {student_rating(student_list, 'Python')}")

Добавлено через 1 минуту
уберите в 190 строке этот аргумент. вы его не используете.
Python
1
def student_rating(student_list, course_name, grades_st_list):
должно быть
Python
1
def student_rating(student_list, course_name):
0
0 / 0 / 0
Регистрация: 22.10.2022
Сообщений: 25
28.11.2022, 16:07  [ТС]
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
class Student:
    def __init__(self, name, surname):
        self.name = name
        self.surname = surname
        self.finished_courses = []
        self.courses_in_progress = []
        self.grades = {}
        
 
    def srgr(self):
        if not self.grades:
            return 0
        spisok=[] 
        for k in self.grades.values():
             spisok.extend(k)
        #return sum([self.grades for self.grades in spisok])/len(spisok)
        return round(sum(spisok)/len(spisok), 2)
    def __str__(self):
        courses_in_progress_string = ', '.join(self.courses_in_progress)
        finished_courses_string = ', '.join(self.finished_courses)
        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()
      
    def __le__(self, other):
        if not isinstance(other, Student):
            print('Такое сравнение некорректно')
            return  
        return self.srgr() > other.srgr()
  
  
    def __eq__(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.grades = {}
        
      
    def srgr(self):
        if not self.grades:
            return 0
        spisok=[]
        for k in self.grades.values():
           spisok.extend(k)
        #return sum([self.grades for self.grades in spisok])/len(spisok)
        return round(sum(spisok)/len(spisok), 2)
    def __str__(self):
        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()
 
    def __eq__(self,other):
        if not isinstance(other, Lecturer):
            print('Такое сравнение некорректно')
            return
        return self.course_name == other.course_name
      
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('Иван', 'Иванов')
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_progress += ['Python']
student_1.finished_courses += ['Введение в программирование']
 
student_2 = Student('Roman', 'Malikov')
student_2.courses_in_progress += ['Java']
student_2.finished_courses += ['Введение в программирование']
 
student_3 = Student('Sidor', 'Petrov')
student_3.courses_in_progress += ['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, 'Java', 5)
student_1.rate_hw(best_lecturer_2, 'Java', 7)
student_1.rate_hw(best_lecturer_2, 'Java', 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, 'Java', 10)
student_2.rate_hw(best_lecturer_2, 'Java', 5)
student_2.rate_hw(best_lecturer_2, 'Java', 6)
 
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, grades_st_list):
    count_all = []
    for stud in student_list:
       if stud.courses_in_progress == [course_name]:
            count_all.extend(stud)
    return sum(student_list.srgr())/len(count_all)
 
def lecturer_rating(lecturer_list, course_name):
    sum_all = 0
    count_all = []
    for lect in lecturer_list:
       if lect.courses_attached == [course_name]:
            sum_all += len(lecturer_list[lect])
            count_all.extend(lect)
    return sum(count_all)/max(len(count_all))
 
print(f"Средняя оценка для всех студентов по курсу {'Python'}: {student_rating(student_list, 'Python')}")
print()
 
print(f"Средняя оценка для всех лекторов по курсу {'Python'}: {lecturer_rating(lecturer_list, 'Python')}")
0
 Аватар для Semen-Semenich
5239 / 3483 / 1176
Регистрация: 21.03.2016
Сообщений: 8,314
28.11.2022, 16:08
можно еще месяц исправлять ошибки если неизвестно с чего все начиналось.
лучше опишите что предыдущем занятии должны получать на вход класс преподавателей и класс студентов и какие методы должны быть у каждого. потом пойдем по порядку
0
0 / 0 / 0
Регистрация: 22.10.2022
Сообщений: 25
28.11.2022, 16:19  [ТС]
Semen-Semenich, В 206 строку внес grades_st_list,а в 190 строке убрал grades_st_list.И все равно ошибка таже...

Добавлено через 2 минуты
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
 contributor
35 lines (29 sloc)  1.11 KB
 
class :
    def __init__ (self, name, surname, gender):
        self.name = name
        self.surname = surname
        self.gendergender = gender
        self.finished_courses = []
        self = []
        self.grades = {}
        
class :
    def __init__(self, name, surname):
        self.name = namename
        self.surname = surnamesurname
        self.courses_attachedcourses_attached = []
        
    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  coursein student.gradesgrades:
                student.grades [course] += [grade]
            else:
                student.grades [course] = [gradegrade]
        else:
            return 'Ошибка'
 
best_student  = Student('Ruoy', 'Eman', 'your_gender')
best_student.courses_in_progress += ['Python']
 
cool_mentor = Mentor('Some', 'Buddy')
cool_mentor.courses_attached += ['Python']
 
cool_mentor.rate_hw(best_studentbest_student, 'Python', 10)
cool_mentor.rate_hw(best_student, 'Python', 10)
cool_mentor.rate_hw(best_student, 'Python', 10)
 
print (best_student.grades)
Это начало задания ....а потом идут вопросы что я в самом начале выложил к этому заданию.
0
 Аватар для Semen-Semenich
5239 / 3483 / 1176
Регистрация: 21.03.2016
Сообщений: 8,314
28.11.2022, 16:31
Цитата Сообщение от Chicony91 Посмотреть сообщение
В 206 строку внес grades_st_list,а в 190 строке убрал grades_st_list
все писец приплыли. если ты там убрал то зачем в другом добавил??? что то мне кажется все уже покинули этот бессмысленный пост. что мне дает ваш код выше
Цитата Сообщение от Chicony91 Посмотреть сообщение
Это начало задания
само задание как звучит? самое первое про класс студента. что должен делать класс?

Добавлено через 1 минуту
Цитата Сообщение от Chicony91 Посмотреть сообщение
Исходя из квиза к предыдущему занятию, у нас уже есть класс преподавателей и класс студентов
вот тут что должны делать эти классы????
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
28.11.2022, 16:38

Не по теме:

Цитата Сообщение от Semen-Semenich Посмотреть сообщение
мне кажется все уже покинули этот бессмысленный пост
Пост не бессмысленный. Однако тут проще, наверно, сызнова написать, чем разгребать косяки.
Глядя на эти мытарства, я уж было собрался написать код в конце-то концов. Но перечитал условия и передумал. Многабукофф, лень.


0
0 / 0 / 0
Регистрация: 22.10.2022
Сообщений: 25
28.11.2022, 16:41  [ТС]
Добавлено через 56 секунд
iSmokeJC, Можите по простому пути написать самое простое?

Добавлено через 1 минуту
Мне продлили до 7 декабря ДЗ...Но у меня с этим ДЗ ничего не выходит.
0
 Аватар для Semen-Semenich
5239 / 3483 / 1176
Регистрация: 21.03.2016
Сообщений: 8,314
28.11.2022, 16:41
Цитата Сообщение от iSmokeJC Посмотреть сообщение
Однако тут проще, наверно, сызнова написать, чем разгребать косяки.
я тоже так подумал поэтому и прошу условия первого квиза. но то ли лыжи не едут то ли ..... автор тупо не понимает что от него хотят. зачем мне задание наследование если я не в курсе какие методы и аргументы есть у студента и преподавателей а еще откуда студент должен знать про лектора???
Python
1
2
    def rate_hw(self, lecturer, course, grade):
        if isinstance(lecturer,Lecturer) and course in self.courses_in_progress and course in lecturer.courses_attached:
тем более производить с ним какие то действия.
0
0 / 0 / 0
Регистрация: 22.10.2022
Сообщений: 25
28.11.2022, 16:51  [ТС]
Semen-Semenich, Вот это одно задание вытекающее в такой код -Задание № 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 экземпляра каждого класса, вызовите все созданные методы, а также реализуйте две функции:

для подсчета средней оценки за домашние задания по всем студентам в рамках конкретного курса (в качестве аргументов принимаем список студентов и название курса);
для подсчета средней оценки за лекции всех лекторов в рамках курса (в качестве аргумента принимаем список лекторов и название курса).

Добавлено через 3 минуты
Semen-Semenich, а это пред история ДЗ
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Класс для студентов :
    __инициализация__  определение (себя, имя, фамилия, пол):
        selfself.name = имя
        self.фамилияsurname = фамилия
        self.gendergender = пол
        self.finished_courses = []
        самоучитель_ин_прогресс = []
        самостоятельная работа.оценки = {}
        
Класс наставника :
    __инициализация__ def(себя, имя, фамилияsurname):
        self.name = имяname
        self.surname = surname
        self.courses_attached = []
        
    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 'Ошибка'
 
best_student = Student('Ruoy', 'Eman', 'your_gender')
best_student.courses_in_progress += ['Python']
 
cool_mentor = Mentor('Some', 'Buddy')
cool_mentor.courses_attached += ['Python']
 
cool_mentor.rate_hw(best_student, 'Python', 10)
cool_mentor.rate_hw(best_student, 'Python', 10)
cool_mentor.rate_hw(best_student, 'Python', 10)
 
print(best_student.grades)
В задании 1 есть строчка -у нас уже есть класс преподавателей и класс студентов (вот это к этому относится.

Добавлено через 4 минуты
Semen-Semenich, Скажите пожалуйста вы можите помочь в написании программы с нуля и правильно?Может быть как то решить эот вопрос!
0
 Аватар для Semen-Semenich
5239 / 3483 / 1176
Регистрация: 21.03.2016
Сообщений: 8,314
28.11.2022, 17:12
Цитата Сообщение от Chicony91 Посмотреть сообщение
есть строчка -у нас уже есть класс преподавателей и класс студентов
у вас есть у нас нет. что они делают эти классы какие аргументы принимают, какие методы реализуют нам неизвестно. то что написано в вашем коде не факт что то что нужно. отсюда куча ошибок в дальнейшем.
Цитата Сообщение от Chicony91 Посмотреть сообщение
помочь в написании программы с нуля и правильно?
для этого нужно знать все о классах студент и преподавателей с нуля.
0
0 / 0 / 0
Регистрация: 22.10.2022
Сообщений: 25
28.11.2022, 19:35  [ТС]
секундочку,можно попробовать вот так вот-
По этой ссылке пожалуйста перейдите и вы все поймете!

Добавлено через 3 минуты
https://github.com/netology-co... /6.classes

Добавлено через 2 минуты
Semen-Semenich, Я скинул ссылку на ДЗ и там есть еще одна ссылка нажав на класс преподавателей и класс студентов они выделены синим цветом.
Это полностью ДЗ которое дали мне для решения!Ух если его сделать то....

Добавлено через 2 часа 1 минуту
Semen-Semenich, Это достаточная информация?
0
 Аватар для Semen-Semenich
5239 / 3483 / 1176
Регистрация: 21.03.2016
Сообщений: 8,314
29.11.2022, 18:57
достаточно но очень запутанно и не понятно. то есть примеры кодов даны для первого задания но теперь их нужно изменять. '''выставлять студентам оценки за домашние задания. Теперь это могут делать только Reviewer (реализуйте такой метод)! А что могут делать лекторы? Получать оценки за лекции от студентов :''' тут ломается весь принцип ООП. классы ничего не должны знать друг о друге. откуда студент должен знать что оценки имеет право ставить только Reviewer тем более студент не имеет к нему никакого отношения. может я ошибаюсь и кто то более опытный скажет что это не так. но пока я в ступоре
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7393 / 4820 / 1246
Регистрация: 30.03.2015
Сообщений: 13,703
Записей в блоге: 29
29.11.2022, 19:09
да, стр там приведен пример плохой, не понятно кого мы распечатали -студента, лектора или эксперта, приходится догадываться. Для простановки оценок видимо у эксперта должен быть метод
def set_mark(student:Student, mark:float)
а у студента методы
def set_lecture_mark(lecturer:Lecturer, lecture_name:str) - ибо 1 лектор может 2 курса вести и более, потому ставить оценку надо конкретной лекции и человеку.
Согласен с Семёнычем что мы получаем связанность классов, но по сути тут просто зависимость от интерфейса, дактайпинг же, то есть мы ждем на вход любого кому можно проставить оценку, можно даже отдельный абстракт создать Markable и отнаследовать лектора и студента от него, но это я так, в целом рассуждаю.

Думаю в нетологии ожидают именно методы выше
0
0 / 0 / 0
Регистрация: 22.10.2022
Сообщений: 25
29.11.2022, 19:29  [ТС]
Помогите если кто может решить задание!Я новичок всего лишь 2 месяца изучаю и пока что в ступоре,а время идет!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.11.2022, 19:29

Наследование, полиморфизм, создание классов
Доброго времени суток, у меня возник вопрос , опять же по данной теме. Есть код. Задание было таким: Написать программу, в...

Наследование и Полиморфизм
Написать программу, в которой описана иерархия классов: функция от одной переменной (логарифм, натуральный логарифм, а также класс,...

Наследование и Полиморфизм
Написать программу, в которой описана иерархия классов: геометрические фигуры (куб, конус, тетраэдр). Реализовать методы вычисления объема...

Наследование. Инкапсуляция. Полиморфизм
Разработайте программу, с тремя классами - Rectangle, Triangle, Circle, каждый из которых имеет методы perimeter() (расчет и возврат...

Инкапсуляция, наследование, полиморфизм
Встретил в одном видео ( https://youtu.be/ve3eAhuaF0s?t=8m20s ) примерно такие предложения. Без инкапсуляции невозможно добиться...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
36
Ответ Создать тему
Новые блоги и статьи
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru