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函数:带有硬币和纸币的零钱。输入:总价,付款金额的主要内容,如果未能解决你的问题,请参考以下文章

如何使用递归在最小零钱问题中输出实际的硬币组合

322.零钱兑换

零钱兑换

322. 零钱兑换

322-零钱兑换(完全背包)

322. 零钱兑换