我写了这个脚本,但无论用户输入什么,它总会返回相同的答案("你的猜测太高了#34;)。任何见解都会有所帮助。
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 :(得分: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)
始终将string
与int
进行比较,因此一旦您更正了您的代码将会被修复。
答案 1 :(得分: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.")
答案 2 :(得分: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
块。
答案 3 :(得分:1)
那是因为input
在Python 3中返回一个字符串。您需要调用int()
使其成为整数类型:
guess = int(input("Guess a number between 1 and 10: "))
您还错误地使用了type()
功能。您可能需要函数isinstance()
:if isinstance(guess, int):
此外,在Python中,我们不需要像您使用过的括号。您只需执行if guess > number: