首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Python中选择刻度的范围限制

在Python中选择刻度的范围限制
EN

Stack Overflow用户
提问于 2016-06-02 17:20:57
回答 2查看 52关注 0票数 0

我想按照这个比额表收取一笔费用:

代码语言:javascript
复制
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欧元的固定费用

我的代码:

代码语言:javascript
复制
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变量时。

有没有更多的方法来选择音阶的范围限制?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-02 17:29:30

我认为更好的方法是使用while循环来检查amount是否比scale[i+1][0]小,这样您就可以只使用scale[i][1]。并给出一个else来处理任何比scale[len(scale)][0]更大的东西。

票数 1
EN

Stack Overflow用户

发布于 2016-06-02 17:30:59

首先,您应该尽量避免将不同的事物命名相同。这使得我们更难看清问题的所在。

所发生的情况是:如果金额低于刻度表中的第二个条目,则返回第一个条目。如果没有,请查看表,并检查金额是否大于当前值,是否小于下一个阈值。直到最后一次,您的range(0, 5)将产生0, 1, 2, 3, 4,而不是到达最后一次并中断。在这种情况下,当尝试返回fee时,不会定义任何UnboundLocalError,从而引发UnboundLocalError。我也会通过检查上界来修正:

代码语言:javascript
复制
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]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37598337

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档