在Python中选择比例的范围限制
我想根据此比例对金额收取费用:在Python中选择比例的范围限制,python,list,Python,List,我想根据此比例对金额收取费用: 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 从0欧元到6010.13欧元是24.04欧元的固定费用 我的代码: def fee(amount): scale = [[0, 24.04],
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
从0欧元到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))
我假设问题在这里:amount
当I=4时,fee
变量未赋值
有没有比python更适合选择刻度范围限制的方法?你不会处理这种情况。您应该在循环之外添加另一个
if
语句(类似于if amount您没有处理这一情况。您应该在循环之外添加另一个if
语句(与if amount类似,我认为更好的方法是使用while循环检查amount
是否小于scale[I+1][0]
,这样您就可以只使用scale[I][1]
。还可以使用else来处理大于scale[len(scale)][0]的任何内容
我认为更好的方法是使用while循环检查数量是否小于比例[I+1][0]
,这样您就可以只使用比例[I][1]
。还可以使用else来处理大于比例[len(比例)][0]的任何事情
首先,你应该尽量避免将不同的东西命名为同一个名称。这会让你更难发现问题所在
发生的情况是:如果金额低于比例表中的第二个条目,则返回第一个条目。如果没有,则查看表格并检查金额是否大于当前值且小于下一个阈值。这一直持续到最后一个阈值,即范围(0,5)
将产生0,1,2,3,4
,未到达最后一个并中断。
在这种情况下,当您尝试返回它时,不会定义任何费用,这会引发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]
def费用(金额):
比例=[[0,24.04],
[6010.12, 0.00450],
[30050.61, 0.00150],
[60101.21, 0.00100],
[150253.03, 0.00050],
[601012.11, 0.00030]]
如果金额=比例[-1][0]:
返回量表[-1][1]
其他:
对于范围(0,5)内的i:
如果金额>=比例[i][0]和金额<比例[i+1][0]:
退货金额*比例[i][1]
首先,你应该尽量避免将不同的东西命名为同一个名称。这会让你更难看清问题所在
发生的情况是:如果金额低于比例表中的第二个条目,则返回第一个条目。如果没有,则查看表格并检查金额是否大于当前值且小于下一个阈值。这一直持续到最后一个阈值,即范围(0,5)
将产生0,1,2,3,4
,未到达最后一个并中断。
在这种情况下,当您尝试返回它时,不会定义任何费用,这会引发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]
def费用(金额):
比例=[[0,24.04],
[6010.12, 0.00450],
[30050.61, 0.00150],
[60101.21, 0.00100],
[150253.03, 0.00050],
[601012.11, 0.00030]]
如果金额=比例[-1][0]:
返回量表[-1][1]
其他:
对于范围(0,5)内的i:
如果金额>=比例[i][0]和金额<比例[i+1][0]:
退货金额*比例[i][1]
看起来您在混合比例列表的两种不同语义。在代码中,您将列表视为一系列间隔。这意味着,低于0
和高于601012.11
的值未定义。但从您的描述来看,您希望列表中输入值为sti的最高条目ll位于条目对的第一个元素上方。看起来您在混合比例列表的两种不同语义。在代码中,您将列表视为一系列间隔。这意味着,未定义0
以下和601012.11
以上的值。但从您的描述来看,您似乎希望从中获得最高的条目输入值仍然位于条目对的第一个元素之上的列表。但实际上,正如@logicStuff所提到的,这不是非常pythonic的。但是,正如@logicStuff所提到的,这不是非常pythonic的。
for i in range(-1, len(scale) - 1):
if((i == -1 or ammount >= scale[i][0]) and
(i == len(scale) or ammount < scale[i + 1][0])):
fee = ammount * scale[i][1]
return fee
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]