Shanraq.org Shanraq.org
Списки и словари для многих задач
Общество

Информатика: создаём своего цифрового помощника Урок 32 из 38

Списки и словари для многих задач

Соберём несколько задач в список, научимся обращаться к полям словаря и остановим повторный `id` до неверного результата.

Где мы на карте

Это урок 32 из 72 и часть блока Python (уроки 27–38). Опорная схема показывает проверяемые переходы. Продолжаем бумажный договор версии 0.3: пять исходов напоминания и исходные вымышленные задачи.

Списки и словари для многих задач

Ситуация и вопрос

На бумаге задачи были отдельными карточками. В файле каждая станет набором полей: id, title, done, позже due_date. Как найти нужную, если названия совпадают? И почему одинаковый id для двух разных карточек опасен? Выберем структуры данных по тому, какую задачу они решают.

Новые слова без пропусков

Список [] хранит задачи по порядку и позволяет пройти их все. Словарь {} связывает ключ с значением: task["id"] читает поле одной задачи. Ключ здесь — имя поля; не путайте его с уникальным идентификатором самой задачи. Индекс — номер позиции списка, начиная с нуля. Множество set() хранит уникальные значения и помогает заметить повторный id. Словарь по идентификатору by_id делает поиск по id удобным, но строить его до проверки дублей нельзя: поздняя запись незаметно затрёт раннюю.

Опорный сигнал

Вход → проверка правила → изменение состояния → наблюдаемый результат. Покажите пальцем, на каком шаге программа читает данные, где сравнивает их с договором и где только сообщает результат. Если шага не видно на схеме, найдите его в коде и добавьте в собственную трассу.

Разбираем шаг за шагом

Разложите две карточки: у первой id=t-01, done=False, у второй id=t-02, done=True. Список сохраняет их порядок; словарь by_id связывает каждое значение id с карточкой. Код ниже выводит True для t-02. Теперь добавьте третью карточку с тем же id=t-02: простое построение словаря скроет одну из них. Поэтому перед словарём пройдите список с множеством seen и остановитесь на повторе.

Предскажите и проверьте

Закройте блок с выводом. По строкам проследите значения имён и напишите точный ожидаемый текст, включая регистр и порядок строк. Только затем выполните код из каталога step-03 командой python3 и сравните посимвольно. Поменяйте один вход; до запуска запишите новый прогноз. Если результат отличается, найдите первую строку расхождения, а не подгоняйте ответ задним числом.

tasks = [{"id": "t-01", "done": False}, {"id": "t-02", "done": True}]
for task in tasks:
    print(task["id"], task["done"])

Ожидаемый вывод

t-01 False
t-02 True

Поймайте ошибку

Два задания могут иметь название «Кітап оқу» и разные id; это не дубль. А две записи с одним id и разными названиями — дубль. Проверка по заголовку даёт ошибки в обе стороны. Ещё одна ловушка: tasks[1] означает второй элемент, но не задачу с id=1.

Изменение проекта

Перенесите три исходные задачи в список словарей, не меняя их значения. Добавьте проверку уникальности до подсчёта и напоминаний: неверный вход не должен давать на вид убедительный результат.

Задание и доказательство

Сделайте список из трёх исходных задач и функцию проверки id через seen. Протестируйте пустой список, исходные три записи, t-01,t-02,t-01 и две записи с одинаковым заголовком, но разными id. Нарисуйте содержимое множества после каждого шага. Только после успешной проверки стройте by_id.

Перенос в новую ситуацию

В библиотеке две книги могут называться одинаково, но иметь разные инвентарные номера. Какую структуру возьмёте для порядка выдачи, а какую — для быстрого поиска по номеру? Где проверите повторный номер?

Возврат через 1, 7 и 30 дней

Через 1 день восстановите правило и один граничный пример без страницы. Через 7 дней объясните ошибку в новом примере однокласснику. Через 30 дней повторите тест проекта, проверьте, что прежние записи и вывод сохранились, и снова перенесите правило на другую задачу.

Следующий урок

Далее: Текст, даты и казахский Unicode

Если вы нашли ошибку или опечатку в тексте статьи, то сообщите нам об этом

Проверить доказательство проекта

Запишите наблюдение, объяснение, исправление ошибки и изменение своего проекта. Модель укажет первую перепутанную или недоказанную связь, но не даст готовый ответ.

Чтобы проверить, нужно войти. Войти

Комментарии (0)

Пока нет комментариев. Будьте первым.