Python石头剪刀布游戏中while循环输入校验仅生效一次是什么原因
问题原因
你的代码存在两个核心逻辑错误,直接导致输入校验失效:
- 合法性判断逻辑错误:你直接将字符串格式的用户输入和列表
possible_choices做等值比较,字符串永远不可能和列表相等,因此该判断永远返回False,正确做法是用in关键字判断输入是否包含在可选列表中。 - 变量用途混乱:你复用
user_input变量同时存储用户输入内容和布尔类型的校验结果,第一次校验不合法时你将user_input设为False,进入重提示循环后你又把新的用户输入赋值给user_input,如果这次输入仍不合法,user_input就变成了字符串类型,此时while user_input == False的判断永远不成立,循环直接退出,因此只会提示一次重输。
修正后代码(已全部汉化)
import random print("你希望玩多少轮游戏?") repeat = input() possible_choices = ["rock", "paper", "scissors"] for x in range(int(float(repeat))): user_input = input("请输入选择(rock/paper/scissors):") # 输入不合法则持续提示重输 while user_input not in possible_choices: user_input = input("输入无效,请输入rock、paper或scissors:") computer_action = random.choice(possible_choices) print(f"\n你选择了{user_input},电脑选择了{computer_action}。\n") if computer_action == user_input: print(f"双方都选择了{user_input},平局!") elif user_input == "rock": if computer_action == "paper": print("纸包石头,你输了!") else: print("石头砸剪刀,你赢了!") elif user_input == "paper": if computer_action == "scissors": print("剪刀剪纸,你输了!") else: print("纸包石头,你赢了!") elif user_input == "scissors": if computer_action == "paper": print("剪刀剪纸,你赢了!") else: print("石头砸剪刀,你输了!") print("") print("游戏结束。")
内容的提问来源于stack exchange,提问作者Muttsack
相关产品推荐
相关产品推荐

