Как заменить записи в матрице?

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] = "@"

но это дало тот же результат.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
0
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема не в том, как вы пытаетесь обновить матрицу, а в том, как вы ее инициализируете — у вас есть одно и то же 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)]

Другие вопросы по теме