我试图在现金上进行value
循环,但是我所有的尝试都失败了,这肯定需要递归,但是我似乎无法正确地应用它。
r = {"pound":1.00,"cent":0.01,"quarter":.25,"five":5.00}
m = []
for a in r:
m.append(r[a])
m = sorted(m, reverse=True)
def exchange(cash):
c = []
for value in m:
if value > cash:
break
if value <= cash:
c.append(value)
cash = cash - value
return cash
主要问题是,它通常只经过四个value
,就这样,我正在尝试使其在更高的value
s上重复一次,直到value>cash
我的第一个想法是将其放在最后一个条件下
if value <= cash:
c.append(value)
cash = exchange(cash -value)
但是没有按计划工作
现金:print exchange(20.0)
,print exchange(3.0)
主要目的是计算我正在尝试使用c
最终结果应该是0
,但我现在None
答案 0 :(得分:1)
这里是一个如何使用递归实现的示例,方法是仅将当前cash
的余数除以最接近的value
到下一个递归:
r = {"pound":1.00,"cent":0.01,"quarter":.25,"five":5.00}
m = sorted(r.items(), key=lambda t: -t[1])
def exchange(cash):
for name, value in m:
if value <= cash:
return dict([(name, int(cash / value))] + exchange(cash % value).items())
else:
return {}
print exchange(21.8)
这将输出:
{'pound': 1, 'quarter': 3, 'five': 4, 'cent': 5}