2014-07-18 29 views
-1

我一直在试图编写这个程序,并寻找修复/这个问题的答案。我是写Python的新手。Python少于/大于问题

BatPower = "100" 

if BatPower >= "70": 
    print("BatPower - GOOD") 
elif BatPower <= "50": 
    print("BatPower - OK") 
elif BatPower <= "30": 
    print("BatPower - CRITICAL") 
else: 
    print("CRITICAL ERROR READING BATPOWER!") 

所以你可以看到 'BatPower = “100”' 但不是返回值 “BatPower - GOOD” 返回 “BatPower - 确定”。当我输入'BatPower =“2”'时。它返回“BatPower - 确定”

这里有一些其他的输入与输出有:

BatPower = "75" 
BatPower - GOOD 

BatPower = "30" 
BatPower - OK 

BatPower = "29" 
BatPower - OK 

BatPower = "99" 
BatPower - GOOD 

BatPower = "1" 
BatPower - OK 

正如你所看到的,我从来没有得到过临界产量。良好的输出效果很好,直到它到达100

编辑: 最后的工作代码:

BatPower = 60 
BatStatus = "Passing..." 

if BatPower >= 70: 
    BatStatus="BatPower - GOOD" 
elif BatPower >= 30: 
    BatStatus="BatPower - OK" 
elif BatPower >= 0: 
    BatStatus="BatPower - CRITICAL" 
else: 
    BatStatus="CRITICAL ERROR READING BATPOWER!" 

print(BatStatus) 

感谢的帮助!

+3

不要使用字符串来指定权力 - Python无法比较那样的字符串。使用数字代替 – darthbith

+0

将字符串[按照字典顺序](http://en.wikipedia.org/wiki/Lexicographical_order)进行比较,例如''100'''2''。 – jonrsharpe

+0

@MartinPieters:OP有另一个与字符串比较无关的问题。程序的逻辑看起来不会返回CRITICAL,因为任何数字'n <= 30'都满足'n <= 50',这首先被评估。我想在回答中解决这个问题。 – ericmjl

回答

3

正如其他海报所指出的,主要问题是您要比较字符串,就好像它们是数字一样,由于字符串比较的操作而失败(一次一个字符,开始从左边)。即使100 > 70为真,"100" > "70"不是;字符7大于字符1

你需要做的是把所有东西都改为整数,也许把这个字符串换成int()函数。但是一旦你这样做,你的代码仍然存在缺陷。我们来看一个BatPower = 25的例子。

if BatPower >= 70: 

没有,25 >= 70是不正确的。下一行:

elif BatPower <= 50: 

这确实评价为真,因为25 <= 50。在每一步中,都需要>=而不是<=,因此。这将解决另一个问题。

+0

OP为'BatPower'分配了“100”。 –

+0

@MartijnPieters是的,但他问的是他分配给其他值的场景。 – TheSoundDefense

+0

但是'BatPower'不是一个整数*,它是整个点。 –

2

字符串比较“按字典顺序”。换句话说,它比较第一个字符,然后是第二个,然后是第三个字符...

如果其中一个字符是“大于”另一个字符,则设置整个字符串的比较。所以,

"100" < "20" 

实际上是True因为"1" < "2"

外卖就是这样 - 如果您要比较数字数据,请使用数字而不是字符串。它会让你的生活变得更容易 - 例如:

BatPower = 100 

if BatPower >= 75: 
    print("BatPower - GOOD")