python返回none而不是True / False

时间:2017-05-18 14:54:20

标签: python binary-search

我有两个在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 个答案:

答案 0 :(得分:0)

在您的程序1中,只有当列表为空或您在列表中间搜索的值时,它才会返回布尔值,这是因为您明确说return len(alist)==0 }和return 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。