[英]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)==0
則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。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.