Как вывести все оценки по всем предметам?

Я пытаюсь вывести все оценки ученика с помощью 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
→ Ссылка