row_len = 5
col_len = 5
matrix = []
#Fills the matrix with #'s
def fill_maze():
row = []
for i in range(row_len):
row.append("#")
for i in range (col_len):
matrix.append(row)
# Draws the maze to the screen
def draw():
for i in range(col_len):
row = matrix[i]
a = ("")
for i in row:
a += i
print(a)
#Swaps out the character in the given coordinate with @
def dig(x, y):
row = matrix[y]
row[x] = "@"
matrix[y] = row
fill_maze()
dig(2, 3)
print("")
draw()
Я делаю текстовую игру-лабиринт, в которой персонаж должен пройти лабиринт, и лабиринт хранится в виде матрицы. В настоящее время у меня возникли проблемы с изменением частей лабиринта с помощью этой dig(x, y) функции.
Я думаю, что связал проблему с этой функцией:
def dig(x, y):
row = matrix[y]
row[x] = "@"
matrix[y] = row
Когда я запускаю программу, я ожидаю, что она выведет:
#####
#####
#####
##@##
#####
Но вместо этого выводит:
##@##
##@##
##@##
##@##
##@##
Я попробовал удалить эту часть функции: matrix[y] = row
Я также попробовал:
def dig(x, y):
matrix[x][y] = "@"
но это дало тот же результат.






Проблема не в том, как вы пытаетесь обновить матрицу, а в том, как вы ее инициализируете — у вас есть одно и то же row несколько раз, поэтому, когда вы думаете, что обновляете одну из них, вы на самом деле обновляете «все» из них. , потому что на самом деле это одна и та же переменная строки.
вместо этого вам следует использовать отдельный массив строк для каждой строки:
#Fills the matrix with #'s
def fill_maze():
for i in range (col_len):
row = []
for i in range(row_len):
row.append("#")
matrix.append(row)
Или, более идиоматично:
def fill_maze():
matrix = [['#'] * col_len for _ in range(row_len)]