Python 返回二进制搜索中while循环的开始
我有一个二进制搜索来搜索用户输入的电子邮件列表。但是,当用户输入的电子邮件在列表中找不到时,我希望用户能够输入其他时间。但是,我不知道如何再次将其返回到while循环的开始。 这是我的密码:Python 返回二进制搜索中while循环的开始,python,list,python-3.x,while-loop,binary-search,Python,List,Python 3.x,While Loop,Binary Search,我有一个二进制搜索来搜索用户输入的电子邮件列表。但是,当用户输入的电子邮件在列表中找不到时,我希望用户能够输入其他时间。但是,我不知道如何再次将其返回到while循环的开始。 这是我的密码: def BubbleSort(logindata): NoSwaps = 1 N = len(logindata) logindata = list(logindata) while NoSwaps == 1: Count = 1 NoSwaps = 0 for Count in r
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)
只需添加需要在另一个while循环中重复的零件:
email=input("Enter username")
BinarySearch(logindata,email)
致:
并使用BinarySearch
函数的返回值
您还需要更改
BinarySearch
的实现以返回适当的值。此外,您的条件有问题,二进制搜索在首次时结束,只需添加需要在另一个while循环中重复的部分:
email=input("Enter username")
BinarySearch(logindata,email)
致:
并使用BinarySearch
函数的返回值
您还需要更改BinarySearch
的实现以返回适当的值。此外,您的条件是错误的,二进制搜索将在第一次时结束
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