我总是得到输出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
我不明白,它甚至说i = 0就在语句之前,那么为什么我没有得到False的结果呢?
2条答案
按热度按时间00jrzges1#
这是因为当你陷入第三种或第四种情况,
bi_search()
递归调用自己时,你忘记了考虑到调用最终会返回,流程会从那里继续下去。因为你在这些情况下错过了return
,Python跳出elif
,到达函数的结尾。因为函数中没有更多的代码要执行,Python退出该函数并将执行返回给调用者,但是由于调用者期望从它调用的函数中得到一些东西(返回值),我们遇到了一个问题。Python解决了这个问题,它使用None
来仍然返回一些它实际上没有的东西,同时也表明它没有更好的东西可以给予。您的程式码应该如下所示:
然后输出如预期:
xuo3flqw2#
你没有return语句中的最后2
elif
,你要递归调用返回的值