文本迷宫游戏矩阵元素替换异常问题求助
问题分析与解决
你的问题根本不在dig(x,y)函数,而是**fill_maze()创建迷宫矩阵时,所有行都指向了同一个列表对象**。
问题根源
看这段fill_maze代码:
def fill_maze(): row = [] for i in range(row_len): row.append("#") for i in range (col_len): matrix.append(row)
你先创建了一个row列表,然后循环5次把这个同一个row添加到matrix里。这意味着matrix里的5个元素都是对同一个列表的引用——修改其中任何一行,其他行都会跟着变,因为它们本质上是同一个东西。
修复方案
修改fill_maze函数,每次循环都创建一个新的row列表,而不是重复添加同一个:
def fill_maze(): for i in range(col_len): row = [] for j in range(row_len): row.append("#") matrix.append(row)
或者用更简洁的列表推导式:
def fill_maze(): global matrix matrix = [["#" for _ in range(row_len)] for _ in range(col_len)]
验证dig函数
修复fill_maze后,你的原始dig函数其实可以正常工作,甚至可以简化成这样(因为列表是可变对象,修改row里的元素会直接反映到matrix中,不需要重新赋值):
def dig(x, y): matrix[y][x] = "@"
测试结果
运行修改后的代码,调用dig(2,3)后,输出会符合你的预期:
##### ##### ##### ##@## #####
内容的提问来源于stack exchange,提问作者user25371139
相关产品推荐
相关产品推荐

