← ДУП.03
1-ИИ9-4 ДУП.03 ПЗ №40 1 ак. час без пароля таймер блоков Размещено: 30.10.2026

Обработка сложных вложенных структур данных

Бот расписания держит группы, внутри — список пар, у пары — словарь «предмет / кабинет». За час: собрать дерево, прочитать значение по пути, обойти список и поменять один кабинет, не стирая соседей. Потом короткий тест.

Код в OnlineGDB (Python 3). Пароль и кабинет студента не нужны: задания на этой странице. Внизу напишите ФИО и нажмите «Отправить преподавателю».

Можно работать. Кабинет студента не нужен.

ВложенностьПутьКейс

Кто на паре

Блок 1. Дерево: группа → пары → dict

Около 15 минут. Сначала схема, потом код. Блок закроется по таймеру.

Плоский словарь «предмет → кабинет» удобен для одной группы на один день. Бот колледжа хранит сразу несколько групп. Снаружи — словарь групп. Значение группы — список пар. Каждая пара — снова словарь с ключами предмет и кабинет.

schedule: группа → список пар → {предмет, кабинет} schedule (dict) "ИИ9-4" → list "ИС9-5" → list [0] математика кабинет 101 [1] физика кабинет 102 [0] история кабинет 103
Рисунок 1. Корень — словарь групп. У группы — список. У элемента списка — словарь пары.
Образец хода мысли, не текст для сдачи. Сначала завели группы как ключи. Потом у каждой группы — квадратные скобки списка. Внутри списка — фигурные скобки пары с двумя полями.
schedule = {
    "ИИ9-4": [
        {"предмет": "математика", "кабинет": "101"},
        {"предмет": "физика", "кабинет": "102"},
    ],
    "ИС9-5": [
        {"предмет": "история", "кабинет": "103"},
    ],
}
print(schedule)
print(type(schedule), type(schedule["ИИ9-4"]))

Своя структура может отличаться. Минимум две группы, у одной — не меньше двух пар. В ответе — ваш код и вывод OnlineGDB.

Блок 2. Путь: ключ, индекс, ключ

Около 15 минут. Блок закроется по таймеру.

Чтобы достать кабинет первой пары ИИ9-4, идут по цепочке: сначала ключ группы, потом индекс в списке, потом ключ поля. Ошибка на любом шаге — разная: неверный ключ словаря даёт KeyError, индекс за краем списка — IndexError.

ШагВыражениеЧто получаем
1schedule["ИИ9-4"]список пар группы
2…[0]словарь первой пары
3…["кабинет"]строка кабинета
сбойschedule["ИИ9-9"]KeyError
сбойschedule["ИИ9-4"][9]IndexError
Один путь — три шага ["ИИ9-4"] ключ dict → [0] индекс list → ["кабинет"] ключ dict → "101"
Рисунок 2. Слева направо: группа, номер пары, поле. Лист — строка кабинета.
print(schedule["ИИ9-4"][0]["кабинет"])
print(schedule["ИИ9-4"][1]["предмет"])
# schedule["ИИ9-9"]        → KeyError
# schedule["ИИ9-4"][9]     → IndexError
Образец мысли. Спрашивают «кабинет второй пары ИИ9-4» — индекс 1, не 2. «Группы нет» и «пары нет» — разные ошибки; в ответе назовите обе.

Блок 3. Обход, правка кабинета и тест

Около 15 минут. Сначала схема цикла и правки, потом свой код и шесть вопросов. Блок закроется по таймеру. Верные буквы на странице не показываются.

Список пар одной группы читают одним циклом. Все группы сразу — двумя: снаружи items(), внутри for lesson in pairs. Кабинет меняют по пути до листа. Если вместо этого записать в schedule["ИИ9-4"] новый список из одной пары, остальные пары группы пропадут.

внешний for for group, pairs in schedule.items(): один ключ — одна группа внутренний for for lesson in pairs: print(lesson["предмет"]…) каждая пара списка
Рисунок 3. Снаружи группы. Внутри — пары этой группы. Для одной группы достаточно внутреннего цикла.
ДействиеКодЧто будет
Безопасно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

задание
  1. Соберите словарь минимум с группами ИИ9-4 и ИС9-5.
  2. У ИИ9-4 три пары: математика/101, физика/102, история/103.
  3. Циклом по списку ИИ9-4 напечатайте кабинеты только этой группы.
  4. Смените кабинет физики на 205 по пути ключ → индекс → ключ. Математика должна остаться в 101.
  5. В ответе: кабинеты до правки, новый кабинет физики и кабинет соседа.

Шесть вопросов

1. Вложенная структура здесь — это
2. schedule["ИИ9-4"][0]["предмет"]
3. KeyError на пути доступа значит
4. IndexError на пути доступа значит
5. schedule["ИИ9-4"][1]["кабинет"] = "205"
6. Заменить schedule["ИИ9-4"] одним новым списком из одной пары

Отправить работу

Код кабинета не нужен. Напишите фамилию, имя и отчество и отправьте все три блока одним разом.