2017-02-21 107 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试图做加法,但添加到字符串定义为级联,这需要两个字符串。)

相关问题