2013-04-07 52 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. *