2017-01-07 10 views
1

ユーザ入力から電​​子メールのリストを検索するバイナリ検索があります。しかし、ユーザーが入力した電子メールがリストにない場合は、別の時間を入力することができます。しかし、私はそれをwhileループの始めに戻す方法を知らない。バイナリ検索でwhileループの先頭に戻る

email=input("Enter username") 
BinarySearch(logindata,email) 

へ:

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ループで繰り返す必要が一部追加します。 はここに私のコードです

while True: 
    email=input("Enter username") 
    res = BinarySearch(logindata,email) 
    if res: 
     break 
print("Done") 

との戻り値で作業をあなたのBinarySearch機能。

また、BinarySearchの実装を変更して適切な値を返す必要があります。また、あなたの状態が不良である、バイナリ検索があるときFirst <= Last終了し、あなたが使用している他のフラグドロップすることができます:else節のいずれかが実行されるたびにあなたがNot Foundを印刷すべきではない

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 

を、それがhasn まだの検索が再実行されていないため見つかりませんでした。 ループのBinarySearchが終了した後、最後にそれを印刷します。

関連する問題