Python 使用二进制搜索和用户输入
我试图找出如何在已经排序的列表上使用二进制搜索,这样我就可以让用户搜索用户输入的名称,并让它显示名称(如果有)或告诉用户名称(如果没有) 我不能使用内置的排序函数 我使用气泡搜索设置对用户输入的姓名列表进行排序,其代码如下:Python 使用二进制搜索和用户输入,python,binary-search,Python,Binary Search,我试图找出如何在已经排序的列表上使用二进制搜索,这样我就可以让用户搜索用户输入的名称,并让它显示名称(如果有)或告诉用户名称(如果没有) 我不能使用内置的排序函数 我使用气泡搜索设置对用户输入的姓名列表进行排序,其代码如下: def names(): members = [] done = False while done != True: mem = input("Enter a name, enter 'done' when finished: ")
def names():
members = []
done = False
while done != True:
mem = input("Enter a name, enter 'done' when finished: ")
if mem == "done":
done = True
else:
members.append(mem)
print(members)
index = len(members) - 1
sort = False
while not sort:
sort = True
for j in range(0, index):
if members[j] > members[j + 1]:
sort = False
members[j], members[j + 1] = members[j + 1], members[j]
#Here is the output for the first code:
Enter a name, enter 'done' when finished: Bob
['Bob']
Enter a name, enter 'done' when finished: George
['Bob', 'George']
Enter a name, enter 'done' when finished: Mike
['Bob', 'George', 'Mike']
Enter a name, enter 'done' when finished: Zed
['Bob', 'George', 'Mike', 'Zed']
Enter a name, enter 'done' when finished: Vorp
['Bob', 'George', 'Mike', 'Zed', 'Vorp']
Enter a name, enter 'done' when finished: done
['Bob', 'George', 'Mike', 'Vorp', 'Zed']
我创建了另一个用于搜索排序列表的函数,这就是我遇到的问题。我尝试将排序后的列表放入我的main()
函数中,但它没有打印任何内容
def main(members):
name_search = input("Please enter the name you're looking for: ")
print(name_search)
begin_index = 0
end_index = len(members) -1
while begin_index <= end_index:
midpoint = begin_index + (end_index - begin_index) // 2
midpoint_value = members[midpoint]
if midpoint_value == members:
return midpoint
elif members < midpoint_value:
end_index = midpoint - 1
else:
begin_index = midpoint + 1
print(members)
return None
names()
def main(成员):
name\u search=input(“请输入您要查找的名称:”)
打印(名称搜索)
开始索引=0
end_index=len(成员)-1
begin_index基本上与常规二进制搜索的算法相同,只需将数字列表替换为名称列表:
def binary(lst, sml, bg, x):
if bg >= sml:
mid = (bg + sml) // 2
if lst[mid] == x:
return mid
elif lst[mid] > x:
return binary(lst, sml, mid - 1, x)
else:
return binary(lst, mid + 1, bg, x)
else:
return -1
lst = ['Bob', 'George', 'Mike', 'Vorp', 'Zed']
x = input('Input the name: ')
index = binary(lst, 0, len(lst)-1, x)
if index != -1:
print(index)
else:
print("Not in list.")
输入:
Input the name: Mike
输出:
2
您正在将中点\u值
与整个列表进行比较,而不是名称\u搜索
。试试这个:
if midpoint_value == name_search:
return midpoint
elif name_search < midpoint_value:
end_index = midpoint - 1
else:
begin_index = midpoint + 1
如果中点\u值==名称\u搜索:
返回中点
elif名称搜索<中点搜索值:
结束指数=中点-1
其他:
开始索引=中点+1
此外,对于您将来的问题,请确保提供一个最小的可重复示例,例如:
def search(name_search, members):
begin_index = 0
end_index = len(members) -1
while begin_index <= end_index:
midpoint = begin_index + (end_index - begin_index) // 2
midpoint_value = members[midpoint]
if midpoint_value == name_search :
return midpoint
elif name_search < midpoint_value:
end_index = midpoint - 1
else:
begin_index = midpoint + 1
return None
members = ['Bob', 'George', 'Mike', 'Vorp', 'Zed']
name_search = 'George'
print(search(name_search, members))
def搜索(名称搜索,成员):
开始索引=0
end_index=len(成员)-1
在开始索引时,请提供一个。