2016-01-03 295 views
0

我編寫了這個腳本,但它始終返回相同的答案(「您的猜測太高」),無論用戶輸入什麼內容。任何見解都會有所幫助。Python「猜數字」遊戲總是返回相同的答案

import random 

number = random.randint(1, 10) 

guess = input("Guess a number between 1 and 10: ") 

if type(guess == int): 
    print(number) # this prints the randint to show the code isn't working 

    while(number != 0): 
     if(guess > number): 
      print("Your guess is too high!") 
      break 

     elif(guess < number): 
      print("That's too low.") 
      break 

     elif(guess == number): 
      print("Thats's right!") 
      break 

    else: 
     print("Please enter a number.") 
+0

[無法重現](http://ideone.com/cMCOHZ) – Conduit

+1

所以我刪除了我的答案,因爲有些人決定沒有解釋爲什麼downvote 。你的代碼在Python 2.7上運行良好 - http://i.stack.imgur.com/RTsuo.png - 雖然有改進的範圍,但代碼在Python 2上工作。 – masnun

+0

while循環毫無價值;你不會改變循環內部的'number'的值,無論如何你在任何情況下都會跳出它。 – chepner

回答

3

您的while循環無用,將測試輸入爲int的問題最好使用try/except來處理。

結合在一起的正確答案是在Python3:

import random 

number = random.randint(1, 10) 
found = False 

while not found: 
    try: 
     guess = int(input("Guess a number between 1 and 10: ")) 
     if guess > number: 
      print("Your guess is too high!") 
     elif guess < number: 
      print("That's too low.") 
     elif guess == number: 
      print("Thats's right!") 
      found = True  
    except ValueError: 
     print("Please enter a number.") 
+1

可能不應該打印數字;)你也可以只移動'guess = int(輸入(「猜測一個數字在1和10之間:」))'在試驗內 –

+1

@PadraicCunningham:你是完全正確的......我從問題和輸入複製的打印可以保存在try中。將編輯爲清潔代碼 –

+0

太棒了!這工作得很好。現在,代碼允許用戶繼續猜測,直到找到號碼。 我不明白True/False和try語句是如何工作的,所以我會閱讀它們來了解爲什麼這個腳本能夠工作。有關這些主題的最佳資源的任何建議? – Munner

1

這是因爲input返回一個字符串在Python 3.您需要調用int(),使其成爲一個整數類型:

guess = int(input("Guess a number between 1 and 10: ")) 

您還使用了type()函數不正確。你可能想要的功能如下::if isinstance(guess, int):

另外,在Python中,我們不需要像你用過的括號。你可以簡單地做if guess > number:

3
if type(guess == int): 

這不是你所期望的。它總是返回True,因爲它等於bool(type(False))。首先要確認你的輸入轉換爲int

guess = int(input("Guess a number between 1 and 10: ")) 

,然後刪除該if聲明:

if type(guess == int): 

你的問題是,這種代碼:

if(guess > number) 

總是比較一個stringint,所以一旦你糾正你的代碼將被修復。

+0

OP應該爲'int()'準備,如果它們總是轉換用戶輸入,則會引發異常。 – Turn

2

我剛剛複製並粘貼了您的代碼,它似乎大多正常工作。雖然有一些問題。首先,它看起來是基於您使用輸入函數的方式爲python 2編寫的。然而,這是不好的做法,因爲Python 2中的input()函數包含對eval()函數的隱式調用,可能允許運行任意代碼。

在Python 2中,更好的做法是使用guess = int(raw_input("Guess a number between 1 and 10: "))

在python 3中,raw_input()已被刪除,input()取而代之。所以在python 3中,你會使用guess = int(input("Guess a number between 1 and 10: "))

您的最終else塊也縮進不應該是,但如果您修改代碼以使用上面給出的建議,您的if...else塊不再是必需的。