1

刚好最近自己在学习python,然后边学python边看《算法图解》,学到第一章的二分查找的时候,我跟着书上给的demo敲代码,运行之后就发现总是报错。(我用的是pycharm)
一开始的报错如下:
image.png
语法错误?给的报错是print出了问题,书上这两行写的是:
print binary_search(my_list, 3)
print binary_search(my_list, -1)
想了很久才发现是print后要紧随一个小括号,如下:
print(binary_search(my_list, 3))
print(binary_search(my_list, -1))
如上改完之后,语法就没有错误了,但是运行发现又报错了(我裂开):
image.png
根据给的报错意思是说列表里面的索引只能是整数,先看看原代码:
image.png
这里的索引就是 'mid' ,用来查找列表中的元素,如果 mid=1 那就查找列表中第二个元素,显然这里 mid 只能为整数(总不会说我要查找列表中第1.5个数吧?)所以我们对 mid 进行取整,方法如下:
mid = (low + high)//2
guess = list[mid]
唯一有改动的地方就是多加了一个 ' / ',这样就能对 mid 取整了
上面两个改完之后就能顺利运行,不会再报错了

注:可能会有疑问,为啥print后面要紧跟着一个括号。我也是看了pycharm给的提示才发现的
image.png
可能是作者的版本不一样吧,毕竟也是几年前的书了
另外,如果在VSCode遇到一样的问题也可以用相同的方法解决哦

下面附上完整代码(仅供参考):

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))

Drage_n
1 声望1 粉丝

编程菜鸟一枚...