2013-04-07 50 views
-1

大家下午好, 我在嘗試整理已按字母順序排序的名稱。我無法弄清楚爲什麼我的程序無法正常工作。任何提示或指針會很好。謝謝。二進制搜索代碼不能正常工作

def main(): 
    names = ['Ava Fiscer', 'Bob White', 'Chris Rich', 'Danielle Porter', 'Gordon Pike', 'Hannah Beauregard', 'Matt Hoyle', 'Ross Harrison', 'Sasha Ricci', 'Xavier Adams'] 
    input('Please enter the name to be searched: ',) 
    binarySearch 
main() 
def binarySearch(names): 
    first = 0 
    last = len(names) - 1 
    position = -1 
    found = False 
    while not found and first <= last: 
     middle = (first + last)/2 
     if names[middle] == value: 
      found = True 
      position = middle 
     elif arr[middle] > value: 
      last = middle -1 
     else: 
      first = middle + 1 
    return position 
+0

使用Python輸出浮動,縮進是非常重要的。你能通過你發佈的代碼並檢查它的身份嗎?我不確定這是否正確。 – lmsteffan

+0

糟糕!這不是我在我的程序中所具有的。我只是用適當的縮進來編輯它。 –

回答

0

這是什麼意思,該程序不工作?它是語法錯誤還是錯誤結果中的問題?

隨着您粘貼代碼,有幾個缺口問題,但除此之外,線:

input('Please enter the name to be searched: ',) 
binarySearch 

也是語法不正確,逗號是多餘的,只出現就像是函數名是完全錯誤的。如果你對算法的正確性感興趣,那看起來沒問題,但邊界總是很棘手。如果你覺得它有幫助,我的代碼在工作,語法正確。 (名字是數字,但在這種情況下是不相關的)

names = [1,2,4,5,6,8,9] 

def bs(n): 
    start = 0 
    end = len(names) 
    while end - start > 0: 
     m = (start+end)/2 
     if names[m] == n: 
      return m 
     elif n < names[m]: 
      end = m 
     else: 
      start = m + 1 
    return -1 

print (bs(1)) 
print (bs(6)) 
print (bs(9)) 
print (bs(3)) 
print (bs(10)) 
print (bs(-8)) 

我想指出的另一件事是,這種二進制搜索已在Python標準庫中,bisect模塊。然而,如果你正在寫自己的練習或任何其他原因,那就好了。

+0

謝謝!基本上目標是創建一個調用二進制搜索函數的主函數,這是問題的一部分。我猜他們想要兩個模塊。 –

0

如果你使用Python 3 *,那麼你會想要改變 m = (start+end)/2m = (start+end)//2 當你做/ 2它3. *