2011-07-18 21 views
3

我正在學習python,我不知道爲什麼後面的程序正在打印你的數字比我認爲更大,即使猜測的數字更小。它就像在Python中,它比較字符串而不是數字?學習Python:如果條件執行所有的時間

number = 32 
tries = 1 

print "I have chosen a number, you have to guess it." 
guess = raw_input ("Guess:") 

while guess != number: 
    tries = tries+1 
    if guess > number: 
     print("Your guess is greater than i thought") 
     guess = raw_input ("Another Guess:") 
    else: 
     print("Your guess is smaller than i thought") 
     guess = raw_input ("Another Guess:") 

print "You guess it right in %d turns." %tries 

P.S:我知道它是一個愚蠢的問題,但我是一個在python noob!

+1

是的,比較字符串而不是數字不會這樣做,因爲例如,自'1'<'9'以來,'10'<'9'。 – 9000

+1

你在嘗試什麼輸入?請更具體地說明你正在嘗試的是什麼,每種情況下你的預期結果,以及你所得到的結果。此外,如果該問題是字符串比較,我很懷疑'猜測> number'永遠是true--看到,如果你能找到的情況下這是不正確的,那麼你會更加了解實際的問題是什麼。 –

回答

6

我不知道,直到剛纔,但事實證明,一個字符串,將永遠是一個Python整數「大於」:

>>> "0" > 1 
True 

所有您需要要做的就是更換

guess = raw_input ("Guess:") 

guess = int(raw_input ("Guess:")) 
+0

我想我記得在某處讀到,如果所有其他的都失敗了,Python只是比較類型名稱來確定比較檢查的結果:也就是說,由於「字符串」出現在「int」(或「integer」或「number」)之後你有沒有),這就解釋了爲什麼''0'> 1'是'真'。 (注:當我說:「如果一切都失敗了」,我的意思是,如果類型強制兩個方向發生故障) –

+2

注:Python 3中不可比擬的比較值如int-STR時,會導致錯誤類型。 – utdemir

+2

它應該!我很驚訝這麼長時間在Python中倖存下來的東西...... – fletom

11

raw_input將返回一個字符串。您需要將其解析爲數字以便比較正常工作。我認爲這只是int(raw_input(...))

+4

如果輸入不是數字,那麼在'int()'周圍包裝一個'try''可能會很好。 – GreenMatt

0

我想這是因爲是的raw_input CON對一個字符串表示支持,所以Python會根據char值爲其分配一個值。嘗試編寫int(raw_input(「text」))並查看它是否可以解決您的問題。

2

如果你猜大量捕獲異常可能會有所幫助,你不小心碰到你真的不希望你的程序挽救了一個字母。

while guess != number: 

    if guess > number: 
     print("Your guess is greater than i thought") 

    else: 
     print("Your guess is smaller than i thought") 
    try:  
     guess = int(raw_input ("Another Guess:")) 
     tries = tries+1 
    except ValueError: 
     print "Input must be numeric" 
print "You guess it right in %d turns." %tries