python中的二进制搜索行为

python中的二进制搜索行为,python,binary-search,Python,Binary Search,请看下面的代码: def chop(array, search): lo = 0 high = len(array) - 1 while lo <= high: mid = (high + lo) /2 if array[mid] == search: return 'true' elif searc

请看下面的代码:

def chop(array, search):
        lo = 0
        high = len(array) - 1
        while lo <= high:
                mid = (high + lo) /2
                if array[mid] == search:
                        return 'true'
                elif search > array[mid]:
                        low = mid + 1
                else:
                        high = mid - 1
        return 'false'



if __name__ == '__main__':
        a = [1,2,3,4,5,6,7,8,9,10]
        print chop(a, 3)
def chop(数组,搜索):
lo=0
高=透镜(阵列)-1
而lo阵列[mid]:
低=中+1
其他:
高=中-1
返回“false”
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
a=[1,2,3,4,5,6,7,8,9,10]
印鉴(a、3)
我写了这个小脚本,它应该在数组中搜索数字-常规二进制搜索。因此,我运行脚本,例如,当我输入
chop(a,1)
时,我得到了true,当我输入
chop(a,2)
时,我得到了true,但是当我输入
chop(a,3)
时,我没有得到答案,只是Python Shell中的空行


有人知道发生了什么吗?

我猜这是你的错误:

low = mid + 1
while循环使用变量
lo
,并且在while循环中定义了一个名为
low
的新变量。本质上,您永远不会更新
lo
变量

将该行更改为:

lo = mid + 1

你的算法应该能工作。

'true'
'false'
?那怎么办?当mid=1时,您的二进制搜索将暂停。尝试在循环中打印mid的值。它的对分模块中有一个类似的函数。真不敢相信我竟然没注意到!谢谢大家:)不用担心,这就是为什么我不喜欢python的声明。容易错过。