Привет, я пытаюсь написать рекурсивный бинарный поиск, но получаю ошибку 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
Если вы вызываете метод, который является частью класса, из этого класса, вам нужно использовать self
self.search(arguments)
В этом случае я binaryS
ошибка новичка спасибо ценю помощь
Похоже, ваша функция поиска находится внутри класса. Вам нужно вызвать функцию поиска, используя
self.search(self, list, list_start, list_end, search_for)
ценю помощь спасибо
Нет проблем, вы можете принять ответ, чтобы закрыть вопрос.
search
не определен, при условии, что это часть определения класса (всегда указывайте минимальный воспроизводимый пример). Вы должны использоватьself.search
или, что еще лучше, переместить его из бессмысленного класса и просто использовать функцию.