我總是得到輸出None
而不是False
我的代碼:
def bi_search(elements: list, x) -> bool:
i = len(elements)/2-1
i = int(i)
print(i)
if i == 0:
return False
elif x == elements[i]:
return True
elif x < elements[i]:
e = elements[0:i 1]
bi_search(e, x)
elif x > elements[i]:
e = elements[i 1:len(elements)]
bi_search(e, x)
命令:
my_list = [1, 2, 5, 7, 8, 10, 20, 30, 41, 100]
print(bi_search(my_list, 21))
輸出:
4
1
0
None
我不明白,它甚至說 is i = 0 就在宣告之前,那么為什么我沒有得到 False 結果呢?
uj5u.com熱心網友回復:
這是因為當您陷入第 3 種或第 4 種情況并且bi_search()
遞回呼叫自身時,您忘記考慮到呼叫最終會回傳并且流程將從那里繼續進行。因為您錯過return
了這些情況,Python 會跳出elif
并到達函式的結尾。由于函式中沒有更多代碼要執行,Python 退出該函式并將執行回傳給呼叫者,但是由于呼叫者希望從它呼叫的函式中得到一些東西(回傳值),我們遇到了問題。Python 解決了這個問題,它與使用一起使用None
仍然回傳它實際上沒有的東西,并且還表明它沒有更好的東西可以回饋。
您的代碼應如下所示:
def bi_search(elements: list, x) -> bool:
i = len(elements)/2-1
i = int(i)
print(i)
if i == 0:
return False
elif x == elements[i]:
return True
elif x < elements[i]:
e = elements[0:i 1]
return bi_search(e, x)
elif x > elements[i]:
e = elements[i 1:len(elements)]
return bi_search(e, x)
然后輸出符合預期:
4
1
0
False
uj5u.com熱心網友回復:
你最后2個沒有return陳述句elif
,你想回傳遞回呼叫的值
def bi_search(elements: list, x) -> bool:
i = len(elements)/2-1
i = int(i)
print(i)
if i == 0:
return False
elif x == elements[i]:
return True
elif x < elements[i]:
e = elements[0:i 1]
return bi_search(e, x)
elif x > elements[i]:
e = elements[i 1:len(elements)]
return bi_search(e, x)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/537592.html
標籤:Python功能
上一篇:如何使用python中的if陳述句創建將月份值轉換為季度的函式
下一篇:用西班牙語為短日期創建函式