Python while loop: возврат задания на изменение - PullRequest
0 голосов
/ 06 февраля 2020

Я очень плохо знаком с Python и пытаюсь решить задачу. Задача такова: «Производители торговых автоматов хотели, чтобы их автоматы возвращали как можно меньше монет. Напишите программу, которая принимает сумму, которую необходимо вернуть, и рассчитайте, сколько монет она может получить». Монеты: 2,00, 1,00, 0,50, 0,20, 0,10, 0,05, 0,02, 0,03.

Это мой код:

change = float(input())
result = 0

while change > 0:
    while change >= 2:
        change -= 2
        result += 1
    while change >= 1:
        change -= 1
        result += 1
    while change >= 0.5:
        change -= 0.5
        result += 1
    while change >= 0.2:
        change -= 0.2
        result += 1
    while change >= 0.1:
        change -= 0.1
        result += 1
    while change >= 0.05:
        change -= 0.05
        result += 1
    while change >= 0.02:
        change -= 0.02
        result += 1
    while change >= 0.01:
        change -= 0.01
        result += 1
print(result)

Мой ввод равен 2,20, а результат печати равен 0, когда должно быть 2. Похоже, это не l oop вообще. Может кто-нибудь объяснить мне, почему это не так, я не знаю, что я делаю неправильно.

Ответы [ 2 ]

1 голос
/ 06 февраля 2020

Этот сработал для меня

change = float(input())
result = 0


while change >= 2:
    change -= 2
    result += 1
while change >= 1:
    change -= 1
    result += 1
while change >= 0.5:
    change -= 0.5
    result += 1
while change >= 0.2:
    change -= 0.2
    result += 1
while change >= 0.1:
    change -= 0.1
    result += 1
while change >= 0.05:
    change -= 0.05
    result += 1
while change >= 0.02:
    change -= 0.02
    result += 1
while change >= 0.01:
    change -= 0.01
    result += 1
print(result)

твой первый, в то время как l oop на самом деле не нужен, потому что он завершит его только один раз и запутает компьютер. к сожалению, я не знаю, почему он не работает с дополнительным, пока l oop, но это должно работать (по крайней мере, для меня), как это.

1 голос
/ 06 февраля 2020

Проблема с арифметикой с плавающей точкой c. Когда вы думаете, что должно быть 0, он никогда не попадет туда. Так что ваш l oop никогда не существует, потому что изменение никогда не> 0, оно просто становится очень маленьким. Вам следует установить пороговое значение (на внешнем уровне, в то время как l oop), равное примерно 0,01.

...