我的代码无法正常工作,只能显示3个项目的正确结果,而不能显示第二个索引中的一项。我不会发表,但是我从CS的GCSE bitesize页面上给出的伪代码中删除,当我在python中转换时,它不起作用。https://www.bbc.co.uk/bitesize/guides/zm77xfr/revision/3
my_list=['arnold', 'matt', 'david', 'james']
found = False
search_item = input("type a name to find")
start_range = 0
end_range = len(my_list)
while found == False and start_range <= end_range:
mid = (start_range + end_range) //2
if search_item == my_list[mid]:
found == True
print("item found")
else:
if my_list[mid] >= search_item:
end_range = mid -1
else:
start_range = mid +1
if found == False:
print("item not found")
[当我运行上面的代码并键入'arnold'时,我得到一条'已找到项目'的消息,它无限打印,目前是可以的。但是,如果我输入列表中的第二项,在这种情况下为“哑光”,则会显示“找不到项目”消息显示
如果我输入'david'或'james',它也可以正常工作,因此它只是第二个索引中的项目。
我最初在python中转换了GCSE bitesize伪代码,但是它甚至没有用。我真的很困惑,我不清楚为什么它不起作用,但是感觉到它与索引甚至中间变量有关。有人可以指示我检查哪一部分
您这里有一些问题需要解决。首先,二进制搜索需要对列表进行排序,这样比较(即my_list[mid] >= search_item
)才有意义。接下来,您需要将found == True
更改为found = True
。您所拥有的只是一个比较,而不是将值设置为True
。
应该看起来像这样:
my_list=['arnold', 'matt', 'david', 'james']
found = False
search_item = input("type a name to find")
start_range = 0
end_range = len(my_list) - 1
# ADD THIS
my_list.sort()
while found == False and start_range <= end_range:
mid = (start_range + end_range) //2
if search_item == my_list[mid]:
# CHANGE THIS
found = True
print("item found")
else:
if my_list[mid] >= search_item:
end_range = mid -1
else:
start_range = mid +1
if found == False:
print("item not found")