Функция Python: найти изменение из суммы покупки

Я ищу наиболее эффективный способ определить сумму изменения (кварталы, копейки, никели и пенни) от суммы покупки. Сумма покупки должна быть меньше 1 доллара США, а изменение – от одного доллара. Мне нужно знать, сколько кварталов, копейки, никелей и копейки кто-то вернется.

Было бы лучше настроить словарь?

  • Как 2 словаря Python становятся 1?
  • return key по значению в словаре
  • Словарь испортил имя ключа
  • dict.keys () на Python 3
  • Итерация над словарем python для извлечения только требуемых строк
  • Словарь травления Python EOFError
  • 5 Solutions collect form web for “Функция Python: найти изменение из суммы покупки”

    Вы говорите, это не проблема 2b в каждом курсе программирования? Эх, вероятно, нет, они, похоже, не учат людей, как делать изменения. (Или, может быть, они делают: это домашнее задание?)

    Если вы найдете кого-то более 50 лет и попросите их внести изменения для вас, он работает так. Скажем, у вас есть чек за $ 3,52, и вы передаете кассиру twnty. Они сделают изменения, сказав «три пятьдесят два», затем

    • пересчитайте три пенни, говоря «три, четыре, пять» (3.55)
    • обратный отсчет 2 никеля, (3,60, 3,65)
    • счетчик копейки (3,75)
    • квартал (4 доллара)
    • долларовый счет (пять долларов)
    • счет за 5 долларов (десять долларов)
    • 10 долларов США (двадцать).

    Это в центре рекурсивный процесс: вы считаете текущее деноминацию до тех пор, пока не появится текущая сумма плюс следующее достоинство. Затем переходите к следующему наименованию.

    Вы можете, конечно, сделать это итеративно, как указано выше.

    Это, вероятно, довольно быстро – всего несколько операций за деноминацию:

    def change(amount): money = () for coin in [25,10,5,1] num = amount/coin money += (coin,) * num amount -= coin * num return money 

    Лучше всего, вероятно, иметь отсортированный словарь размеров монет, а затем прокручивать их, проверяя, превышает ли ваше изменение значение, добавьте эту монету и вычтите значение, в противном случае переходите к следующей строке словаря.

    Например

     Coins = [50, 25, 10, 5, 2, 1] ChangeDue = 87 CoinsReturned = [] For I in coins: While I >= ChangeDue: CoinsReturned.add(I) ChangeDue = ChangeDue - I 

    Простите мой паршивый синтаксис питона. Надеюсь, этого достаточно.

    Эта проблема может быть решена довольно легко с целыми разделами из теории чисел. Я написал рекурсивную функцию, которая принимает число и список разделов и возвращает количество возможных комбинаций, которые будут составлять заданный номер.

    http://sandboxrichard.blogspot.com/2009/03/integer-partitions-and-wiki-smarts.html

    Это не совсем то, что вы хотите, но его можно легко изменить, чтобы получить результат.

    Вышеуказанное решение работает.

     amount=int(input("Please enter amount in pence")) coins = [50, 25, 10, 5, 2, 1] coinsReturned = [] for i in coins: while amount >=i: coinsReturned.append(i) amount = amount - i print(coinsReturned) 

    В качестве альтернативы решение может быть достигнуто с помощью функций пола и мод.

     amount = int(input( "Please enter amount in pence" )) # math floor of 50 fifty = amount // 50 # mod of 50 and floor of 20 twenty = amount % 50 // 20 # mod of 50 and 20 and floor of 10 ten = amount % 50 % 20 // 10 # mod of 50 , 20 and 10 and floor of 5 five = amount % 50 % 20 % 10 // 5 # mod of 50 , 20 , 10 and 5 and floor of 2 two = amount % 50 % 20 % 10 % 5 // 2 # mod of 50 , 20 , 10 , 5 and 2 and floor of 1 one = amount % 50 % 20 % 10 % 5 % 2 //1 print("50p>>> " , fifty , " 20p>>> " , twenty , " 10p>>> " , ten , " 5p>>> " , five , " 2p>>> " , two , " 1p>>> " , one ) 

    Или другое решение

     amount=int(input("Please enter the change to be given")) endAmount=amount coins=[50,25,10,5,2,1] listOfCoins=["fifty" ,"twenty five", "ten", "five", "two" , "one"] change = [] for coin in coins: holdingAmount=amount amount=amount//coin change.append(amount) amount=holdingAmount%coin print("The minimum coinage to return from " ,endAmount, "p is as follows") for i in range(len(coins)): print("There's " , change[i] ,"....", listOfCoins[i] , "pence pieces in your change" ) 
    Python - лучший язык программирования в мире.