2015-03-05 3 views
0

Я пытался вызвать значение, выходящее за пределы функции, но возникла ошибка. Это часть коды:Внешняя функция ссылочной переменной

for element in initial_valid_pos: 
    i = 0 
    g = 1 
    z = -1 

    def loop(): 

     for element2 in valid_pos[1 + i]: 

      if int(element) == (int(element2) + z): 
       print(element) 
      if int(element) == (int(element2) + g): 
       print(element) 
      else: 
       pass 
     i = i + 1 
     z = z - 1 
     g = g + 1 
     loop() 

Как вы можете видеть, первое значение дает 0 до I и так далее, тогда я начинаю цикл внутри, и в то время как внутри цикла я хотел бы, чтобы увеличить значение от i, z, g.

UnboundLocalError: local variable 'i' referenced before assignment 
+1

Вы определение фикции внутри 'for' цикла? Звучит безумно! :) Выньте это из цикла и передайте эти переменные в качестве параметров. – SukkoPera

+0

Мне нужно написать программу, которая найдет путь выхода из случайного лабиринта. Предоставляя действительную начальную позицию, это был единственный способ получить правильный путь выхода. Но возможно я делаю это неправильно – BioShock

+0

Пожалуйста, напишите рабочий код. Не существует 'valid_pos' и для' loop() 'для выполнения, вызов' loop() 'должен быть деиндексирован. – mhawke

ответ

1

Прежде всего, обратите внимание, что Python в значительной степени полагается на отступ. Наверное, вы это знаете, но тогда вы, кажется, определили функцию в первом цикле for, который звучит мне пугающе, по крайней мере, (я даже не знаю, разрешено ли это).

В любом случае вы, кажется, не нужно, что в вашем примере, так что просто deindent определение функции и передать эти переменные в качестве параметров, таких как:

def loop(): 
    for element2 in valid_pos[1 + i]: 
     if int(element) == (int(element2) + z): 
      print(element) 
     if int(element) == (int(element2) + g): 
      print(element) 
     else: 
      pass 
     loop(i + 1, g + 1, z - 1) 

for element in initial_valid_pos: 
    loop (0, 1, -1) 

Я не гарантирую, что код работает ожидаемый, хотя, все же это не имеет большого смысла для меня.

0

Заменить:

def loop(): 

    for element2 in valid_pos[1 + i]: 

с:

def loop(): 
    global i, g, z 
    for element2 in valid_pos[1 + i]: 
Смежные вопросы