关于更新清单

时间:2017-02-27 15:42:43

标签: python python-2.7

我试图更新我用于跟踪控制台游戏中的舞台的二维列表。我使用以下代码进行更新:

def updateBoard():
    stage[bird[0]][3] = "#"
    #print(bird) Debugging
    #print(stage) Debugging

以及用于在新更新中刷新电路板的代码片段:

def flushBoard():
    stage = 0
    stage = [[0 for x in range(8)] for y in range(8)]
    #print(stage) Debugging

用于打印电路板的片段如下:

def printBoard():

    for row in stage:
        for square in row:
            print(square, end="")
        print("")
    print("")
    print(stage)

我得到的问题是,在刷新然后更新之后,我得到了#34;鸟"在新的地方,但我也在前一个地方得到它,即使在冲洗清单之后。有什么原因吗?注意:阶段是在文件顶部声明的全局变量,而函数在while循环中以正确的顺序运行。 (冲洗,更新,打印)注意:我使用 future 来获得正确的打印功能。

2 个答案:

答案 0 :(得分:0)

如果stage是全局变量,则必须使用global关键字。现在,您只是在stage函数的范围内声明并创建新的flushBoard

def flushBoard():
    global stage  # use globally defined stage in this function
    stage = [[0 for x in range(8)] for y in range(8)]

在您只是访问或修改stage的其他方法中,不需要global

话虽如此,您还可以使用[:]切片表示法修改列表,用新值替换整个内容。这样,您就不需要global

def flushBoard():
    stage[:] = [[0 for x in range(8)] for y in range(8)]

答案 1 :(得分:0)

我认为在flushBoard中你使用的是本地阶段而不是全局阶段。这就是你使用作业时会发生的事情。你应该这样做:

def flushBoard():
    global stage
    stage = 0
    stage = [[0 for x in range(8)] for y in range(8)]
    #print(stage) Debugging

我建议您阅读 Python docs on variable scope