Переменные в процедуре не используются
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 шт):
Когда вы передаёте значение в функцию, оно сохраняется в локальную переменную внутри функции.
Поэтому если вы напишете
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)