Python初学者:文员,账单数量最少

时间:2017-11-03 01:23:59

标签: python

我需要帮助解决计算机科学的以下问题

职员在商店工作,每个商品的成本是正整数美元。所以,例如, 一些东西可能花费21美元,但没有任何东西花费9.99美元。 为了进行更改,职员的数量无限 以下各种面额的账单:1美元,2美元,5美元,10美元和20美元。

编写一个需要两个的过程 参数,项目的成本和支付的金额,并打印如何使用最小的更改 可能的账单数量。

1 个答案:

答案 0 :(得分:0)

由于我也是初学者,我将把它作为python的练习。请参阅以下代码:

def pay_change(paid, cost):
    # set up the change and an empty dictionary for result
    change = paid - cost
    result = {}

    # get the result dictionary values for each bill
    n_twenty = change // 20
    result['$20'] = n_twenty
    rest = change % 20

    n_ten = rest // 10
    result['$10'] = n_ten
    rest = rest % 10

    n_five = rest // 5
    result['$5'] = n_five
    rest = rest % 5

    n_two = rest // 2
    result['$2'] = n_two
    rest = rest % 2

    n_one = rest // 1
    result['$1'] = n_one

    # print(result) if you want to check the result dictionary

    # present the result, do not show if value is 0
    for k, v in result.items():
        if v != 0:
            print('Need', v, 'bills of', k)

逻辑是假设更改超过20,并使用//慢慢计算,并使用%计算其余部分。无论如何,我们最终得到一本字典,它给出了每张钞票需要多少钞票。

然后,对于那些价值为0的美元钞票,我们不需要显示它们,所以我写了一个for循环来检查这本字典中的值。

好的,现在我已经简化为代码以避免重复代码段,我很满意:

def pay_change(paid, price):
    # set up the change and an empty dictionary for result
    global change
    change = paid - price
    bills = ['$20', '$10', '$5', '$2', '$1']

    # create a function to calculate the change for each bills
    def f(x):
        global change
        result = divmod(change, x)[0]
        change = divmod(change, x)[1]
        return result
    temp = list(map(f, (20, 10, 5, 2, 1)))

    # generate the final result as a dictionary
    result = dict(zip(bills, temp))

    # present the result, do not show if value is 0
    for k, v in result.items():
        if v != 0:
            print('Need', v, 'bills of', k)