Python 奇怪的错误返回在某些情况下不起作用
所以我有一个奇怪的问题,这个问题应该很简单: 退货vs.打印 我在练习二进制搜索的编码Python 奇怪的错误返回在某些情况下不起作用,python,return,binary-search,Python,Return,Binary Search,所以我有一个奇怪的问题,这个问题应该很简单: 退货vs.打印 我在练习二进制搜索的编码 def binary_search(data, n): if len(data) == 0: return False x = (len(data))//2 if data[x] == n: #The following line seems to be the problem return x elif n < data[x]: binary_search(data[:
def binary_search(data, n):
if len(data) == 0:
return False
x = (len(data))//2
if data[x] == n:
#The following line seems to be the problem
return x
elif n < data[x]:
binary_search(data[:x], n)
else:
binary_search(data[x+1:], n)]
z = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
print(binary_search(z, 9))
这是回报
2
None
我知道二进制搜索本身是有效的(2是正确的答案),两个print语句中都没有“None”,但只有一个print语句
# CODE CODE CODE
return x
#CODE CODE CODE
print(binary_search(z, 9))
它只是不打印
知道为什么会这样吗?除非我要求,否则我不希望该方法自动打印
另一件奇怪的事是
#ORIG CODE
return False
#ORIG CODE
y = []
print(binary_search(y, 9))
返回
False
所以在这种情况下,“返回”的行为就像我期望的那样
我甚至试着将return x切换为return True,它仍然不返回任何值。代码的最后两个分支(
elif n
,else
)不返回任何值。@melpomene但这不是很好,因为他们再次调用函数,最终elif和else导致返回某些值?没关系。没有return
语句,因此它们隐式返回None
@melpomene谢谢!我将其切换为:return binary_search(data[:x],n),并修复了它。代码的最后两个分支(elif n
,else
)不返回任何内容。@melpomene但这不是很好,因为他们再次调用函数,最终会返回elif和else?没关系。没有return
语句,因此它们隐式返回None
@melpomene谢谢!我把它切换到:returnbinary_search(data[:x],n),这就解决了它
False