Проблема с изменением переменных внешнего цикла во внутреннем цикле в Python ⇐ Python

Программы на Python
Anonymous
Проблема с изменением переменных внешнего цикла во внутреннем цикле в Python

Сообщение Anonymous »

У меня возникла проблема: внутренний цикл перезаписывает переменные во внешнем, особенно при работе со списком, представляющим доску для игры в крестики-нолики. Я хочу поместить «X» в каждую пустую позицию по одному, не изменяя уже измененную доску. Однако кажется, что внутренний цикл продолжает влиять на переменную внешнего цикла и переменные, которые что-то с ней имеют. (позиции и копии переменной)
Вот фрагмент моего кода:

Код: Выделить всё

def occurrences(s, lst):
return (i for i, e in enumerate(lst) if e == s)

positions = [[" ", " ", " ", " ", " ", " ", " ", " ", " "]]

for board in positions:
for i in range(board.count(" ")):

occ = list(occurrences(" ", board))[0]
board[occ] = "X"
print(board[0:3])
print(board[3:6])
print(board[6:])
print("---------------------")
Ожидаемый результат:

Код: Выделить всё

['X', ' ', ' ']
[' ', ' ', ' ']
[' ', ' ', ' ']
---------------------
[' ', 'X', ' ']
[' ', ' ', ' ']
[' ', ' ', ' ']
---------------------
[' ', ' ', 'X']
[' ', ' ', ' ']
[' ', ' ', ' ']
---------------------
...
Фактический результат:

Код: Выделить всё

['X', ' ', ' ']
[' ', ' ', ' ']
[' ', ' ', ' ']
---------------------
['X', 'X', ' ']
[' ', ' ', ' ']
[' ', ' ', ' ']
---------------------
['X', 'X', 'X']
[' ', ' ', ' ']
[' ', ' ', ' ']
---------------------
...
Вопрос:
Я ожидал, что в выводе будет показано, что «X» помещается в каждую пустую позицию один за другим, без изменения предыдущих размещений. Однако кажется, что каждая итерация внутреннего цикла влияет на переменную платы из внешнего цикла.
Я понимаю, что существуют разные способы решения этой проблемы, но мне хотелось бы знать почему Python ведет себя таким образом и как я могу предотвратить это.
Будем очень признательны за любые идеи и предложения!

Подробнее здесь: https://stackoverflow.com/questions/790 ... -in-python

Вернуться в «Python»