猜数游戏,无法进行下一次猜测

时间:2016-09-03 17:54:08

标签: python random

以下是我的游戏概念,计算机随机生成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是我的第一个猜测,它会根据随机生成的数字输出太高或太低,但在那之后,如果我输入一堆随机字母,它会给我一个错误,猜测无法与随机生成的数字进行比较。

3 个答案:

答案 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异常。

您可以使用elifelse告诉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

这意味着当elseif测试匹配时, 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