Практика: интерактивная сводка заказа¶
Задача¶
Создайте 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 с командой запуска, формулами, поддерживаемым десятичным разделителем и таблицей фактических результатов. Для каждого сценария сначала запишите ожидаемые числа, затем сравните с программой.
Критерии сдачи¶
- четыре обязательные функции реализованы и имеют понятные имена;
- расчёт отделён от терминального ввода;
- все строки таблицы дают ожидаемый результат;
- ошибочные данные обрабатываются понятным сообщением и повторным запросом;
- нет готовых итогов, вписанных вместо формул;
- автор объясняет каждую ветку и условие завершения каждого цикла.