Переменные в процедуре не используются

def poisk(ar, x, y, u):
  c = 0
  for i in range(0, 3):
    for j in range(0, 3):
          if ar[i][j] == u:
              c = c + 1
    if c == 2:
      for j in range(0, 3):
        if ar[i][j] == 0:
          x = i
          y = j
  c = 0
  for j in range(0, 3):
    for i in range(0, 3):
      if ar[i][j] == u:
        c += 1
      if c == 2:
        for i in range(0, 3):
          if ar[i][j] == 0:
             x = i
             y = j
  c = 0
  for j in range(0, 3):
    for i in range(0, 3):
      if ar[i][j] == u and i == j:
        c += 1
  if c == 2:
    for i in range(0, 3):
      for j in range(0, 3):
          if ar[i][j] == 0 and i == j:
            x = i
            y = j
  c = 0
  for j in range(0, 3):
    for i in range(0, 3):
      if ar[i][j] == u and i + j == 2:
        c += 1
  if c == 2:
    for i in range(0, 3):
      for j in range(0, 3):
        if ar[i][j] == 0 and i + j == 2:
          x = i
          y = j

в этой процедуре выводяться изначальные значения , которые почему-то никак не изменяются poisk(arr, xN, yN, 2) выше пример вызова


Ответы (1 шт):

Автор решения: Xander

Когда вы передаёте значение в функцию, оно сохраняется в локальную переменную внутри функции.

Поэтому если вы напишете

x = 0

def foo(x):
    x = 5

foo(x)
print(x)

То выведется всё-равно 0. То есть функция - как Лас-Вегас. Всё, что в ней произошло, в ней и остаётся. По научному это называется "локальная область видимости".

Чтобы посчитанное внутри функции как-то получить, нужно использовать ключевое слово return:

x = 0

def foo(x):
    x = 5
    return x

x = foo(x)
print(x)

Этот код выведет уже 5.

return можно использовать и для того, чтобы вернуть из функции несколько значений:

x = 0
y = 0

def foo(x, y):
    x = 5
    y = 7
    return x, y

x, y = foo(x, y)
print(x, y)

Этот код выведет 5 7

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

Поэтому у вас определение функции должно выглядеть так:

def poisk(ar, u):  # Без x и y

внутри функции у вас где-то должно быть

return x, y

а вызывать вашу функцию нужно как-то так:

xN, yN = poisk(arr, 2)
→ Ссылка