二分查找算法终端无输出问题咨询:请求排查代码语法与逻辑错误
你的二分查找代码存在语法错误与逻辑死循环问题,导致程序无输出
一、语法错误
if num == numlist[m]这一行末尾缺少冒号,Python中所有条件语句、循环语句的结尾必须用冒号标记代码块开始。if n=0:这里使用了赋值运算符=,应该改为比较运算符==,否则会触发语法错误。
二、逻辑死循环问题
- 循环条件错误:
while (found == False) or (n != 0)的逻辑完全错误。当找到目标值后found=True,但n!=0仍成立,or逻辑会让循环持续执行,导致死循环,程序无法走到return和print步骤。正确的循环条件应该是while found == False and n != 0——只有没找到目标且还能继续搜索时,才维持循环。 - 中间值计算不当:使用
round()处理中间索引会引入不必要的浮点数运算,二分查找通常用整数除法//直接得到整数索引,避免精度问题。 - 找到目标后未终止循环:即使修正了循环条件,当
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
相关产品推荐
相关产品推荐

