2017-01-07 34 views
1

我有一个二进制搜索来搜索用户输入中的电子邮件列表。但是,当用户输入电子邮件没有在列表中找到我希望用户能够输入另一个时间。但是我不知道如何将它返回到while循环的开始。 这里是我的代码:返回二进制搜索中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=["[email protected]","Password1"],["[email protected]","Password2"],["[email protected]","Password3"] 
    logindata=BubbleSort(logindata) 
    print(logindata) 
    email=input("Enter username") 
    BinarySearch(logindata,email) 

回答

0

只需添加你需要在另一个while循环重复部分:

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已退出后,打印出最终的结果。