二分查找函数binsea无法输出未找到提示,请求技术帮助
问题分析与修复
你的二分查找函数存在两个核心问题,导致查找不存在的元素时无输出:
- else分支永远不会执行:x与
CardData[mid]的关系只有等于、小于、大于三种,前面的if/elif已经完全覆盖了所有可能性,else代码块永远不会被触发。 - 循环结束后未处理未找到的情况:当循环因
front >= back退出时(说明整个列表已遍历完仍未找到目标),没有对应的逻辑输出“未找到”的提示。
修复步骤
- 移除无用的
else分支,把“未找到”的输出逻辑放在循环结束后,当found仍为False时执行。 - 调整区间收缩逻辑:原代码中
x > CardData[mid]时仅设置front=mid,可能导致循环无法终止,需改为front=mid+1来正确缩小左闭右开区间的范围。 - 将
mid的计算移至循环内部:每次迭代重新计算中间位置,避免初始值导致的逻辑偏差。
修正后的代码
def binsea(x, CardData): front = 0 back = len(CardData) found = False while front < back and not found: mid = (front + back) // 2 if x == CardData[mid]: found = True print(x, "is found at position", mid) elif x < CardData[mid]: back = mid else: front = mid + 1 if not found: print(x, "not found.")
测试调用binsea(55, [11,12,25,33,52,56,57,59,85,91]),会输出55 not found.,符合预期。
内容的提问来源于stack exchange,提问作者Masrur Ahmed
相关产品推荐
相关产品推荐

