在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