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

如何避免字符串输入引发的while无限循环?

解决骰子游戏的无限循环问题

问题根源

你的代码存在两个核心问题导致无限循环:

  1. 循环条件逻辑错误:while yes_or_no == 'y' or "Y" 等价于 (yes_or_no == 'y') or True——非空字符串"Y"在布尔判断中永远为真,所以不管用户输入什么,循环都会持续执行。
  2. 循环内未更新状态:即便条件正确,当前循环里既没有重新生成骰子点数,也没有再次询问用户是否继续,会一直重复输出初始骰子结果,无法终止流程。

修复步骤

  1. 修正循环条件:用yes_or_no in ['y', 'Y']或yes_or_no.lower() == 'y'判断用户选择,确保只有输入y/Y时才进入循环。
  2. 重构循环结构:把掷骰子、计算分数、询问用户的逻辑整合到循环内,每次循环都重新生成骰子点数,并在循环末尾更新用户输入,让程序能响应终止指令。

修复后的完整代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 18:40:45