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

Python猜数字游戏中try循环未按预期终止、持续循环如何解决?

问题核心原因
  • 你的判断逻辑完全写错了:infiniteguess == ['Y', 'y', 'yes', 'yea', 'Yeah', 'Yes'] 是把单个字符串和整个列表做相等判断,二者类型都不一样,永远返回False,所以两个分支里的infiniteguessanswer=True永远不会执行,循环条件永远满足,自然无限循环。判断单个元素是否在列表里应该用in关键字,不是==。
  • 非法输入的判断逻辑有问题:你只判断输入是不是不等于'y'也不等于'n',那用户输入'Yes'这类你允许的内容也会被判定为非法,不符合你的预期。
  • 你没有给infiniteguessanswer设置初始的False值,代码运行时会直接报未定义变量错误。
修复后可直接运行的代码
import math

# 初始赋值必不可少
infiniteguessanswer = False
# 这里是模拟你前面逻辑得到的猜题次数,你可以替换为自己的赋值逻辑
numberofchances = 100

while not infiniteguessanswer:
    try:
        if numberofchances > 50:
            infiniteguess = input('你设置的猜题次数太高了,要不要开启无限猜题模式?请输入Y/N\n').strip()
            if infiniteguess in ['Y', 'y', 'yes', 'yea', 'Yeah', 'Yes'] :
                infiniteguessanswer = True
                numberofchances = math.inf
            elif infiniteguess in ['N', 'n', 'no', 'No'] :
                infiniteguessanswer = True
            else:
                print('请输入Y/N类的合法回答')     
        
        if numberofchances < 50:
            print('好的!')
            infiniteguessanswer = True
    
    except Exception as e:
        print(f'出错了:{e}')
优化提示
  • input()后加.strip()可以自动去掉用户输入的前后空格,避免输入 y这种带空格的内容被判定为非法。
  • 不要用空except捕获所有异常,会掩盖代码里的其他错误,最好明确捕获需要处理的异常,或者打印异常信息方便排查。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 06:18:01