python return none 而不是 True/False

python return none instead of True/False

我在 Python

中有两个使用二进制搜索进行搜索的程序

计划 1:

def bin(alist,x):
    if len(alist)==0:
        return False
    else:
        mid=len(alist)//2
        if (alist[mid]==x):
            return True 
        else:
            if alist[mid] < x:
                #print(alist[mid+1:],x)
                bin(alist[mid+1:],x)
            else:   
                #print(alist[:mid],x)
                bin(alist[:mid],x)

print (bin([2,3,5,8,9],8))
print (bin([2,3,5,8,9],7))

程序输出:

None
None

计划 2:

def bin(alist,x):
     if len(alist)==0:
        return False
     else:
        mid=len(alist)//2
        if (alist[mid]==x):
           return  True
        else:
            if alist[mid]<x:
                return bin(alist[mid+1:],x)
            else:
                return bin(alist[:mid],x)
print(bin([1,5,7,8,9],10))
print(bin([1,4,5,8,9],8))

程序输出:

False
True

为什么会这样?

在你的程序1中,只有当列表为空或者你要搜索的值在列表中间时,它才会return你的布尔值,那是因为你明确地说return如果len(alist)==0return True满足if (alist[mid]==x):,其余条件也一样

def bin(alist,x):
    if len(alist)==0:
        return False
    else:
        mid=len(alist)//2
        if (alist[mid]==x):
            return True 
        else:
            if alist[mid] < x:
                #print(alist[mid+1:],x)
                bin(alist[mid+1:],x)   # -------> return 
            else:   
                #print(alist[:mid],x)
                bin(alist[:mid],x)  # -------> return 

当您递归调用 bin() 方法并期望得到一个布尔值时,您必须在上面突出显示的行中添加 return。