0

我正在使用一个函数,该函数将坐标和矩阵作为输入并返回一个新矩阵,其中所有“上方”框都向下移动到旧坐标所在的位置。本质上,这是单个弹出框的糖果粉碎的“弹出”阶段。

我已经递归地编写了该函数,并且不知何故它似乎正在修改全局变量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]]
4

0 回答 0