Коллекции

Выбор коллекции под задачу

Содержание курса

Сборка программы-классификатора

Пришло время собрать всё в одну программу. Принципы выбора мы уже разобрали — теперь задача другая: показать, как четыре структуры работают вместе, получая данные из одного источника.

Возьмём новый сквозной пример — данные о заказе в интернет-магазине. Один заказ содержит сразу все четыре типа данных:

  • список товаров, который может меняться (добавить, убрать позицию);
  • фиксированный номер и дату заказа, которые не должны меняться;
  • информацию о покупателе с доступом по имени поля;
  • набор применённых промокодов — каждый должен учитываться ровно один раз.
# Входные данные одного заказа
raw_items = ["ноутбук", "мышь", "кабель", "мышь"]      # товары (с повтором)
raw_meta = ("ORD-20481", "2024-11-15")                  # номер и дата
raw_customer = [("name", "Алиса"), ("city", "Минск"), ("email", "alice@example.com")]
raw_promo_codes = ["SALE10", "WELCOME", "SALE10"]        # промокоды (с повтором)

# Классификатор: каждый вид данных → своя структура
cart = list(raw_items)                  # список: порядок важен, можно менять
order_meta = tuple(raw_meta)            # кортеж: фиксированные данные
customer = dict(raw_customer)           # словарь: доступ по имени поля
used_promos = set(raw_promo_codes)      # множество: каждый промокод — один раз

# Работаем с результатом
cart.append("чехол")                    # добавили товар в корзину

print("Корзина:", cart)
print("Заказ №", order_meta[0], "от", order_meta[1])
print("Покупатель:", customer["name"], ",", customer["city"])
print("Промокоды:", used_promos)
print("Количество уникальных промокодов:", len(used_promos))

Обратите внимание на то, что происходит с повторами: "мышь" встречается в raw_items дважды и остаётся в корзине дважды — потому что в заказе это реально два экземпляра товара. "SALE10" встречается дважды, но в used_promos попадает один раз — потому что промокод либо применён, либо нет. Одни и те же исходные данные с повторами ведут себя по-разному в зависимости от выбранной структуры.

После классификации можно добавить проверки:

print("Есть ноутбук в корзине:", "ноутбук" in cart)
print("Промокод WELCOME использован:", "WELCOME" in used_promos)
print("Есть поле email:", "email" in customer)

Заметьте: in для словаря проверяет ключи — "email" in customer не ищет значение, а проверяет, есть ли такое поле.

Эта программа — не просто сумма четырёх отдельных примеров из предыдущих секций. Ключевое здесь — одновременная работа структур: данные приходят вместе, классифицируются по сценарию и дальше обрабатываются каждая своими методами. Именно так выглядит реальный код: не «где-то список, где-то словарь», а осознанное распределение данных по структурам с первого шага.

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

Начать заново?

Помощник начнёт новый диалог по этой задаче. Текущая переписка останется в истории до конца срока хранения.

О переписке

Можно приложить до трёх фото PNG, JPEG или WebP по 5 МБ.

Переписка и фото хранятся 90 дней после последнего принятого сообщения. Преподаватель получит доступ к диалогу, когда вы попросите его помочь.

Проверка решения остаётся отдельным действием.