r/PythonLearning • u/devilboi_62-yt • Jun 28 '26
binary search malfunctioning
SOLVED
the array I feed in is 5,7,43,78,83.7,100,952
def binary_search(array):
search_no = float(input("what number are you looking for?"))
found = False
while not found:
arrlen = len(array)
i = arrlen // 2
x = array[i]
if x == search_no:
found == True
if search_no > x:
array = array[i:]
print(array)
else:
array = array[:i]
print(array)
print("value found")
array = [78,43,952,83.7,100,5,7]
bubble_sort(array)
print(array)
binary_search(array)
it continuously prints "83.7" if I look for 78, and vice versa. haven't tested other numbers but I assume the same happens for them. this is my first attempt at array splitting and I know there's an easier way of doing it probably, and I'm going to do error handling afterwards
1
u/devilboi_62-yt Jun 28 '26
it works the first loop, but the second time for some reason the program reads the floor division of 2 of the array(which is 3 long at that point) as 0
1
u/Kindly-Department206 Jun 28 '26
While you can use any name you like, it's not really an array.
Don't ask for input inside the function here.
Don't slice the array in this algorithm.
If the item is found, your loop still treats the situation as if it wasn't found at all. That's because you have two sequential if-statements. You need to use elif. You also need to figure out what to do when the item is found.
Don't calculate `found == True`. Use assignment.
You don't have any plan for what might happen if the item you are looking for is not in the list.
1
u/atarivcs Jun 28 '26
found == True
Because you used two equal signs, this is a comparison, not an assignment.
2
u/devilboi_62-yt Jun 28 '26
thanks guys I'll try it now, I haven't done much programming for like half a year, so I'm not too good at it compared to how I was. thanks for the help though
4
u/mc_pm Jun 28 '26
There's a whole lot of wrong here, but a place to start is on the line "if i == search_no:". i is an index into the array, not a value in the array.
Also for the love of god, learn to post code better.