Python函数:带有硬币和纸币的零钱。输入:总价,付款金额
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python函数:带有硬币和纸币的零钱。输入:总价,付款金额相关的知识,希望对你有一定的参考价值。
我需要一个用于计算回报金额的python函数。我的输入是总价和付款金额。在这种情况下,它还应与钞票一起使用,而不仅仅是硬币。我用全局元组定义了该功能,但是我不知道如何向该功能说要获得最少数量的硬币/纸币我需要什么硬币或纸币。我的找零钱是无限的。
COINS = (0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1.0, 2.0)
BANK_NOTES = (5.0, 10.0, 20.0, 50.0, 100.0, 200.0)
def get_return_money (payment_amount,total_price):
return_money = payment_amount - total_price
return return_money
到目前为止,我的职能是...输出应该是这样的字典:
'20': 1,
'5': 1,
'2': 2,
'0.5': 1
如何用适量的硬币/纸币解决此问题?
答案
在这种情况下,您需要自己构造字典,以下功能可以完成工作
COINS = (0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1.0, 2.0)
BANK_NOTES = (5.0, 10.0, 20.0, 50.0, 100.0, 200.0)
def get_return_money (payment_amount,total_price):
return_money = payment_amount - total_price
d =
for x in sorted(BANK_NOTES + COINS, reverse = True):
while return_money >= x:
if x in d:
d[x] += 1
else:
d[x] = 1
return_money -= x
return d
如果您只想使用一个满足退货金额但不一定要使用最少数量的硬币/纸币的值,这是一个贪婪的解决方案
另一答案
您也可以使用此功能:
from collections import defaultdict
def get_return_money(payment_amount, total_price):
return_money = payment_amount - total_price
change_types = reversed(COINS + BANK_NOTES)
change_counts = defaultdict(int)
for payment_type in change_types:
change_counts[payment_type], return_money = divmod(return_money, payment_type)
return change_counts
我们反向迭代COINS + BANK_NOTES
,因此返回的更改首先被最大值填充。
以上是关于Python函数:带有硬币和纸币的零钱。输入:总价,付款金额的主要内容,如果未能解决你的问题,请参考以下文章