TypeError: list indices must be integers or slices, not float in Python
Hello you guys, I am a newbie in Python and I'm also studying more about Python.
I have a small assignment, I write a small project help me find some user existed in an array, I want to apply binary search algorithm to help me search faster. Like this:
position = 0 def main(): names = ['A Name', 'B Name', 'C meah', 'D Name', 'E Name', 'G Name', 'M Fullname', 'Ross Name', 'Sasha Name', 'Xavier Name'] entered = input('Enter name to search:') binary_search(names, entered) if position == -1: print("Name entered is not found.") else: print(entered, " is part of the list and is number ", position, " on the list.") input('Press<enter>') def binary_search(names, entered): first = 0 last = len(names) - 1 position = -1 found = False while not found and first <= last: middle = (first + last) / 2 if names[middle] == entered: found = True position = middle elif names[middle] > entered: last = middle - 1 else: first = middle + 1 return position main()
But I get an exception TypeError: list indices must be integers or slices, not float when I run code above.
Enter name to search:A Name Traceback (most recent call last): File "main.py", line 35, in <module> main() File "main.py", line 8, in main binary_search(names, entered) File "main.py", line 25, in binary_search if names[middle] == entered: TypeError: list indices must be integers or slices, not float
And I am using python 3.8.2
Anyone can explain it to me? How can I solve it?
Thanks for any response.
Yusuf Bashir Sep 07 2021
This error throw is related to set an index to get an item from an array.
You need to change the line code below:
middle = (first + last) / 2
middle = int((first + last) / 2)
And it resolved for you.