如何避免字符串输入引发的while无限循环?
解决骰子游戏的无限循环问题
问题根源
你的代码存在两个核心问题导致无限循环:
- 循环条件逻辑错误:
while yes_or_no == 'y' or "Y"等价于(yes_or_no == 'y') or True——非空字符串"Y"在布尔判断中永远为真,所以不管用户输入什么,循环都会持续执行。 - 循环内未更新状态:即便条件正确,当前循环里既没有重新生成骰子点数,也没有再次询问用户是否继续,会一直重复输出初始骰子结果,无法终止流程。
修复步骤
- 修正循环条件:用
yes_or_no in ['y', 'Y']或yes_or_no.lower() == 'y'判断用户选择,确保只有输入y/Y时才进入循环。 - 重构循环结构:把掷骰子、计算分数、询问用户的逻辑整合到循环内,每次循环都重新生成骰子点数,并在循环末尾更新用户输入,让程序能响应终止指令。
修复后的完整代码
import random print('Welcome to the DICE GAME!') # 初始化选择为继续,触发第一次循环 yes_or_no = 'y' while yes_or_no.lower() == 'y': # 每次循环重新掷骰子 die1 = random.randint(1,6) die_2 = random.randint(1,6) print(die1, die_2) print(f"Your score is: {die1 + die_2}") # 循环末尾更新用户选择 yes_or_no = input('Would you like to roll again? Print "Y" or "y" to continue. Type anything else to exit: ') print('Thanks for playing the DICE GAME! Goodbye.')
代码说明
yes_or_no.lower() == 'y'统一处理大小写输入,无需分别判断'y'和'Y',逻辑更简洁。- 掷骰子代码放在循环内部,确保每次继续游戏都会生成新的点数。
- 循环末尾重新获取用户输入,让程序能根据新输入决定是否继续,彻底避免无限循环。
内容的提问来源于stack exchange,提问作者Jhon Cather
相关产品推荐
相关产品推荐

