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

Python二分查找代码异常排查:零售商品搜索功能故障求助

二分查找功能故障排查与修复

你的二分查找代码存在多个核心错误,导致无法正确判断商品编码是否存在,以下是问题分析和修复方案:

问题点梳理

  1. 二分查找的前提条件未满足
    二分查找要求目标列表必须是有序的,但你定义的item_list是无序的,这直接导致二分查找逻辑从根本上失效。

  2. 循环逻辑完全错误
    原代码用if start >= end作为判断条件,初始状态start=0、end=14,此时start < end会直接进入else分支返回-1,所以无论输入什么编码,二分查找都会返回未找到。正确的逻辑应该用while start <= end循环持续缩小查找范围。

  3. 指针更新方向错误

    • 当item_list[mid] > code时,目标值应该在左半区间,需将end设为mid - 1,而非mid + 1
    • 当item_list[mid] < code时,目标值应该在右半区间,需将start设为mid + 1,而非mid - 1
  4. 返回值判断的逻辑漏洞
    原代码找到元素时返回索引,未找到返回-1,但调用时用if result判断:若元素在索引0的位置,result=0会被Python视为布尔值False,导致误判为未找到。

修复后的完整代码

print("WELCOME TO OUR SHOP")
print("-------------------")

# 线性查找函数(逻辑正确,无需修改)
def linear_search(code, item_list):
    for i in range(len(item_list)):
        if item_list[i] == code:
            return True
    return False

# 修复后的二分查找函数
def binary_search(item_list, code):
    start = 0
    end = len(item_list) - 1
    # 使用while循环持续缩小查找范围
    while start <= end:
        mid = (start + end) // 2  # 用整数除法更简洁
        if item_list[mid] == code:
            return mid  # 找到返回索引
        elif item_list[mid] > code:
            end = mid - 1  # 目标在左半区,调整右边界
        else:
            start = mid + 1  # 目标在右半区,调整左边界
    return -1  # 循环结束未找到,返回-1

# 预定义商品编码列表
item_list = [4599, 3102, 1024, 9980, 2912, 1569, 4205, 9811, 1001, 7638, 4733, 1989, 5555, 5000, 3861]

# 获取用户输入
code = int(input("Find an item: \n"))

# 线性查找执行与输出
result = linear_search(code, item_list)
print("\nLinear Search")
print("searching...\n")
print(f"The Item {code} was found." if result else f"The Item {code} was not found.")

# 二分查找执行与输出:先对列表排序(二分查找必须基于有序列表)
sorted_item_list = sorted(item_list)
result = binary_search(sorted_item_list, code)
print("\nBinary Search")
print("searching...\n")
# 修正判断逻辑:只要返回值不是-1就表示找到
print(f"The Item {code} was found." if result != -1 else f"The Item {code} was not found.")

关键说明

  • 二分查找前必须对列表执行sorted()排序,否则无法正确缩小查找范围
  • 修复后的循环逻辑会持续迭代直到找到元素或范围耗尽
  • 调整了指针更新的方向,确保每次都能正确缩小查找区间
  • 修改了返回值的判断条件,避免索引0被误判为未找到

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 03:40:20