Python函数:从购买金额中查找更改

Python函数:从购买金额中查找更改,python,dictionary,coin-change,Python,Dictionary,Coin Change,我正在寻找一种最有效的方法,从购买金额中计算出零钱(25美分、10美分、5美分和1美分)。购买金额必须少于1美元,并且零钱从1美元起。我需要知道有人会取回多少个25美分、10美分、5美分和1美分 最好设置一个字典吗?您最好的选择是可能有一个硬币大小的分类字典,然后循环检查您的更改是否大于值,添加硬币并减去值,否则移动到字典中的下一行 乙二醇 请原谅我糟糕的python语法。希望这足够继续下去 哎呀,你的意思是这不再是每门编程课程的2b题了?呃,也许不是,他们似乎也不再教人们如何改变。(或者他们会

我正在寻找一种最有效的方法,从购买金额中计算出零钱(25美分、10美分、5美分和1美分)。购买金额必须少于1美元,并且零钱从1美元起。我需要知道有人会取回多少个25美分、10美分、5美分和1美分


最好设置一个字典吗?

您最好的选择是可能有一个硬币大小的分类字典,然后循环检查您的更改是否大于值,添加硬币并减去值,否则移动到字典中的下一行

乙二醇


请原谅我糟糕的python语法。希望这足够继续下去

哎呀,你的意思是这不再是每门编程课程的2b题了?呃,也许不是,他们似乎也不再教人们如何改变。(或者他们会:这是家庭作业吗?)

如果你找到一个50岁以上的人,让他们给你换衣服,事情就是这样的。假设你有一张3.52美元的支票,你递给收银员一张twnty。然后他们会说“三五二”来改变

  • 倒数三便士,说“三,四,五”(3.55)
  • 倒数2个镍币,(3.60,3.65)
  • 倒数一角硬币(3.75)
  • 四分之一(4美元)
  • 一美元(五美元)
  • 一张五美元的钞票(十美元)
  • 一张十美元的钞票(二十美元)
这在本质上是一个递归过程:你倒数当前面额,直到当前金额加上下一个面额的结果为偶数。然后向上移动到下一个面额


当然,您可以如上所述,以迭代的方式进行操作。

这可能相当快-每个面额只需进行一些操作:

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

    return money

这个问题可以很容易地用数论中的整数分割来解决。我编写了一个递归函数,它接受一个数字和一个分区列表,并返回组成给定数字的可能组合数


这并不完全是你想要的,但它可以很容易地修改以获得你的结果。

上述解决方案有效

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)
或者,可以通过使用floor和mod功能来实现解决方案

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

应该是,而我>=changedue应该是。谢谢你的三联画。这里也没有。添加到列表中。是的,这是一个家庭作业问题,但我想找到的是最有效的方法。似乎每个人都在投票支持递归方法,据我所知,递归方法比循环方法更需要进程?你正在使用多少面值的硬币?我知道这是最低限度的,但为什么不学着删减一些小程序,把它们传给更长的程序呢。更好的风格。很确定这不是OP想要的:链接是404。
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')