我正在使用一个函数,该函数将坐标和矩阵作为输入并返回一个新矩阵,其中所有“上方”框都向下移动到旧坐标所在的位置。本质上,这是单个弹出框的糖果粉碎的“弹出”阶段。
我已经递归地编写了该函数,并且不知何故它似乎正在修改全局变量m而不是本地变量。我想我可以通过将函数变量更改为 以外的其他值来修复它m,但我的印象是 Python 不允许这种行为,global如果你想从函数中更改全局变量,则需要使用关键字。但是,我的函数似乎并非如此,我不知道这是因为递归还是我错过的其他原因。
def pop(x,y, m):
"""
while still in bounds,
shift m[x][y-1] to m[x][y]
when m[x][y-1] doesn't exist, replace m[x][y] with 0
"""
if y == 0: #hit end, fill with 0
m[y][x] = 0
return m
else:
m[y][x] = m[y-1][x]
return pop(x, y-1 , m)
m = [[1,2,3,4],
[1,3,4,2],
[4,1,2,4],
[1,2,3,1]]
现在a = pop(2,2, m)返回正确的值a,然后检查m出乎意料的值也给出:
m= [[1, 2, 0, 4],
[1, 3, 3, 2],
[4, 1, 4, 4],
[1, 2, 3, 1]]