我在做一个编码挑战,遇到了这个我以前从未遇到过的问题。这个问题要求以最有效的方式回报变化。用户输入价格和支付的金额作为数组(有点像给自动售货机钱)
由于某些原因,当剩余更改为0.01时,代码不会通过最后一个if块
def ChangeMaker(price, payment):
# Write your code here
totalPayment=0
for i in payment:
totalPayment+=i
change = totalPayment-price
coinChange=change-int(change)
def helper(remain, result):
holder= result
newRemain = remain
if remain>=.25:
holder[3]+=1
newRemain-=.25
return helper(newRemain, holder)
elif remain>=.10:
holder[2]+=1
newRemain -=.10
return helper(newRemain, holder)
elif remain>=.5:
holder[1]+=1
newRemain -=.05
return helper(newRemain, holder)
elif remain>.01 or remain==.01:
holder[0]+=1
newRemain -=.01
return helper(newRemain, holder)
else:
return holder;
return helper(coinChange, [0,0,0,0])
print(ChangeMaker(1.87, [5, .25,.25,.25,.25, 1]))
正如@gmds所说,这纯粹是一个浮点精度问题。这里有一个快速的计算货币(只有2位小数)的解决方案,它将每个数字计时100,然后将它们转换成整数
相关问题 更多 >
编程相关推荐