Python 为什么我的逻辑不适用于二进制搜索程序?

Python 为什么我的逻辑不适用于二进制搜索程序?,python,while-loop,binary-search,Python,While Loop,Binary Search,我正在尝试使用Python创建我的二进制搜索程序。但每次我在循环过程中遇到的问题时。看起来我需要为每种情况设置break。但这会把我的逻辑搞得一团糟 请帮助我,如何摆脱这种情况: print("Enter your number of elements:") num = int(input()) array = [] print("Enter your %d elements" %num) for c in range(0, num): arrayNum = int(input())

我正在尝试使用Python创建我的
二进制搜索
程序。但每次我在循环过程中遇到
的问题时
。看起来我需要为每种情况设置
break
。但这会把我的逻辑搞得一团糟

请帮助我,如何摆脱这种情况:

print("Enter your number of elements:")
num = int(input())

array = []

print("Enter your %d elements" %num)
for c in range(0, num):
    arrayNum = int(input())

    #Use "append" concept under array into python.
    array.append(arrayNum)

print("Enter a value which you want to find: ")
search = int(input())

first = int(0)

last = int(num-1)

middle = int((first + last)/2)

while first <= last:
    if array[middle] < search:
        first = int(middle+1)

    elif array[middle] == search:
        break
        print("%d is found at location" % search, (middle+1))

    else:
        last = int(middle-1)
        middle = int((first+last)/2)

if first > last:
    print("%d is not present in list"%search)
print(“输入元素数:”)
num=int(输入())
数组=[]
打印(“输入%d个元素”%num)
对于范围(0,num)中的c:
arrayNum=int(输入())
#在python中使用数组下的“append”概念。
array.append(arrayNum)
打印(“输入要查找的值:”)
search=int(输入())
first=int(0)
last=int(num-1)
中间=整数((第一个+最后一个)/2)
而最后:
打印(“%d”不在列表“%search”中)
当我运行我的程序时,它看起来
,而loop
仍在运行。请帮帮我


谢谢你的帮助

三个潜在问题-

  • 二进制搜索仅适用于排序列表,您可能无法输入排序列表。要确保列表在开始二进制搜索之前已排序,请执行以下操作-

    array.sort()
    
    在开始二进制搜索while循环之前执行此操作

  • 您的print语句在中断之后,您应该将它放在中断之前,否则它将无法执行

  • 您对
    middle
    的重新计算在
    else
    块内,但是对于
    array[middle]
    的情况,您也需要重新计算middle,更好的解决方案是将重新计算放在else块外,直接放在
    while
    块内

  • 示例-

    while first <= last:
        if array[middle] < search:
            first = int(middle+1)
        elif array[middle] == search:
            print("%d is found at location" % search, (middle+1))
            break
        else:
            last = int(middle-1)
        middle = int((first+last)/2)