【问题标题】:Binary string search in Python 3.xPython 3.x 中的二进制字符串搜索
【发布时间】:2013-11-22 15:47:07
【问题描述】:

我无法让这种二进制排序工作。我在lower_bound 和其他地方遇到语法错误。我知道这很明显,但我正处于办公桌的转折点。有人可以帮我让它清晰运行吗,我知道这是基本的东西,但我对此很陌生。

def main():
    sortNames()
    binarySearch()


def sortNames():
    global names
    names = ["Chris Rich", "Ava Fischer",  "Bob White", "Danielle Porter", "Gordon Pike", "Hannah Beauregard", "Matt Hoyle", "Ross Harrison", "Sasha Ricci", "Xavier Adams"]
    names.sort()


def binarySearch():
    global names, found, nameSearch, lower_bound, middle_pos, upper_bound
    nameSearch = string(input("What name are you looking for?")
    lower_bound = 0
    upper_bound = len(names)-1
    found = False
    while lower_bound <= upper_bound and not found:
        middle_pos = (lower_bound+upper_bound) // 2
        if name_list[middle_pos] < nameSearch:
            lower_bound = middle_pos + 1
        elif name_list[middle_pos] > nameSearch:
            upper_bound = middle_pos - 1
        else:
            found = True

    if found:
        print("The name is at position", middle_pos)
    else:
        print("The name was not in the list.")                               


main()

【问题讨论】:

    标签: python sorting python-3.x binary-search


    【解决方案1】:

    您忘记在前面的行中添加最后一个右括号:

    nameSearch = string(input("What name are you looking for?")
    #               1--^  2--^                             2--^ 
    

    另外,您没有定义函数string()。不是说需要,input() 返回一个字符串已经

    在那之后,我看到name_list 的错误,但大概您在此处发布的代码之外定义了该列表。

    【讨论】:

    • 该死的疼。但现在我让它工作了,我知道这很简单
    【解决方案2】:
    names = ["Chris Rich", "Ava Fischer",  "Bob White",\
             "Danielle Porter", "Gordon Pike", "Hannah Beauregard",\
             "Matt Hoyle", "Ross Harrison", "Sasha Ricci", "Xavier Adams"]
    
    def sortNames():
        global names
        names.sort()
    
    def binarySearch():
        global names, found, nameSearch, lower_bound, middle_pos, upper_bound
    
        nameSearch = raw_input("What name are you looking for?")
        lower_bound = 0
        upper_bound = len(names)-1
        found = False
        while lower_bound <= upper_bound and not found:
            middle_pos = (lower_bound+upper_bound) // 2
            if names[middle_pos] < nameSearch:
                lower_bound = middle_pos + 1
            elif names[middle_pos] > nameSearch:
                upper_bound = middle_pos - 1
            else:
                found = True
        if found:
            print("The name is at position", middle_pos)
        else:
            print("The name was not in the list.")                           
    
    def main():
            sortNames()
            binarySearch()
    
    
    if __name__ == "__main__":
        main()
    

    输出

    anukalp@anukalp-Latitude-E6400:~$ python del1.py
    What name are you looking for?Ross Harrison
    ('The name is at position', 7)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-19
      • 2020-09-27
      • 1970-01-01
      • 2023-03-24
      • 2017-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多