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

基于LeetCode实现的Python二分查找函数无输出问题求助

修复带计数功能的二分查找无输出问题

嘿,我仔细看了你的代码,一下子就发现了两个关键问题——这就是为什么你看不到预期输出的原因:

问题1:找到目标后没有终止循环/函数

在guess(mid) == 0的分支里,你只是打印了结果,但没有终止函数或循环。这会导致程序继续执行count += 1,然后再次进入循环判断。如果目标刚好在边界位置(比如target=1且maximum=1),还会陷入无限循环;即使不是边界,也会做很多无用的循环步骤,而且用户可能会疑惑为什么程序好像“没结束”。

问题2:未处理目标不在搜索范围的情况

如果用户输入的target不在1到maximum之间,循环会正常结束,但你的代码没有任何提示,这会让用户误以为程序没运行,因为没有任何输出。


修复后的完整代码

target = int(input("Enter the target value.\n"))
maximum = int(input("Now, enter maximum value, for range of search.\n"))

def binary_search_func(n):
    """Search for a specific value within a range of 1 to n."""
    low = 1
    high = n
    count = 1
    while low <= high:
        mid = (low + high) // 2  # 更简洁的Python整数除法写法
        res = guess(mid)
        if res == 0:
            print(f"Found {mid}, taking {count} turns.")
            return  # 找到目标后立即终止函数,避免无用循环
        elif res == 1:
            high = mid - 1
        elif res == -1:
            low = mid + 1
        count += 1
    # 循环结束说明目标不在搜索范围内
    print(f"Target {target} is not in the range 1 to {n}.")

def guess(num):
    """Return value, depending upon whether guessed val == target val."""
    if num == target:
        return 0
    elif num > target:
        return 1
    elif num < target:
        return -1

binary_search_func(maximum)

关键修改点说明

  • 添加return终止函数:当找到目标值时,打印结果后立即用return结束函数,彻底停止后续的循环和计数逻辑,避免不必要的执行。
  • 新增未找到提示:当循环正常结束(low > high),说明目标不在1到n的范围内,此时打印明确的提示信息,让用户清楚程序的执行结果。
  • 简化mid计算:用(low + high) // 2代替原来的int(low + (high - low)/2),两者效果完全一致,但前者更符合Python的编码习惯,可读性更强。

你可以测试几个场景验证:

  • 输入target=5、maximum=10:会输出找到目标的信息,显示查找次数
  • 输入target=15、maximum=10:会提示目标不在范围内
  • 输入target=1、maximum=1:会正确输出找到目标,不会陷入循环

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:19:43