После вывода монет номиналом 1 цент из обращения магазинам пришлось менять цены на товары, чтобы они были кратны 5 центам.
Программа должна запрашивать ввод цены, пока пользователь не введет пустую строку. После этого в первой строке вывести общую сумму покупок, на второй — округленное значение до пяти ближайших центов. Для вычисления можно предварительно перевести полученную сумму в центы и получить остаток от деления на 5. Если остаток меньше 2,5 округление осуществлять в меньшую сторону, если больше – в большую.
PENNIES_PER_NICKEL = 5
NICKEL = 0.05
# переменная для хранения сумы
total = 0.00
# Запрашиваем цену первого товара как строку
line = input("Введите цену товара (пустая строка для выхода): ")
# Продолжаем запрашивать цены, пока не будет введена пустая строка
while line != "":
# Добавляем цену в общей сумме (после перевода ее в число с плавающей запятой)
total = total + float(line)
# Запрашиваем цену следующего товара
line = input("Введите цену товара (пустая строка для выхода): ")
# Показываем полную сумму к оплате
print("Полная сумма к оплате: %.02f" % total)
# Считаем, сколько центов осталось бы, если бы мы оплатили всю покупку 5–центовыми
# монетами
rounding_indicator = total * 100 % PENNIES_PER_NICKEL
if rounding_indicator < PENNIES_PER_NICKEL / 2:
# Если оставшаяся сумма центов меньше 2,5, округляем значение путем вычитания
# полученного количества центов из общей суммы
cash_total = total - rounding_indicator / 100
else:
# Иначе добавляем 5 центов и затем вычитаем нужное количество центов
cash_total = total + NICKEL - rounding_indicator / 100
# Выводим итоговую сумму для оплаты
print("Сумма для оплаты наличными: %.02f" % cash_total)