You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 03:52:47