2012-07-05 51 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]: