2017-01-07 33 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已退出後,打印出最終的結果。