python返回none而不是True/False
我有两个在Python中使用二进制搜索的程序 方案1:python返回none而不是True/False,python,binary-search,Python,Binary Search,我有两个在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(a
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))
方案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))
为什么在你的程序1中,只有当列表是空的或者你在列表中间搜索的值时,它才会返回布尔值,这是因为你明确地说<代码>返回< /代码>如果<代码> LeN(Advult:= 0)< /C>和<代码>当它满足<代码>时返回true <代码>(如果[Strut[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
def箱(列表,x):
如果len(alist)==0:
返回错误
其他:
mid=len(alist)//2
如果(alist[mid]==x):
返回真值
其他:
如果[mid]返回
其他:
#打印(列表[:中间],x)
bin(alist[:mid],x)#-->返回
当您递归调用
bin()
方法并期望一个布尔值时,必须在上面突出显示的行中添加return 几天前我回答了同样的问题!一定是来自同一本教科书!您的程序中有return
,2return
只返回调用堆栈上一级的值。如果要向上发送多个函数调用的值,则每个函数都需要显式返回值。
False
True
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