【问题标题】:getting a NameError error with my recursive binary search method? [duplicate]我的递归二进制搜索方法出现 NameError 错误? [复制]
【发布时间】:2019-09-01 05:41:03
【问题描述】:

您好,我正在尝试编写递归二进制搜索,但遇到了 NameError。我的代码如下:

这是一个我在 python 中工作的自我开发项目。

    def search(self, list, list_start, list_end, search_for):
        if list_end >= list_start:

            mid_point = int(list_start + (list_end - list_start) / 2)

            if list[mid_point] == search_for:
                return mid_point

            elif list[mid_point] > search_for:
                return search(list, list_start, mid_point-1, search_for)

            else:
                return search(list, mid_point+1, list_end, search_for)

        else:
            return -1

binaryS = BinarySearchModel()
list = [22, 2, 1, 24, 3, 43, 10, 40, 0, 48, 34, 19, 5, 3, 45]
x = 24
sorted_list = binaryS.sort_arr(list)
print('Print sorted list {}'.format(sorted_list))
result = binaryS.search(sorted_list, 0, len(sorted_list)-1, x)

第二次递归调用是我得到错误的地方:

Traceback (most recent call last):
  File "binary_search_model.py", line 29, in <module>
    result = binaryS.search(sorted_list, 0, len(sorted_list)-1, x)
  File "binary_search_model.py", line 19, in search
    return search(list, mid_point+1, list_end, search_for)
NameError: name 'search' is not defined

【问题讨论】:

  • search 未定义,假设这是类定义的一部分(始终提供minimal reproducible example)。您必须使用self.search,或者更好的是,将其从无意义的类中移​​出并使用函数。

标签: python recursion search binary


【解决方案1】:

如果您从该类中调用属于某个类的方法,则需要使用 self

self.search(arguments)

在这种情况下,自我是binaryS

【讨论】:

  • 菜鸟错误感谢帮助
【解决方案2】:

看起来您的搜索功能在一个类中。您需要使用调用您的搜索功能 self.search(self, list, list_start, list_end, search_for)

【讨论】:

  • 感谢帮助谢谢
  • 没问题,您可以接受答案关闭问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-08-02
  • 2020-01-15
  • 1970-01-01
  • 1970-01-01
  • 2019-01-19
  • 2020-09-25
  • 2017-03-25
相关资源
最近更新 更多