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

二分查找代码问题求助:输入非1-100数值未正确返回-1

问题排查与修复方案

核心问题分析

你的代码存在两个关键问题,导致目标值超出1-100范围时无法返回预期的-1:

  1. 循环结束后无返回逻辑
    函数里的else: return -1永远不会触发,因为arr[mid] == target、arr[mid] < target、arr[mid] > target已经覆盖了所有可能的比较结果。当循环因low > high(说明目标不存在)退出时,函数没有返回值,此时index会是None,而None != -1的判断结果为True,所以会错误执行"Found"分支,而非未找到的提示。

  2. 字符串与数值的类型不匹配
    numbers列表存储的是字符串类型([str(i) for i in range(1,101)]),输入的target_number也是字符串,字符串的比较逻辑和数值完全不同。比如"105"和"20"比较时,字符串会按字符逐个对比,因"1" < "2",会错误认为"105" < "20",直接打乱二分查找的逻辑。

修复后的代码

def binary_search(arr, target):
    low, high = 0, len(arr) - 1

    while low <= high:
        mid = (low + high) // 2

        print(f"current range: {low+1}~{high+1}")
        print(f"current mid: {arr[mid]}")

        if arr[mid] == target:
            return mid
        elif arr[mid] < target:
            print(f"target {target} is bigger than {arr[mid]}.")
            low = mid + 1
        else:
            print(f"target {target} is smaller than {arr[mid]}.")
            high = mid - 1
    # 循环结束后确认未找到,返回-1
    return -1


# 改为存储整数类型,保证数值比较逻辑正确
numbers = [i for i in range(1, 101)]

target_number = input("Enter the number: ")
# 处理输入转整数,同时捕获非数字输入的情况
try:
    target_number = int(target_number)
except ValueError:
    print(f"{target_number} is not a valid number.")
    exit()

index = binary_search(numbers, target_number)

if index != -1:
    print(f"Found {target_number}!")
else:
    print(f"{target_number} not found.")

修复说明

  • 移除了无用的else: return -1分支,在循环结束后统一返回-1,确保未找到目标时能正确返回预期值。
  • 将numbers列表改为存储整数类型,同时把输入的字符串转为整数,保证比较逻辑符合数值大小的预期。
  • 增加了输入合法性判断,处理用户输入非数字的异常情况。
  • 修正了输入提示的拼写错误(numbe改为number)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 22:50:05