簡體   English   中英

使用遞歸分解金額

[英]Decompose an amount using recursion

鑒於陣列

bills = [500, 200, 100, 50, 20, 10, 5, 2, 1, 0.5, 0.2, 0.1, 0.05, 0.02, 0.01]

它被要求編寫一個函數decompose() ,它將分解數組中包含的賬單中的金額。


例如, decompose(423)將返回包含以下元素的列表

[200, 200, 20, 1, 1, 1]

這是我的代碼:

 bills = [500, 200, 100, 50, 20, 10, 5, 2, 1, 0.5, 0.2, 0.1, 0.05, 0.02, 0.01] def decompose(amount, lst = []): if len(bills) == 1: return lst if amount > bills[0]: lst += [bills[0]] amount = amount - bills[0] return decompose(bills, lst + [bills[0]]) return decompose(bills[1:], lst + [bills[0]]) print(decompose(523)) 

我的輸出是:

 Traceback (most recent call last): File "test.py", line 94, in <module> print(decompose(523)) File "test.py", line 91, in decompose return decompose(bills, lst + [bills[0]]) File "test.py", line 88, in decompose if amount > bills[0]: TypeError: '>' not supported between instances of 'list' and 'int' 

我如何分解我的金額?

您應該從最高賬單適合金額時遞減扣除賬單金額,或遞歸轉移到下一個賬單,同時保持相同的金額:

def decompose(amount, bills):
    if not bills:
        return []
    if amount >= bills[0]:
        return [bills[0]] + decompose(amount - bills[0], bills)
    else:
        return decompose(amount, bills[1:])

以便:

bills = [500, 200, 100, 50, 20, 10, 5, 2, 1, 0.5, 0.2, 0.1, 0.05, 0.02, 0.01]
decompose(423, bills)

收益:

[200, 200, 20, 2, 1]

您正在嘗試提供bills來代替當前amount - 因此您稍后會收到錯誤,因為您無法為listint執行amount >= bills[0]

您的代碼中還有其他幾個錯誤:

def decompose(amount, bills, lst = None):  # fix here - supply the possible bills as well
    lst = lst or []
    if amount == 0:                      # fix - when amount == 0 you are done
        return lst

    if amount >= bills[0]:      # fix - as long as bills[0] can be deducted, do so (>=)
        lst += [bills[0]]       # bill[0] is already addded no need to do below again
        amount = amount - bills[0]
        return decompose(amount, bills, lst ) # fix - supply same bills, 
    return decompose(amount, bills[1:], lst ) # fix - bill[0] too big, supply bills[1:]

bills = [500, 200, 100, 50, 20, 10, 5, 2, 1, 0.5, 0.2, 0.1, 0.05, 0.02, 0.01]
print(decompose(523, bills)) 

輸出:

[500, 20, 2, 1]

你可能想看一下調試: https//wiki.python.org/moin/PythonDebuggingTools踩過你的代碼有很大的幫助 - 經過一段時間你為這樣的小代碼開發內部調試器; o)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM