我有一个二进制搜索来搜索用户输入的电子邮件列表。然而,当用户输入的电子邮件未在列表中找到时,我希望用户能够输入另一个时间。但是我不知道如何将它再次返回到while循环的开头。 这是我的代码:
def BubbleSort(logindata):
NoSwaps = 1
N = len(logindata)
logindata = list(logindata)
while NoSwaps == 1:
Count = 1
NoSwaps = 0
for Count in range(N-1):
if logindata[Count] > logindata[Count+1]:
temp = logindata[Count]
logindata[Count] = logindata[Count+1]
logindata[Count+1]=temp
NoSwaps=1
return tuple(logindata)
def BinarySearch(logindata,email):
First=0
Last=len(logindata)-1
ItemFound = False
SearchFailed = False
while ItemFound == False or SearchFailed == False:
Midpoint = (First + Last) // 2
if logindata[Midpoint][0] == email:
ItemFound = True
print("Email Found")
break
elif logindata[Midpoint][0] > email:
Last = Midpoint - 1
print("Not Found")
else:
First = Midpoint + 1
print("Not Found")
return False
if __name__ == "__main__":
logindata=["tom@gmail.com","Password1"],["harry@gmail.com","Password2"],["jake@gmail.com","Password3"]
logindata=BubbleSort(logindata)
print(logindata)
email=input("Enter username")
BinarySearch(logindata,email)
答案 0 :(得分:0)
只需在另一个循环中添加您需要重复的部分:
email=input("Enter username")
BinarySearch(logindata,email)
为:
while True:
email=input("Enter username")
res = BinarySearch(logindata,email)
if res:
break
print("Done")
并使用BinarySearch
函数的返回值。
您还需要更改BinarySearch
的实现以返回适当的值。此外,您的情况有问题,二分查找在First <= Last
结束时,您可以删除您正在使用的其他标记:
def BinarySearch(logindata,email):
First=0
Last=len(logindata)-1
while First <= Last:
Midpoint = (First + Last) // 2
if logindata[Midpoint][0] == email:
print("Email Found")
return True
elif logindata[Midpoint][0] > email:
Last = Midpoint - 1
else:
First = Midpoint + 1
print("Not found")
return False
当执行其中一个else子句时,您不应该打印Not Found
,因为搜索没有被重新启动,所以尚未找到 。在退出while
BinarySearch
循环后,最后将其打印出来。