Перейти к содержанию

Практика: каталог оборудования в памяти

Задача

Создайте catalog.py — консольную программу для небольшого каталога оборудования. Пользователь добавляет позиции, просматривает список, ищет по артикулу или названию и получает сводку. После завершения программы данные исчезают; сохранение в файл не входит в этот модуль.

Модель позиции

Каждая запись — словарь с одинаковыми обязательными ключами:

position = {
    "article": "LO100",
    "name": "Лоток перфорированный",
    "quantity": 2,
    "unit_price": 125.50,
}

Каталог является списком таких словарей.

Меню

1 — добавить позицию
2 — показать каталог
3 — найти по артикулу
4 — найти по названию
5 — показать сводку
0 — выйти

После выполнения команды меню появляется снова. Неизвестный пункт показывает сообщение и не завершает программу.

Правила данных

  • артикул очищается от крайних и внутренних пробелов и переводится в верхний регистр;
  • после нормализации артикул не может быть пустым;
  • второй экземпляр того же нормализованного артикула отклоняется;
  • название после strip() не может быть пустым;
  • количество — целое число не меньше нуля;
  • цена — число не меньше нуля;
  • поиск по названию не зависит от регистра и ищет подстроку;
  • пустой поисковый запрос отклоняется.

Обязательные функции

Названия можно расширить, но ответственность должна быть сохранена:

def normalize_article(value):
    ...


def missing_fields(position):
    ...


def find_by_article(catalog, article):
    ...


def search_by_name(catalog, query):
    ...


def add_position(catalog, position):
    ...


def catalog_summary(catalog):
    ...


def print_catalog(catalog):
    ...

Функции проверки, поиска и расчёта не должны вызывать input. missing_fields возвращает список отсутствующих обязательных ключей. Функция catalog_summary возвращает число строк, сумму единиц и общую стоимость.

Контрольный каталог

Ввод артикула Название Количество Цена Нормализованный артикул Стоимость
lo 100 Лоток перфорированный 2 125.50 LO100 251.00
cb200 Кабель силовой 20 180.00 CB200 3600.00
BX-10 Коробка монтажная 0 95.00 BX-10 0.00

Ожидаемая сводка:

Строк каталога: 3
Единиц оборудования: 22
Общая стоимость: 3851.00 руб.

Обязательные проверки

  1. Повторное добавление LO100, lo100 и lo 100 распознаётся как дубль.
  2. Поиск артикула cb 200 находит CB200.
  3. Запрос ЛОТОК находит позицию независимо от регистра.
  4. Запрос сил находит Кабель силовой.
  5. Пустой запрос не возвращает весь каталог.
  6. Отрицательное количество и буквенная цена запрашиваются повторно.
  7. Каталог выводится по названию, не изменяя порядок хранения.
  8. Сводка совпадает с контрольными значениями.
  9. Словарь без unit_price отклоняется, а каталог не меняется.
  10. Изменение исходного словаря после добавления не меняет сохранённую запись.

Критерии сдачи

  • данные представлены списком словарей, а не параллельными списками;
  • обязательные функции имеют одну понятную ответственность;
  • неполная структура словаря обнаруживается до расчёта;
  • артикулы сравниваются после нормализации;
  • поиск и сводка не зависят от терминального ввода;
  • контрольные и ошибочные сценарии подтверждены журналом;
  • автор объясняет, какие функции изменяют каталог, а какие возвращают новый результат.

← Урок о каталоге · Экзамен →