【发布时间】:2018-11-19 12:59:57
【问题描述】:
我的列表中二进制搜索函数的代码对列表中的值返回 true,但对不在列表中的值返回 None(而不是 false)。
谁能解释一下我做错了什么?
程序是:
def searchlist(x,alist):
end=int(len(alist)-1)
mid=int(len(alist)/2)
while len(alist)>2:
if x==alist[mid] or x==alist[0] or x==alist[end] :
return("true")
break
elif x>alist[mid]:
alist=alist[mid:]
mid=int(len(alist)/2)
end=int(len(alist)-1)
elif x<alist[mid]:
alist=alist[:mid]
mid=int(len(alist)/2)
end=int(len(alist)-1)
else:
return("false")
aList=[2,3,5,7,9,12,14,23,34,45,67,89,101]
xnum=int(input("enter a number:"))
searchlist(xnum,aList)
print(searchlist(xnum,aList))
【问题讨论】:
-
在不深入代码的情况下,
alist将下降到 2 个值并结束while循环,导致它返回None。我建议在每个循环中打印出列表的当前状态,并手动运行您的代码以确定它在什么时候没有按预期工作。编辑:实际上,您的else语句似乎永远不会执行。将return False放在while 循环之后,它应该可以工作(我建议使用True和False而不是字符串)。 -
如果你想在列表中找不到你想要的东西时返回 false,你应该把 return false 放在循环之后,而不是在循环中
-
你的第二个
elif执行。如果删除此块,则返回('false')
标签: python binary-search