如何在Python猜拳游戏中实现嵌套while循环的输入验证?
Python猜拳游戏:完善“再玩一次”的输入验证逻辑
我正在写一个Python猜拳游戏,目前已经实现了玩家输入rock/paper/scissors时的循环验证(输入无效就一直提示)。现在需要给“是否再玩一次?(Y/N)”的输入也加同样的逻辑:
- 输入Y(大小写都算),回到游戏开头重新玩
- 输入N(大小写都算),打印“Thanks for playing!”并退出
- 输入其他内容,打印“Please enter a valid response”并持续提示
原来的代码来自YouTube的Bro Code,但原来的“再玩一次”判断只做了一次,没有循环验证,自己尝试加布尔变量和while循环时缩进出错,代码跑不起来。原代码如下:
options = ("rock", "paper", "scissors") running = True while running: player = None computer = random.choice(options) while player not in options: player = input("Enter a choice (rock, paper, scissors): ") print(f"Player: {player}") print(f"Computer: {computer}") if player == computer: print("It's a tie!") elif player == "rock" and computer == "scissors": print("You win!") elif player == "paper" and computer == "rock": print("You win!") elif player == "scissors" and computer == "paper": print("You win!") else: print("You lose!") if not input("Play again? (y/n): ").lower() == "y": running = False print("Thanks for playing!")
修改后的完整代码
import random # 原代码遗漏导入random,补充后才能正常运行 options = ("rock", "paper", "scissors") running = True while running: player = None computer = random.choice(options) while player not in options: player = input("Enter a choice (rock, paper, scissors): ") print(f"Player: {player}") print(f"Computer: {computer}") if player == computer: print("It's a tie!") elif player == "rock" and computer == "scissors": print("You win!") elif player == "paper" and computer == "rock": print("You win!") elif player == "scissors" and computer == "paper": print("You win!") else: print("You lose!") # 新增的“再玩一次”循环验证逻辑 while True: play_again = input("Play again? (y/n): ").lower() if play_again == 'y': break # 跳出内层循环,回到外层游戏循环重新开始 elif play_again == 'n': running = False break # 跳出内层循环,外层循环随后结束 else: print("Please enter a valid response") print("Thanks for playing!")
关键修改说明
- 把原来的单次输入判断改成
while True无限循环,直到输入有效才跳出 - 用
.lower()统一转换输入为小写,兼容大小写输入(比如Y、y都有效) - 输入
y时直接跳出内层循环,外层的游戏循环会继续执行,重新开始游戏 - 输入
n时将running设为False,再跳出内层循环,外层循环结束后程序执行退出语句 - 输入无效内容时打印提示,继续循环等待正确输入
内容的提问来源于stack exchange,提问作者LucidKoder
相关产品推荐
相关产品推荐

