我想按照这个比额表收取一笔费用:
AMOUNT FEE
------- ---
0 24.04 €
6010.12 0.00450
30050.61 0.00150
60101.21 0.00100
150253.03 0.00050
601012.11 0.00030从6010.13欧元到6010.13欧元是一个24.04欧元的固定费用
我的代码:
def fee(amount):
scale = [[0, 24.04],
[6010.12, 0.00450],
[30050.61, 0.00150],
[60101.21, 0.00100],
[150253.03, 0.00050],
[601012.11, 0.00030]]
if amount <= scale[1][0]:
fee = scale[0][1]
else:
for i in range(0, 5):
if amount >= scale[i][0] and amount < scale[i+1][0]:
fee = amount * scale[i][1]
break
return fee
print(fee(601012.12))此代码在0欧元到601012.11欧元之间运行良好,但对于601012.12欧元或更高的代码则失败。
返回费UnboundLocalError:外派前引用的局部变量“费用”
我想问题就在这里:amount < scale[i+1][0]当i=4没有分配fee变量时。
有没有更多的方法来选择音阶的范围限制?
发布于 2016-06-02 17:29:30
我认为更好的方法是使用while循环来检查amount是否比scale[i+1][0]小,这样您就可以只使用scale[i][1]。并给出一个else来处理任何比scale[len(scale)][0]更大的东西。
发布于 2016-06-02 17:30:59
首先,您应该尽量避免将不同的事物命名相同。这使得我们更难看清问题的所在。
所发生的情况是:如果金额低于刻度表中的第二个条目,则返回第一个条目。如果没有,请查看表,并检查金额是否大于当前值,是否小于下一个阈值。直到最后一次,您的range(0, 5)将产生0, 1, 2, 3, 4,而不是到达最后一次并中断。在这种情况下,当尝试返回fee时,不会定义任何UnboundLocalError,从而引发UnboundLocalError。我也会通过检查上界来修正:
def fee(amount):
scale = [[0, 24.04],
[6010.12, 0.00450],
[30050.61, 0.00150],
[60101.21, 0.00100],
[150253.03, 0.00050],
[601012.11, 0.00030]]
if amount <= scale[1][0]:
return scale[0][1]
elif amount >= scale[-1][0]:
return scale[-1][1]
else:
for i in range(0, 5):
if amount >= scale[i][0] and amount < scale[i + 1][0]:
return amount * scale[i][1]https://stackoverflow.com/questions/37598337
复制相似问题