python - 在 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
解决方案
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
这与有助于避免此类错误的一般设计原则有关:将任务分解为离散的子任务并减少耦合。在这种情况下,“检查猜测”和“检查游戏结束”是独立的子任务,它们应该反映在代码中(就像在最终的工作程序中所做的那样)。您可以将任务分成不同的函数、类、模块或框架(视情况而定),但即使您不这样做,您也可以编写代码,以便以后可以将其重构为单独的部分。
推荐阅读
- html - 使用一条路径重定向到另一个网站
- python - 如何找到同一年所有分数的平均值(Python)
- android - 使用 android 导航 safeArgs 时的许多参数
- c# - asp.net core登录功能报错“并非所有代码路径都返回值”
- django - 如何更改 moziila_django_oidc 中的 redirect_uri?
- winapi - 在 .code 之外调用汇编函数
- javascript - 延迟加载 Wildfire 评论
- sql-server - 使用 Docker 映像还原 SQL Server 数据库,导致 SA 登录错误
- python - python multiprocessing:如何从子进程修改在主进程中创建的字典?
- javascript - 如何先从 Api 获取数据,然后调用 my 函数?