以下是我的游戏概念,计算机随机生成1-100的数字,玩家必须猜测该数字。如果他们猜测的数字更高或更低,计算机会告诉他们。
我添加了一些代码以确保用户输入的猜测是一个数字,但由于某种原因,它只适用于他们的第一次猜测。
import random
x = random.randint(1, 100)
guess = input("Guess the number")
while guess.isnumeric() == True:
if x > int(guess):
print("Too low, guess again")
guess = input("Guess the number")
if x < int(guess):
print("Too high, guess again")
guess = input("Guess the number")
if x == int(guess):
print ("That is correct!")
break
if guess.isnumeric() == False:
print("Please enter a valid number")
guess = input("Guess the number")
我真的不知道如何解释它。但是,例如,如果我猜测数字20是我的第一个猜测,它会根据随机生成的数字输出太高或太低,但在那之后,如果我输入一堆随机字母,它会给我一个错误,猜测无法与随机生成的数字进行比较。
答案 0 :(得分:2)
我已经为您修复了代码。试试这个:
import random
x = random.randint(1, 100)
while True:
try:
guess = int(raw_input("Guess the number: "))
except ValueError:
print("Not a valid number, try again!")
continue
if guess < x:
print("Too low, guess again")
elif guess > x:
print("Too high, guess again")
elif x == guess:
print ("That is correct!")
break
您不需要在每次猜测后提示用户输入,这是第一个输入提示的内容。因为我们指定while True
,所以每次都会提示用户输入一个数字,除非他们输入正确的数字,在这种情况下,我们break
无限循环。
此外,我们可以将输入语句放在try
块中,因为我们正在将输入转换为整数。如果用户输入一个字符串,如果程序试图将其转换为整数,程序将失败,但如果我们except ValueError:
然后continue
,我们将提醒用户他们的输入无效,并且然后再次提示他们输入。
答案 1 :(得分:2)
您的if
语句都是独立的:
if x > int(guess):
print("Too low, guess again")
guess = input("Guess the number")
if x < int(guess):
print("Too high, guess again")
guess = input("Guess the number")
if x == int(guess):
print ("That is correct!")
break
第二个和第三个if
语句将始终再次测试guess
,即使第一个if
测试匹配也是如此。如果第一个if
测试匹配并且您输入了非数字guess
值,则这两个测试将失败,因为int()
调用将引发ValueError
异常。
您可以使用elif
和else
告诉Python测试是相互依赖的;现在Python只会执行第一个匹配块,并完全跳过其他块:
if x > int(guess):
print("Too low, guess again")
guess = input("Guess the number")
elif x < int(guess):
print("Too high, guess again")
guess = input("Guess the number")
else:
print ("That is correct!")
break
这意味着当else
或if
测试匹配时, elif
块之后连续执行。
请注意,我最后使用了else
;如果数字既不太高也不太低,数字必须相等,没有其他选择。没有必要明确地测试它。
然而,你现在正在重复自己。你想在3个不同的地方猜测。您可以询问一次并让循环处理请求新值:
while True:
while True:
guess = input("Guess the number:")
if guess.isnumeric():
break
print("Not a valid number, try again!")
guess = int(guess)
if x > guess:
print("Too low, guess again")
elif x < guess:
print("Too high, guess again")
else:
print ("That is correct!")
break
重复的次数已经少了很多;一个单独的while
循环会询问一个数字,直到它实际上是数字,而guess
只会转换为int()
一次。
您可以移除嵌套的while True:
并在此处使用外部continue
,结果将是相同的,前提是您使用while True:
guess = input("Guess the number:")
if not guess.isnumeric():
print("Not a valid number, try again!")
continue # skip to the top of the loop again, so ask again
guess = int(guess)
if x > guess:
print("Too low, guess again")
elif x < guess:
print("Too high, guess again")
else:
print ("That is correct!")
break
关键字跳过剩余的循环时#39} ; t有一个数值:
first <= last
答案 2 :(得分:1)
你需要将猜测逻辑包围在另一个循环中,直到猜测正确为止。
伪代码:
choose_target_answer
while player_has_not_guessed_answer
get_player_guess
if player_guess_is_valid
respond_to_player_guess
else
give_error_message