代码之家  ›  专栏  ›  技术社区  ›  user25371139

如何替换矩阵中的条目?复制

  •  -1
  • user25371139  · 技术社区  · 1 年前
    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] = "@"
    

    但这给出了相同的输出。

    2 回复  |  直到 1 年前
        1
  •  0
  •   Mureinik    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)]
    
        2
  •  -1
  •   Kirill Bure    1 年前

    你用两个坐标输入玩家的位置,但只使用一个坐标。