2012-07-05 120 views
-2

嗨,我用一個非常簡單的Python程序來實現二進制搜索。python中的二進制搜索程序錯誤

tup=input("enter tup:") 
start=0 
length=len[tup] 
end=tup[length-1] 
mid=(int(start)+int(end))/2 
key=input("enter value to search") 
def search(start,end,key): 
    if key==tup[mid] 
    print mid 
    else if key<tup[mid] 
    search(start,mid,key) 
    else if key>tup[mid] 
    search(mid,end,key) 
    else 
    return(-1) 

我得到一個錯誤的

File "binsearch.py", line 8 
if key==tup[mid] 
      ^

語法錯誤:無效的語法

我相信我爲失去了一些東西微不足道,但無法弄清楚!如果你覺得還有其他錯誤,請告訴我。謝謝:)

+0

功能搜索似乎在不同的分支中做不同的事情。如果找到了,它用C語言打印作爲「void函數」的索引,而在最後一種情況下,返回的東西像「int函數」一樣返回。乾淨的解決方案是在if分支中返回中間(將打印轉移到調用者),但返回也必須添加到遞歸調用中。 – guidot 2012-07-05 12:18:39

回答

3
  • 需要以結束開始一個新的塊以:所有語句(即在那裏你增加下一行縮進級別的陳述)
  • 您需要elif X:
  • 更換else if X您應該使用raw_input代替input爲任何用戶輸入後者eval秒。
  • return是一個語句,而不是一個函數,所以你不需要圍繞返回值()
+1

'input'是Python 3的正確函數,Python 2的'raw_input'。 – cdarke 2012-07-05 12:12:36

5
if key==tup[mid] 
       ^

末需要:在語句的其餘部分

    | 
       v 
if key==tup[mid]: 

同樣的問題:

else if key<tup[mid] 
        ^
    search(start,mid,key) 
    else if key>tup[mid] 
        ^

除了

而不是else if考慮使用Python的整潔elif構建體,例如,

elif key<tup[mid]: