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

Python猜数字游戏输入l/h时猜测值不符合预期问题排查

猜数字游戏逻辑异常排查

问题描述

实现的计算机自动猜数字小游戏预期逻辑:

  • 输入l:代表当前猜测值过低,后续所有猜测值需始终高于本次猜测值
  • 输入h:代表当前猜测值过高,后续所有猜测值需始终低于本次猜测值
  • 输入c:代表猜测正确,程序结束
    实际运行异常:输入l后程序偶现比上一次猜测值更低的结果,输入h时也存在同类反向猜测的异常。
    原问题代码如下:
def computer_guess(x):
    low = 1
    high = x
    feedback = ""
    while feedback != "c":
        if low != high:
            guess = random.randint(low, high)
        else:
            guess = low
        feedback = input(f"Is {guess} too High (H), too Low (L), or correct (C): ".lower())
        if feedback == "h":
            high = guess - 1
        elif feedback == "l":
            low = low + 1

    print(f"Yeyyy, {guess} is the correct answer!!!")

computer_guess(100)

根因分析

代码共存在2处直接导致异常的逻辑错误,另有1处运行必现的缺漏:

  1. 低反馈的边界更新逻辑错误
    收到l反馈(当前猜测值过低)时,原代码执行low = low + 1,仅在原有下界基础上加1,完全没有参考本次的猜测值guess。正确逻辑应该是将搜索区间的下界调整为guess + 1,才能保证后续猜测值不会低于本次结果。原逻辑下搜索下界远低于本次猜测值,随机取值时自然会生成更小的数。
  2. 大小写转换位置错误
    原代码中.lower()被写在input()的提示字符串参数上,仅会把提示文本转为全小写,根本没有对用户输入的内容做小写归一化。如果用户按照提示输入大写的H/L/C,代码中的分支判断完全无法命中,高低边界不会做任何更新,程序会一直在初始的[1, x]区间内随机取值,必然出现反向猜测的异常。
  3. 缺省模块导入
    代码使用了random.randint()但未导入random模块,直接运行会触发名称错误。

修正后完整代码

import random

def computer_guess(x):
    low = 1
    high = x
    feedback = ""
    while feedback != "c":
        if low != high:
            guess = random.randint(low, high)
        else:
            guess = low
        # 修正:对用户输入内容做小写转换
        feedback = input(f"Is {guess} too High (H), too Low (L), or correct (C): ").lower()
        if feedback == "h":
            high = guess - 1
        elif feedback == "l":
            # 修正:低反馈时下界更新为当前猜测值+1
            low = guess + 1

    print(f"Yeyyy, {guess} is the correct answer!!!")

computer_guess(100)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 04:45:39