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

二分查找算法终端无输出问题咨询:请求排查代码语法与逻辑错误

你的二分查找代码存在语法错误与逻辑死循环问题,导致程序无输出

一、语法错误

  • if num == numlist[m] 这一行末尾缺少冒号,Python中所有条件语句、循环语句的结尾必须用冒号标记代码块开始。
  • if n=0: 这里使用了赋值运算符=,应该改为比较运算符==,否则会触发语法错误。

二、逻辑死循环问题

  1. 循环条件错误:while (found == False) or (n != 0) 的逻辑完全错误。当找到目标值后found=True,但n!=0仍成立,or逻辑会让循环持续执行,导致死循环,程序无法走到return和print步骤。正确的循环条件应该是while found == False and n != 0——只有没找到目标且还能继续搜索时,才维持循环。
  2. 中间值计算不当:使用round()处理中间索引会引入不必要的浮点数运算,二分查找通常用整数除法//直接得到整数索引,避免精度问题。
  3. 找到目标后未终止循环:即使修正了循环条件,当found=True时循环会自然终止,但原代码中找到目标后仅设置found=True,若循环条件错误仍会继续执行。另外,边界判断逻辑冗余,可简化。

修正后的代码

def b_search(num):
    numlist = [12, 23, 34, 54, 67, 81, 99, 102]
    s = 0
    e = len(numlist) - 1
    found = False
    result = -1
    while s <= e and not found:
        m = (s + e) // 2
        if num == numlist[m]:
            found = True
            result = m
        elif num > numlist[m]:
            s = m + 1
        else:
            e = m - 1
    return result

print(b_search(23))

修正说明

  • 改用s <= e作为循环的核心条件,这是二分查找的标准边界判断,去掉了冗余的n变量。
  • 用整数除法//计算中间索引,确保得到整数结果,避免浮点数精度问题。
  • 找到目标时直接记录索引并标记found,循环会自然终止。
  • 移除冗余的边界判断逻辑,让代码更简洁易读。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 13:00:21