NameError,变量不显示存储的文本

时间:2017-09-18 02:55:13

标签: python python-3.x

我正在为类分配编写一些代码,而对于我的生活,我无法获得一个变量来显示我存储在其中的文本:

if (salesavg < 5000):
    rank = "SAD SALESMEN"
    if (salesavg >= 5000 or salesavg <= 8000):
        rank = "LOW SALESMAN"
        if (salesavg >= 8001 or salesavg <= 9000):
            rank = "MID SALESMAN"
            if (salesavg >= 9001 or salesavg <= 10000):
                rank = "EXCELLENT SALESMAN"
                if (salesavg > 10000):
                   rank = "TOP SALESMAN"

它应该显示在哪里:

print("RANKING: " ,rank)

不是很匆忙,但我很困惑,为什么它不起作用,我在这个程序的其他部分使用了类似的方法,它们工作正常!

回答:谢谢!将它们改为elif和from或to并修复我遇到的问题(也改变了顺序)。现在工作得很好。

4 个答案:

答案 0 :(得分:1)

你需要使用elif,而不仅仅是。发生的事情是代码检查salesavg&lt; 5000并且如果它不是真的,它只是跳过所有其他if语句,因为那些只能在第一个触发时触发。然后,由于if语句从未被触发,因此尚未声明变量rank。

以下是我要做的事情:

if (salesavg > 10000):
    rank = "TOP SALESMAN"
elif (salesavg >= 9001 or salesavg <= 10000):
    rank = "EXCELLENT SALESMAN"   
elif (salesavg >= 8001 or salesavg <= 9000):
    rank = "MID SALESMAN"
elif (salesavg >= 5000 or salesavg <= 8000):
    rank = "LOW SALESMAN"
elif (salesavg < 5000):
    rank = "SAD SALESMEN"

另请注意,我更改了顺序,以便首先查找最高顺序。这是因为顶级推销员本来会首先触发任何其他较小的级别。希望这有帮助!

答案 1 :(得分:0)

不确定你是否搞砸了格式化但我认为你搞砸了你的逻辑: 所有人如果循环嵌套意味着

if (salesavg >= 5000 or salesavg <= 8000):

只有在salesavg&lt; 5000

这是不合逻辑的,所以要解决这个问题:

if salesavg < 5000: rank = "SAD SALESMEN"
elif salesavg <= 8000: rank = "LOW SALESMAN"
elif salesavg <= 9000: rank = "MID SALESMAN"
elif salesavg <= 10000: rank = "EXCELLENT SALESMAN"
elif salesavg > 10000): rank = "TOP SALESMAN"
# this last one could just be else: rank = "TOP SALESMAN"

编辑优化了

答案 2 :(得分:0)

在Python中,缩进用于确定语句的结构。

在您的代码中,

if (salesavg < 5000):

嵌套条件

    if (salesavg >= 5000 and salesavg <= 8000):

永远不会是真的。对于其他人来说也一样。

应该是这样的:

if (salesavg < 5000): 
    rank = "SAD SALESMEN"
elif (salesavg >= 5000 and salesavg <= 8000):
    rank = "LOW SALESMAN"
//...

顺便说一下,代码中的所有or都应该是and,正如我在示例中修复的那样。

答案 3 :(得分:0)

我怀疑你没有价值的原因是因为你尝试使用大于5000的salesav。

缩进使得所有代码都以第一次测试为条件,其余代码仅在该测试通过时运行,因此当前代码仅在低于5000时才设置。

除了缩进之外,此代码可以更清晰,并且当前使用or代替and,因此任何小于上限的值都将通过每个测试。有一种更好的方法可以在python中检查限制之间的值。

if salesavg < 5000:
    rank = "SAD SALESMEN"
elif  5000 < salesavg <= 8000:
    rank = "LOW SALESMAN"
elif 8000 <  salesavg <= 9000:
    rank = "MID SALESMAN"
elif 9000 < salesavg <= 10000:
    rank = "EXCELLENT SALESMAN"
else: #if (salesavg > 10000):
    rank = "TOP SALESMAN" 

这可能更清楚。当然使用else,也可以在不每次测试两个限制的情况下编写。

if salesavg < 5000:
    rank = "SAD SALESMEN"
elif salesavg <= 8000:
    rank = "LOW SALESMAN"
elif salesavg <= 9000:
    rank = "MID SALESMAN"
elif salesavg <= 10000:
    rank = "EXCELLENT SALESMAN"
else: #if (salesavg > 10000):
    rank = "TOP SALESMAN"