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
相关产品推荐
相关产品推荐

