Бот расписания держит группы, внутри — список пар, у пары — словарь «предмет / кабинет». За час: собрать дерево, прочитать значение по пути, обойти список и поменять один кабинет, не стирая соседей. Потом короткий тест.
Код в OnlineGDB (Python 3). Пароль и кабинет студента не нужны: задания на этой странице. Внизу напишите ФИО и нажмите «Отправить преподавателю».
Можно работать. Кабинет студента не нужен.
Отметьте, кого нет, и сохраните список. Выберите перемену и нажмите «Выдать практику»: таймер пойдёт с этого момента. Для электронного занятия — «Выдать без таймера»: каждый сам, без звонков и без ожидания группы. Блок закрывается по времени или раньше, если его сдали все. «Ещё 3 минуты» — один раз на блок, минуты снимаются со следующих, звонок не двигается.
Пара на 45 минут. Перемена, если она нужна, начинается после этих 45 минут. «Ещё 3 минуты» — один раз на блок, минуты снимаются со следующих. «Закончить перемену» — сразу продолжить работу.
Отдельная выдача: не были на паре или не успели. По звонку практика закрывается сама: все кейсы сданы — зачёт, не все — сюда с меткой «не успел». Кнопка «Закрыть практику» делает то же раньше звонка. Укажите дату, сохраните состав и нажмите «Выдать досдачу».
Совпал текст поля (после нормализации). Буквы теста здесь не помечаются.
Практика видит только тех, кто вошёл в кабинет студента. Без входа сдать блок нельзя.
Преподаватель отмечает отсутствующих на этой же странице, но только после входа в кабинет. Кто не отмечен отсутствующим, тот в списке присутствующих.
Если вы уже в аудитории, скажите преподавателю: он снимет отметку, и вы войдёте в общий ход. Если пары не было — попросите записать вас на досдачу (отдельная выдача, можно одному).
Вас записали на досдачу. Задания откроются, когда преподаватель нажмёт «Выдать досдачу».
Преподаватель ещё не выбрал участников или список пуст.
Все участники досдачи сдали блоки и тест. Отчёт лежит у преподавателя. Верные буквы теста на этой странице не показываются.
Преподаватель отметил отсутствующими всех. Снимите отметку у тех, кто пришёл, и сохраните список.
Перемена. Кейс на паузе: после неё продолжаем с того же места, если он ещё не сдан.
Отчёт лежит у преподавателя. Верные буквы теста на странице не показываются.
Статус «не выдана». У блоков свой таймер.
Дерево группа → список пар → dict, путь ключ / индекс / ключ, обход и правка кабинета ИИ9-4, шесть вопросов.
Около 15 минут. Сначала схема, потом код. Блок закроется по таймеру.
Плоский словарь «предмет → кабинет» удобен для одной группы на один день. Бот колледжа хранит сразу несколько групп. Снаружи — словарь групп. Значение группы — список пар. Каждая пара — снова словарь с ключами предмет и кабинет.
schedule = {
"ИИ9-4": [
{"предмет": "математика", "кабинет": "101"},
{"предмет": "физика", "кабинет": "102"},
],
"ИС9-5": [
{"предмет": "история", "кабинет": "103"},
],
}
print(schedule)
print(type(schedule), type(schedule["ИИ9-4"]))
Своя структура может отличаться. Минимум две группы, у одной — не меньше двух пар. В ответе — ваш код и вывод OnlineGDB.
Около 15 минут. Блок закроется по таймеру.
Чтобы достать кабинет первой пары ИИ9-4, идут по цепочке: сначала ключ группы, потом индекс в списке, потом ключ поля. Ошибка на любом шаге — разная: неверный ключ словаря даёт KeyError, индекс за краем списка — IndexError.
| Шаг | Выражение | Что получаем |
|---|---|---|
| 1 | schedule["ИИ9-4"] | список пар группы |
| 2 | …[0] | словарь первой пары |
| 3 | …["кабинет"] | строка кабинета |
| сбой | schedule["ИИ9-9"] | KeyError |
| сбой | schedule["ИИ9-4"][9] | IndexError |
print(schedule["ИИ9-4"][0]["кабинет"]) print(schedule["ИИ9-4"][1]["предмет"]) # schedule["ИИ9-9"] → KeyError # schedule["ИИ9-4"][9] → IndexError
Около 15 минут. Сначала схема цикла и правки, потом свой код и шесть вопросов. Блок закроется по таймеру. Верные буквы на странице не показываются.
Список пар одной группы читают одним циклом. Все группы сразу — двумя: снаружи items(), внутри for lesson in pairs. Кабинет меняют по пути до листа. Если вместо этого записать в schedule["ИИ9-4"] новый список из одной пары, остальные пары группы пропадут.
| Действие | Код | Что будет |
|---|---|---|
| Безопасно | schedule["ИИ9-4"][1]["кабинет"] = "205" | меняется только кабинет второй пары |
| Опасно | schedule["ИИ9-4"] = [{"предмет":"физика","кабинет":"205"}] | остальные пары группы исчезают |
rooms = []
for lesson in schedule["ИИ9-4"]:
rooms.append(lesson["кабинет"])
print(rooms)
schedule["ИИ9-4"][1]["кабинет"] = "205"
print(schedule["ИИ9-4"][0]["кабинет"])
print(schedule["ИИ9-4"][1]["кабинет"])
Совпало 0 из 0
Код кабинета не нужен. Напишите фамилию, имя и отчество и отправьте все три блока одним разом.