Задача по внесению изменений python, как создать границы? - PullRequest
0 голосов
/ 31 марта 2020

У меня проблема с алгоритмом внесения изменений. Мой код выглядит так:

def algorithm():
denominations = [5, 2, 0.5, 0.2, 0.1, 0.05, 0.02, 0.01]
numbers_of_denominations = [2, 1, 10, 10, 20, 10, 20, 50]
change = 9.39
i = 0
while(change > 0):
    if(change >= denominations[i]):
        number_of_coins = int((change / denominations[i]))
        change = round(change - denominations[i] * number_of_coins, 2)

        print(denominations[i], "x", number_of_coins)
    i += 1

И он действительно дает мне правильный ответ, но проблема в том, что, если у меня ограниченное количество монет? Я не знаю, как реализовать границы для монет. например, если бы я имел:

  • 5 $ х 2
  • 2 $ х 1
  • 0,5 $ х 10
  • 0,2 $ х 10
  • 0,1 $ x 20
  • 0,05 $ x 10
  • 0,02 $ x 20
  • 0,01 $ x 50

Как я могу проверить, доступно ли количество монет? Токовый выход:

5$ x 1
2$ x 2
0.2$ x 1
0.1$ x 1
0.05$ x 1
0.02$ x 2

Что неверно, потому что у меня есть только 1 монета 2 $. Я застрял.

1 Ответ

1 голос
/ 31 марта 2020

Просто убедитесь, что вы не используете больше, чем у вас есть:

number_of_coins = min(numbers_of_denominations[i], int((change / denominations[i])))

Это даст вам min(1, 2) за 2 доллара, что позволит вам использовать только один , что у вас есть:

5 x 1
2 x 1
0.5 x 4
0.2 x 1
0.1 x 1
0.05 x 1
0.02 x 2

Просто следите, если у вас недостаточно монет для полной суммы, это, вероятно, приведет к ошибке выхода за границы без дальнейших изменений:

denominations = [5, 2, 0.5, 0.2, 0.1, 0.05, 0.02, 0.01]
numbers_of_denominations = [2, 1, 10, 10, 20, 10, 20, 50]
change = 100
i = 0
while(change > 0):
    # Check if we've run out of money.

    if i >= len(denominations):
        print("No change left, need", change)
        break;

    if(change >= denominations[i]):
        number_of_coins = min(numbers_of_denominations[i], int((change / denominations[i])))
        change = round(change - denominations[i] * number_of_coins, 2)

        print(denominations[i], "x", number_of_coins)
    i += 1

Это показывает:

5 x 2
2 x 1
0.5 x 10
0.2 x 10
0.1 x 20
0.05 x 10
0.02 x 20
0.01 x 50
No change left, need 77.6
...