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

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

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

6 ответов

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

Если вы найдете кого-то старше 50 лет и попросите его внести изменения для вас, это работает следующим образом. Скажем, у вас есть чек на 3,52 доллара, и вы передаете кассиру немного денег. Они внесут изменения, сказав "три пятьдесят два" тогда

  • сосчитать три копейки, сказав "три, четыре, пять" (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

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

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

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" )

У меня есть улучшенное решение из приведенных выше решений

      coins=[]
cost = float(input('Input the cost: '))
give = float(input('Tipe Amount given: '))

change = (give - cost)
change2 = change-int(change)
change2 = round(change2,2)*100
coin = [50,25,10,5,1]
for c in coin:
    while change2>=c:
        coins.append(c)
        change2 = change2-c
    
half=coins.count(50)
qua = coins.count(25)
dime=coins.count(10)
ni=coins.count(5)
pen=coins.count(1)
dolars = int(change)
if half !=0 or qua != 0 or dime!=0 or ni!=0 or pen!=0:
    print ('The change of', round(give,2), 'is:',change, 'like \n-dolas:',dolars,'\n-halfs:',half,'\n-quarters:',qua,'\n-dime:',dime,'\n-nickels:',ni,'\n-pennies:',pen)
else:
     print ('The change from', round(give,2), 'is:',change,'and no coins')
Другие вопросы по тегам