Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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_Loops_Binary Search - Fatal编程技术网

Python二进制搜索

Python二进制搜索,python,loops,binary-search,Python,Loops,Binary Search,我是一个初学者程序员,我想在没有任何帮助的情况下从头开始制作自己的二进制搜索算法。可以肯定地说,事情进展得不顺利。我希望有人能找到我代码中的错误。我修复了一些问题,但现在我遇到了这样的问题:如果找不到大于中间索引的值,那么当它达到一个不等于目标值的值时,它就不会结束 import random userInput = 100 numbers = [] for i in range(100): numbers.append(random.randint(0, 100)) #A

我是一个初学者程序员,我想在没有任何帮助的情况下从头开始制作自己的二进制搜索算法。可以肯定地说,事情进展得不顺利。我希望有人能找到我代码中的错误。我修复了一些问题,但现在我遇到了这样的问题:如果找不到大于中间索引的值,那么当它达到一个不等于目标值的值时,它就不会结束

    import random

userInput = 100
numbers = []

for i in range(100):
    numbers.append(random.randint(0, 100))

#Adding 100 to use as a test
numbers.append(100)
numbers.sort()
print(numbers)

def binarySearch(list, target):
    midIndex = int(len(list)/2)
    midValue = list[midIndex]

    if midValue == target:
        print("We found " + str(target))

    elif target > midValue:
        newList = numbers[midIndex:]
        binarySearch(newList, target)

    elif target < midValue:
        newList = numbers[:midIndex]
        binarySearch(newList, target)

    elif len(list) == 1 and list[0] != target:
        print(target + " is not in the list")

    else:
        print("It's not in the list")

binarySearch(numbers, userInput)
随机导入
用户输入=100
数字=[]
对于范围(100)内的i:
数字.append(random.randint(01100))
#添加100以用作测试
数字。追加(100)
number.sort()
打印(数字)
def二进制搜索(列表,目标):
midIndex=int(列(列表)/2)
中值=列表[midIndex]
如果中值==目标:
打印(“我们发现”+str(目标))
elif目标>中值:
新列表=数字[midIndex:]
二进制搜索(新列表,目标)
elif目标<中值:
newList=数字[:midIndex]
二进制搜索(新列表,目标)
elif len(list)==1,list[0]!=目标:
打印(目标+“不在列表中”)
其他:
打印(“不在列表中”)
二进制搜索(数字、用户输入)

您的代码有两个主要问题:

  • mid
    用于表示索引和值
  • 永远不会到达
    binarySearch()
    的结尾
  • 问题#1:
    mid
    使用
    list
    的一部分创建
    newList
    时,使用
    mid
    作为索引:

    elif target > mid:
        newList = numbers[mid:]
    
    但是,
    mid
    不是索引。<代码>列表 >中的值:

    mid = list[int(len(list)/2)]
    
    尝试使用两个变量:

    midIndex = int(len(list)/2)
    midValue = list[midIndex]
    
    问题2:
    binarySearch()
    binarySearch()
    永远不会到达最后的
    elif
    ,以查看
    target
    是否不在列表中

    只有在检查以下条件后,才能达到最终的
    elif

    if midValue == target:
        ...
    elif target > midValue:
        ...
    elif target < midValue:
        ...
    

    要解决此问题,请尝试重新排列
    if
    语句,以便
    binarySearch()
    到达代码的这一部分。

    什么是错误,什么不起作用?另一方面,变量和函数名应遵循带有下划线的
    小写形式。“递归错误:超过最大递归深度”这是经常出现的错误。下一个答案可能会解决所有问题。如果您手头有更好的调试器,请尝试记录日志,以了解代码在关键时刻正在做什么,这样您就可以一步一步地了解正在发生的事情。。。也可以尝试使用少于100的数字来获得更好的概览谢谢你的帮助,但现在我遇到了一个问题,如果找不到大于中间索引的值,当它达到一个不等于目标值的值时,它不会结束。@03Wolf我更新了我的答案,包括如何解决第二个问题的解释。
    
    elif len(list) == 1 and list[0] != target:
        ...