剪刀石头布游戏输入验证循环异常:合法输入无法终止循环
剪刀石头布游戏循环无法终止的问题修复
问题根源
你的循环条件逻辑完全错误:
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
相关产品推荐
相关产品推荐

