2017-02-21 116 views
-1

這裏是我的代碼,它執行一個簡單的數字猜謎遊戲:錯誤「類型錯誤:必須str的不是int」

i = 1 
lower = input('Enter the lower range: ') 
upper = input('Enter the upper range: ') 
from random import randint 
answer = randint(lower, upper) 
guess = input("What's the number? ") 
while guess != answer: 
    if ~(guess in range(lower, upper)): 
     print('Your guess must be in the range', lower, 'to', upper) 
     i = i - 1 
    elif guess < answer: 
     print('Too low!') 
    elif guess > answer: 
     print('Too high!') 
    guess = input("What's the number? ") 
    i = i + 1 
print('Congrats! You correctly guessed the number to be ', answer, '! It took you ', i, ' tries.', sep='') 

當我嘗試運行它,在命令提示符下給我以下錯誤:

File "C:\Users\username\AppData\Local\Programs\Python\Python36-32\lib\random.py", line 220, in randint 
    return self.randrange(a, b+1) 
TypeError: must be str, not int 

編輯:謝謝你的解決方案,改變input(...)int(input(...))固定我的代碼。我還會補充說,第8行還包含一個錯誤。它應該是:if not (guess in range(lower, upper + 1)):

+0

提示:在Python 3(不像蟒2),輸入返回一個字符串...做randint('1','5')返回一個類似於你得到的錯誤(我沒有python3方便)...你想要做upper = int(input(「.. ..「)),同樣對於更低的 – Foon

+0

這個'if〜(猜測在範圍內(低,高)):'是'〜'運算符的一個非常用的用法。如果猜測不在範圍內(較低,較高):'或者更簡單一些,如果較低<=猜測<較高:',則更好。 – Matthias

回答

1

您需要將輸入轉換第一個整數

lower = int(input('Enter the lower range: ')) 
upper = int(input('Enter the upper range: ')) 

要解釋的錯誤:錯誤消息是有點誤導,因爲它說,你需要str,而不是int,而不是周圍的其他方式。但是,這是因爲在執行內部randrange函數之前,b會增加,因此您有例如'10'+1並且會產生此錯誤。

0

你正在從input()函數中取出你的「數字」。

input()作爲一個字符串來找你。您需要使用int(lower)將其轉換爲數字形式,然後將值轉換爲randint()

(誤差從b+1莖 - randint試圖做加法,但添加到字符串定義爲級聯,這需要兩個字符串。)

相關問題