在python中进行二进制搜索,输出已检查的值

时间:2018-12-04 12:28:36

标签: python python-3.x

我目前正在从事一个项目,该项目要求我输出在二进制搜索过程中检查的每个值。 例如,如果输入是3,1,51,则将输出3,然后输出1。如果在列表中找到,则将输出yes,否则输出no。 另一个示例是,如果用户输入3,1,56,则将输出3,然后输出5No 这就是我现在所拥有的。

def BinSearch (item,candidates):

    if len(candidates)>0:
        mid = len(candidates)//2

        if item == candidates[mid]:
            print (item)
        if item < candidates[mid]:
            print (candidates[mid])       
            BinSearch([item,candidates[:mid-1]])
        else:
            print (candidates[mid])
            BinSearch(item,candidates[mid+1:])


haystack = []
for item in input().split(','):
    haystack.append(int(item))
haystack.sort()

needles = []
for item in input().split(','):
    needles.append(int(item))


for needle in needles:
    BinSearch(needle,haystack)

运行上面的代码, 对于输入3,1,51,我的代码仅输出3 Yes,而不输出3 1 Yes

1 个答案:

答案 0 :(得分:2)

BinSearch([item,candidates[:mid-1]])应该是BinSearch(item,candidates[:mid-1])

顺便说一句,您应该特别注意发生错误时获得的堆栈跟踪。它会告诉您确切的问题发生在哪一行代码中,并且在那里您应该能够确定错误地传递了参数