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

Практика: интерактивная сводка заказа

Задача

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

Требования

Программа запрашивает:

  • непустое название позиции;
  • цену за единицу — число не меньше нуля;
  • количество — целое число не меньше нуля;
  • скидку — число от 0 до 100 включительно.

Расчёт:

стоимость до скидки = цена × количество
размер скидки = стоимость до скидки × процент / 100
итог = стоимость до скидки − размер скидки

Результат содержит название, цену, количество, стоимость до скидки, скидку и итог. Денежные значения отображаются с двумя знаками после точки.

Обязательная структура кода

Используйте как минимум такие функции:

def read_nonempty_text(prompt):
    ...


def read_nonnegative_float(prompt):
    ...


def read_nonnegative_int(prompt):
    ...


def calculate_order(unit_price, quantity, discount_percent):
    ...

Многоточие обозначает место вашей реализации и не является готовой программой. Функция calculate_order не должна вызывать input или print.

Контрольные сценарии

Название Цена Количество Скидка До скидки Размер скидки Итог
Кабель 100.00 2 10 200.00 20.00 180.00
Пустой заказ 450.00 0 15 0.00 0.00 0.00
Датчик 99.90 3 0 299.70 0.00 299.70
Подарок 750.00 1 100 750.00 750.00 0.00

Ошибочные проверки:

  • пустое или состоящее из пробелов название запрашивается повторно;
  • abc вместо цены не завершает программу трассировкой;
  • отрицательные цена и количество отклоняются;
  • скидки -1 и 101 отклоняются.

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

Рядом создайте README с командой запуска, формулами, поддерживаемым десятичным разделителем и таблицей фактических результатов. Для каждого сценария сначала запишите ожидаемые числа, затем сравните с программой.

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

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

← Урок о функциях · Экзамен →