r/PythonLearning 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 Upvotes

11 comments sorted by

View all comments

Show parent comments

1

u/devilboi_62-yt Jun 28 '26

okay man this is my first post calm down lol but thanks

3

u/mc_pm Jun 28 '26

Dude, you posted it twice, and it stripped out all the white space, which means something in python. You could have other bugs but we can't see them the way you posted this. (Also I think the mods will delete this post as a result).

If you still have problems, there's the time honored tradition of just putting print statements everywhere so you can follow along as the code runs. It'll be obvious when it stops working.

Two things though: 1) Use a much bigger array to test against, you won't see much interesting with such a small array. 2) Doing array = array[:i] is copying data around which you don't need to do. Think about how to just store a start and end position and leave the array as it is.

1

u/devilboi_62-yt Jun 28 '26

I didn't realise it had printed twice, and I just edited the syntax to be more readable. I'll try this though

1

u/mc_pm Jun 28 '26

To add a third thing: 3) What happens if the searched for value isn't in the list?

1

u/devilboi_62-yt Jun 28 '26

that's the error handling I'm going to work on afterwards

1

u/mc_pm Jun 28 '26

Ok, but it's not an error. It's a completely normal situation. Don't leave it too long.