我试图更新我用于跟踪控制台游戏中的舞台的二维列表。我使用以下代码进行更新:
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 来获得正确的打印功能。
答案 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 。