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

剪刀石头布游戏输入验证循环异常:合法输入无法终止循环

剪刀石头布游戏循环无法终止的问题修复

问题根源

你的循环条件逻辑完全错误:

while player1 == "P" or player1 != "S" or player1 != "R" or player2 != "P" or player2 != "S" or player2 != "R":

这个条件永远为True。比如哪怕player1输入合法的"R",player1 != "S"也是True,只要有一个or条件满足,循环就会持续执行,根本停不下来。正确的逻辑应该是:当任意玩家输入不在合法集合{"R","P","S"}中时,继续循环。

修复后的完整代码

同时重构代码消除重复逻辑,让结构更简洁:

from getpass import getpass as input

def judge_winner(p1, p2):
    if p1 == p2:
        print("It is a Tie 🪢")
    elif (p1 == "R" and p2 == "S") or (p1 == "P" and p2 == "R") or (p1 == "S" and p2 == "P"):
        print("Player 1 Won🏆")
    else:
        print("Player 2 Won🏆")

print('''
EPIC ROCK 🪨 PAPER 📃 SCISSORS ✂️ BATTLE ⚔️!
++++++++++++++++++++++++++++++++++++++++++++++
''')

while True:
    player1 = input("""
Player 1 Please Enter Your Move
R = 🪨
P = 📃
S = ✂️
""").strip()
    player2 = input("""
Player 2 Please Enter Your Move
R = 🪨
P = 📃
S = ✂️
""").strip()
    
    # 验证输入合法性
    if player1 in {"R", "P", "S"} and player2 in {"R", "P", "S"}:
        judge_winner(player1, player2)
        break  # 输入合法,终止循环
    else:
        print("Wrong Move, Please Try Again")

print('''
Thanks for Playing
EPIC ROCK 🪨 PAPER 📃 SCISSORS ✂️ BATTLE ⚔️!
++++++++++++++++++++++++++++++++++++++++++++++
''')

关键改进点

  • 用while True构建无限循环,仅在输入合法时通过break终止,逻辑更直观
  • 封装judge_winner函数,消除重复的胜负判断代码
  • 加入.strip()处理输入,避免用户误输入空格导致的非法判断
  • 直接检查输入是否在合法集合中,条件判断简洁准确

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 13:10:25