首页 > 解决方案 > 在 Python 猜谜游戏中限制猜测次数

问题描述

我是 Python 新手,刚开始做猜谜游戏。

我终于设法找到了一种让游戏正常运行的方法,如果用户用此代码用完 3 次猜测,则允许他们重试(希望这对你们来说没问题)

from random import randint

random_number = randint(1, 10)
guesses_left = 3
guess = None
while True:
    print(f"You have {guesses_left} guseses left")
    guess = input("Pick a number between 1 and 10\n")
    guess = int(guess)
    if guess > random_number:
        print("Too high")
        guesses_left -= 1
    elif guess < random_number:
        print("Too low")
        guesses_left -= 1
    else:
        guesses_left = 3
        print("Good Job! You got it!")
        if input("Would you like to play again (y/n)\n") == "y":
            random_number = randint(1, 10)
        else:
            print("Thanks for Playing!")
            break
    if guesses_left == 0:
        guesses_left = 3
        print("You ran out of guesss :(")
        if input("Would you like another try?\n") != "y":
            print("Thanks for playing!")
            break

然而,在我得出这个结论之前,我将最后一个 if 语句放在倒数第二个 else 语句之上(我可能没有说得好,但希望代码能解释它)并且代码最终没有工作(它说我得到了正确的数字,即使数字是错误的)有人可以帮我解释为什么我需要将该代码块放在底部而不是最后的 else 语句?

from random import randint

random_number = randint(1, 10)
guesses_left = 3
guess = None
while True:
    print(f"You have {guesses_left} guseses left")
    guess = input("Pick a number between 1 and 10\n")
    guess = int(guess)
    if guess > random_number:
        print("Too high")
        guesses_left -= 1
    elif guess < random_number:
        print("Too low")
        guesses_left -= 1

    **if guesses_left == 0:
        guesses_left = 3
        print("You ran out of guesss :(")
        if input("Would you like another try?\n") != "y":
            print("Thanks for playing!")
            break**

    else:
        guesses_left = 3
        print("Good Job! You got it!")
        if input("Would you like to play again (y/n)\n") == "y":
            random_number = randint(1, 10)
        else:
            print("Thanks for Playing!")
            break

标签: python

解决方案


an 后在if同一缩进级别elif开始一组新的分支;它的评估在很大程度上独立于之前的分支(任何状态更改除外,例如guesses_left样本中的更改)。考虑一下您要进入块的内容(特别是 的值guesses_left

if guesses_left == 0:
    guesses_left = 3
    print("You ran out of guesss :(")
    if input("Would you like another try?\n") != "y":
        print("Thanks for playing!")
        break
else:
    guesses_left = 3
    print("Good Job! You got it!")
    if input("Would you like to play again (y/n)\n") == "y":
        random_number = randint(1, 10)
    else:
        print("Thanks for Playing!")
        break

这与有助于避免此类错误的一般设计原则有关:将任务分解为离散的子任务并减少耦合。在这种情况下,“检查猜测”和“检查游戏结束”是独立的子任务,它们应该反映在代码中(就像在最终的工作程序中所做的那样)。您可以将任务分成不同的函数、类、模块或框架(视情况而定),但即使您不这样做,您也可以编写代码,以便以后可以将其重构为单独的部分。


推荐阅读