给定数组
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
-因此,您会得到错误,因为您无法为list
和int
进行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逐步浏览您的代码非常有帮助 - 一段时间后,您为这样的小型代码件开发了内部调试器;p>