2013-09-25 63 views
1

問題:Python簡單數字比較

計算機隨機產生一個數字。用戶輸入一個數字,計算機會告訴你,如果你太高或太低。然後,你會繼續猜測,直到你猜數字。

我的解決辦法:

import random 

computer = random.randint(1, 500) 

def guessNumber():  
    user = raw_input('> ') 
    while user != computer: 
      if user > computer: 
       print "Your number is too big" 
       user = raw_input('> ') 
      else: 
        print "Naa! too small. Try a bit higher number" 
        user = raw_input('> ') 
    print "Now the numbers are equal" 

不幸的是,我的代碼永遠不會運行if語句,甚至與它總是打印「你數過大」,即使我進入「1」,用戶通過。

回答

2

raw_input()返回一個字符串值。把它變成一個整數第一:

user = int(raw_input('> ')) 

由於弦之前的Python 2種編號,總是你user > computer測試將始終返回true,無論什麼進入:

>>> '' > 0 
True 

的Python 3整流這樣的:

>>> '' > 0 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: unorderable types: str() > int() 

需要注意的是,如果用戶不輸入有效的數字,int()將拋出一個ValueError

>>> int('42') 
42 
>>> int('fortytwo') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: invalid literal for int() with base 10: 'fortytwo' 

您可能需要顯式處理是:

def askForNumber(): 
    while True: 
     try: 
      return int(raw_input('> ')) 
     except ValueError: 
      print "Not a number, please try again" 


def guessNumber(): 
    user = askForNumber() 
    while user != computer: 
     if user > computer: 
      print "Your number is too big" 
      user = askForNumber() 
     else: 
      print "Naa! too small. Try a bit higher number" 
      user = askForNumber() 
    print "Now the numbers are equal" 
+0

轉動「的raw_input()」到一個整數本身並不解決我的問題,但是當我處理它明確地按照你的「askForNumber( )'功能它的工作。我試圖理解爲什麼,但我不能。即使我更喜歡你的解決方案,它不應該沒有使用'askForNumber()'函數工作? – fromPythonImportNoob

+0

它應該工作得很好;你是否修復了所有*'raw_input()'調用? –

+0

對不起,這是我的壞..我離開了最後一次呼籲..它的作品。謝謝 – fromPythonImportNoob

1

user變量是字符串類型,因爲raw_input()返回字符串,如更改代碼:

user = int(raw_input('> ')) 

所以user是整數。