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

