Python TypeError:/:';列表';和';int';

Python TypeError:/:';列表';和';int';,python,python-3.6,Python,Python 3.6,我正在进行二进制搜索,发现以下错误: TypeError:/:“list”和“int”的操作数类型不受支持 下面是有问题的代码: def binary_search(arr,val): if len(arr)==0 or len(arr)==1 and arr[0]!=val: return false mid=arr[len(arr)//2] if val==mid: return true if val<mid:

我正在进行二进制搜索,发现以下错误:

TypeError:/:“list”和“int”的操作数类型不受支持

下面是有问题的代码:

def binary_search(arr,val):
    if len(arr)==0 or len(arr)==1 and arr[0]!=val:
        return false

    mid=arr[len(arr)//2]


    if val==mid:
        return true


    if val<mid:
            return binary_search(len(arr//2,val))
    if val>mid:
        return binary_search(len(arr//2+1,val))

arr=[1,2,3,4,5,6]

print(binary_search(arr,3))
def二进制搜索(arr,val):
如果len(arr)==0或len(arr)==1且arr[0]=瓦尔:
返回错误
mid=arr[len(arr)//2]
如果val==mid:
返回真值
如果是valmid:
返回二进制搜索(len(arr//2+1,val))
arr=[1,2,3,4,5,6]
打印(二进制搜索(arr,3))

如何解决此问题?

使用
arr//2
,您将
arr
列表除以
2
,导致异常。您应该将
arr
的一部分传递给递归函数:

def binary_search(arr,val):
    if len(arr)==0 or len(arr)==1 and arr[0]!=val:
        return False

    mid=arr[len(arr)//2]


    if val==mid:
        return True


    if val<mid:
            return binary_search(arr[:len(arr)//2],val)
    if val>mid:
        return binary_search(arr[len(arr)//2+1:],val)

arr=[1,2,3,4,5,6]

print(binary_search(arr,3))
def二进制搜索(arr,val):
如果len(arr)==0或len(arr)==1且arr[0]=瓦尔:
返回错误
mid=arr[len(arr)//2]
如果val==mid:
返回真值
如果是valmid:
返回二进制搜索(arr[len(arr)//2+1:],val)
arr=[1,2,3,4,5,6]
打印(二进制搜索(arr,3))

当您在
返回二进制搜索(len(arr//2,val))
中进行递归调用时,您试图在数组的一半上进行递归调用。在python中,不能像那样分割数组。获取类似于arr[0:len(arr)//2]的子数组。true和false中也存在语法错误