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

Python石头剪刀布游戏while循环失效及重玩输入未触发问题求助

石头剪刀布游戏循环问题排查与修复

问题根源分析

你的代码存在三个核心问题导致循环无法终止且无法触发重玩询问:

  1. 玩家输入在循环外初始化:player1和player2的输入获取逻辑在while True循环之外,循环内始终使用第一次的输入值,不会重新获取玩家新选择,只有第一次输入无效时才会进入else分支,正常游戏流程永远碰不到重玩询问。
  2. 循环终止逻辑缺失:break语句仅存在于else分支中,当玩家输入有效的r/p时,循环没有任何终止条件,会无限重复执行相同的判断逻辑。
  3. 错误提示文本错误:[ERROR: m not a valid move.]存在无效字符,应为合法的错误提示(比如[ERROR: Invalid move.])。

修复后的完整代码

# This program plays rock, paper, scissors between 2 players 
print("Let's play Rock, Paper, Scissors.")

while True:
    print(" ")
    player1 = input("Player 1, Enter your choice (r/p): ")
    player2 = input("Player 2, Enter your choice (r/p): ")

    # 判断游戏结果
    p1_choice = player1.casefold()
    p2_choice = player2.casefold()
    
    if p1_choice == "r" and p2_choice == "p":
        print("Rock v. Paper")
        print("Player 2 wins")
    elif p1_choice == "p" and p2_choice == "r":
        print("Rock v. Paper")
        print("Player 1 wins")
    elif p1_choice == p2_choice and p1_choice in ["r", "p"]:
        print("It's a TIE")
    else:
        print("[ERROR: Invalid move. Please enter r or p.]")
    
    # 询问是否再玩
    print(" ")
    playAgain = input("Play again? (y/n): ")
    if playAgain.casefold() != "y":
        print("Nice game!")
        break

关键改动说明

  • 将输入逻辑移入循环:每次循环开始时重新获取玩家选择,确保每轮游戏使用最新输入。
  • 统一重玩询问逻辑:无论游戏结果是输赢、平局还是无效输入,都会在每轮结束后询问是否继续,避免遗漏触发点。
  • 优化条件判断:将平局判断简化为p1_choice == p2_choice并校验是否为合法选项,提升代码可读性。
  • 修正错误提示:替换无效的错误文本,明确提示合法输入范围。

内容的提问来源于stack exchange,提问作者toothpaste_123

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 20:47:07