2017-01-05 9 views
0

私は、電子メールの入力を与えられたユーザからリストを検索するバイナリ検索を行っています。私はエラーもなく、出力も出ません。どこが間違っているのか分かりません。あなたは文字列でリストを比較バイナリ検索が正常に動作しない

if logindata[Midpoint] == ItemSought: 

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,ItemSought): 
    First=0 
    Last=len(logindata)-1 
    ItemFound = False 
    SearchFailed = False 
    while ItemFound == False or SearchFailed == False: 
     Midpoint = (First + Last) // 2 
     if logindata[Midpoint] == ItemSought: 
      print("Item Found") 
      ItemFound = True 
      print("Item Found") 
      break 

     elif logindata[Midpoint][0] > ItemSought: 
      Last = Midpoint - 1 

     else: 
      First = Midpoint + 1 


if __name__ == "__main__": 
    logindata=["[email protected]","Password1"],["[email protected]","Password2"],["[email protected]","Password3"] 
    logindata=BubbleSort(logindata) 
    print(logindata) 
    ItemSought=input("Enter username") 
    BinarySearch(logindata,ItemSought) 
+2

ハ、構文ハイライトはすべて混乱しています..クラス!クラス全部! – wim

+0

もう1つのヒント:最初と最後のインデックスを使用せず、最初のペアと1つ前のペアを使用します。だからLast = len(logindata) - 1はLast = len(logindata)になります。これは、多くの制限ケースを単純化します(空の入力のように、あなたのコードではこれを処理できません)。 –

答えて

2

。だから私はあなたが必要と思います

if logindata[Midpoint][0] == ItemSought: 
0

あなたは決して検索を終了しません。項目がリストにない場合は、安定した中間点と無限ループになります。あなたがそのアイテムを見つけたら、で無限にループします。それはです(Yehvenの答えを参照)。

私はあなたがここで見るの追加とそれをトレースさ:あなたはを変更しないことを

SearchFailed = False 
iter = 0 
while iter < 10 and (ItemFound == False or SearchFailed == False): 
    iter += 1 
    Midpoint = (First + Last) // 2 
    print (First, Midpoint, Last, ItemSought) 
    if logindata[Midpoint] == ItemSought: 

をSearchFailed。たとえば、 "harry"を検索すると、ループはFirst、Middle、Lastの(0、-1、-2)の安定した無限ポイントに当たる。

あなたはそれを自分で修正できるヒントで十分ですか?

関連する問題