簡體   English   中英

python返回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中,僅當列表為空或要在列表中間搜索的值時,它才會返回布爾值,這是因為您明確地說,如果len(alist)==0returnlen(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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM