我有一个产生错误的 python 3.x 程序:
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()
错误是:
TypeError: list indices must be integers, not float
我无法理解此错误消息的含义。
原文由 Dahaka 发布,翻译遵循 CC BY-SA 4.0 许可协议
看起来您正在使用 Python 3.x。 Python 3.x 的重要区别之一是处理除法的方式。当您执行
x / y
时,在 Python 2.x 中返回一个整数,因为小数点被截断(除法)。但是在 3.x 中,/
运算符执行“真”除法,导致float
而不是整数(例如1 / 2 = 0.5
)。这意味着您现在正尝试使用浮点数来引用列表中的位置(例如my_list[0.5]
甚至my_list[1.0]
),这将不起作用,因为 Python 需要一个整数.因此,您可能首先想尝试使用middle = (first + last) // 2
,进行调整以便结果返回您期望的结果。//
表示 Python 3.x 中的楼层划分。