Ваша программа застряла в while
l oop из-за ошибок с плавающей запятой. Попробуйте добавить следующий код прямо внутри while
l oop, и вы увидите, что, хотя owed
становится бесконечно малым, оно никогда не становится равным нулю:
...
while owed > 0:
print(owed)
...
Вывод:
...
8.326672684688674e-17
8.326672684688674e-17
8.326672684688674e-17
8.326672684688674e-17
...
Попробуйте умножить входные данные на 100
, а затем использовать их как целые числа:
owed = int(float(input("How much change is owed? $")) * 100)
quarters = int(owed / 25)
dimes = int((owed - quarters * 25) / 10)
nickels = int((owed - quarters * 25 - dimes * 10) / 5)
cents = int((owed - quarters * 25 - dimes * 10 - nickels * 5))
coins = (quarters + dimes + nickels + cents)
print('Quarters (${}): {}'.format(quarters*0.25, quarters))
print('Dimes (${}): {}'.format(dimes*0.1, dimes))
print('Nickels (${}): {}'.format(nickels*0.05, nickels))
print('Cents (${}): {}'.format(cents, cents))
print('Coins:', coins)
Или, если вы хотите придерживаться жадного алгоритма:
owed = int(float(input("How much change is owed? $")) * 100)
while owed > 0:
if (owed - 25) >= 0:
coins += 1
owed -= 25
elif (owed - 10) >= 0:
coins += 1
owed -= 10
elif (owed - 5) >= 0:
coins += 1
owed -= 5
elif (owed - 1) >= 0:
coins += 1
owed -= 1
coins = (quarters + dimes + nickels + cents)
print('Quarters (${}): {}'.format(quarters*0.25, quarters))
print('Dimes (${}): {}'.format(dimes*0.1, dimes))
print('Nickels (${}): {}'.format(nickels*0.05, nickels))
print('Cents (${}): {}'.format(cents, cents))
print('Coins:', coins)
Вывод
>>> How much change is owed? $1.42
Quarters ($1.25): 5
Dimes ($0.1): 1
Nickels ($0.05): 1
Cents ($2): 2
Coins: 9
Для получения дополнительной информации об ограничениях с плавающей запятой проверьте следующее: https://docs.python.org/3.8/tutorial/floatingpoint.html