Как вывести все оценки по всем предметам?
Я пытаюсь вывести все оценки ученика с помощью NetSсhoolAPI, но этого сделать не получается. Я пробовал сначала создавать словарь, в котором будут храниться названия предметов, а в списке - сами оценки. Но в списках начинают храниться одни и те же оценки. Подскажите, пожалуйста, в чём ошибка?
Вот такие оценки должны вывестись:

Сам код:
import asyncio
from netschoolapi import NetSchoolAPI
import datetime
async def get_evaluation():
ns = NetSchoolAPI('https://net-school.cap.ru/')
await ns.login(
'', # Логин пользователя
'', # Пароль пользователя
511,
)
diary = await ns.diary(start=datetime.date(2023, 1, 1), end=datetime.date(2024, 5, 31))
slovar = {}
eval_slovar = []
for i in range(len(diary.schedule)):
for lesson in diary.schedule[i].lessons:
slovar[lesson.subject] = eval_slovar
for assignment in lesson.assignments:
if assignment.mark:
slovar[lesson.subject] = eval_slovar.append(assignment.mark)
print(slovar)
await ns.logout()
if __name__ == '__main__':
asyncio.run(get_evaluation())
Ответы (1 шт):
Автор решения: MarianD
→ Ссылка
Проблема заключается в команде присвоения
slovar[lesson.subject] = eval_slovar.append(assignment.mark)
потому что на правой стороне всегда будет значение None!
Да, метод .append() добавляет к списку элемент, но сам метод возвращает None.
(Так принято в Питоне для методов, которые изменяют объект на месте.)
Исправление:
- Сначала добавите к списку элемент,
- затем этот — уже модифицированный — список присвойте.
Значит, вместо вашей одной команды примените две:
eval_slovar.append(assignment.mark)
slovar[lesson.subject] = eval_slovar