Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 奇怪的错误返回在某些情况下不起作用_Python_Return_Binary Search - Fatal编程技术网

Python 奇怪的错误返回在某些情况下不起作用

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[:

所以我有一个奇怪的问题,这个问题应该很简单: 退货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[: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