В вашем коде есть много загадочных ошибок. Неправильный порядок определения (при условии, вам нужна функция search
, чтобы быть вложенными один) и уже наблюдается ошибка синтаксиса из пустого while
цикла, но есть больше ...:
def dfs(problem):
stack.push(bache)
search(root)
что bache
, что такое stack
, что такое root
? Если они все глобальные переменные, то вы злоупотребляете глобалами - и, по-видимому, нигде никогда не используете аргумент problem
(?!).
while stack.isEmpty() != 0:
что это странно выглядящий метод isEmpty
? IOW, какой тип stack
(явно не список Python, и это довольно странно, так как они делают отличные стеки LIFO; -) ...? И что-нибудь сделает его пустым ...?
def search(vertex):
closed.add(vertex)
... не говори мне: closed
является еще одним глобальным? Предположительно, набор? (Я помню из нескольких ваших Qs назад, что вы абсолютно хотели иметь closed
Dict, не установлен, хотя я предположил, что, как возможность ...
for index in sars:
... и что sars
?!
stack.push(index)
return stack
, что странное «петля» - один, который выполняет ровно один раз, изменяя глобальную переменную, а затем сразу же возвращается, что глобальная переменная, не делая какой-либо из других шагов через петлю (?).Даже если это именно то, что вы имеете в виду (нажмите первый элемент sars
, период) Я не рекомендую прятать его в псевдо-петле - это серьезно похоже на загадочную ошибку, которая просто ждет, чтобы случиться ;-).
Как указано ниже, вам нужно определение над вызовом, вот и все. Мне любопытно, что мешает вам писать эту функцию вне сферы действия вызывающего? –