初学者python代码实践

在print binary_search那里报错,第一天学习,有知道问题在哪里的大佬嘛

def binary_search(list,item):
    low = 0
    high=len(list)-1
    while low<=high:
        mid =(low+high)/2
        guess=list[mid]
        if guess==item:
            return mid
        if guess>item:
            high=mid-1
        else:
            low = mid+1
        return None
my_list = [1,3,5,7,9]
print binary_search(my_list, 3) 
print binary_search(my_list, -1) 

这段代码报错, 有2个地方修改了一下, 不报错了, 但是结果为None, 你结合你的需求再完善下:

1 print语句修改, 需要加括号

2 mid 在计算后, 用list切片, 需要是整数

def binary_search(list,item):
    low = 0
    high=len(list)-1
    while low<=high:
        mid =(low+high)/2
        guess=list[int(mid)]  # 索引里面需要是整数, 上面mid计算的是含小数点
        if guess==item:
            return mid
        if guess>item:
            high=mid-1
        else:
            low = mid+1
        return None
my_list = [1,3,5,7,9]
print(binary_search(my_list, 3))   # print语句的写法修改 
print(binary_search(my_list, -1))  
guess = list[mid] # list 是一个 列表 取列表的值 只能是 整数int 类型 现在 你的mid 是 4.0    
​​​​​​​                  #4.0 是 float 类型  所以 你报错了 可以用 int(mid) 把 float 转成 int

 

有两点错误:

1:python3中print函数需要加括号了。print(binary_search(my_list, 3))

2. mid =(low+high)/2这里需要采用整除,不然会出现小数(索引不能为小数)。改为mid =(low+high)//2即可

 

您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632