2014-07-18 60 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")