TypeError: list indices must be integers, not float
binary-search, list, python-3.x, typeerror
Solution
It looks like you are using Python 3.x. One of the important differences in Python 3.x is the way division is handled. When you do `x / y`, an integer is returned in Python 2.x because the decimal is truncated (floor division). However in 3.x, the `/` operator performs 'true' division, resulting in a `float` instead of an integer (e.g. `1 / 2 = 0.5`). What this means is that your are now trying to use a float to reference a position in a list (e.g. `my_list[0.5]` or even `my_list[1.0]`), which will not work as Python is expecting an integer. Therefore you may first want to try using `middle = (first + last) // 2`, adjusting so that the result returns what you expect. The `//` indicates floor division in Python 3.x.
Problem
I have a python 3.x program that is producing an error: ``` def main(): names = ['Ava Fischer', 'Bob White', 'Chris Rich', 'Danielle Porter', 'Gordon Pike', 'Hannah Beauregard', 'Matt Hoyle', 'Ross Harrison', 'Sasha Ricci', 'Xavier Adams'] entered = input('Enter the name of whom you would you like to search for:') binary_search(names, entered) if position == -1: print("Sorry the name entered is not part of the list.") 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() ``` Error is: ``` TypeError: list indices must be integers, not float ``` I am having trouble understanding what this error message means.