2017-02-27 36 views
1

即时尝试更新我用于跟踪控制台游戏中的舞台的2维列表。我使用的更新下面的代码:关于更新列表

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) 

我得到的问题是,冲洗后更新后,我得到了新的斑点上的“鸟”,但我也得到了它在前一个斑点,即使冲洗清单后。任何原因为什么?注意:舞台是在文件顶部声明的全局变量,而函数在while循环中以正确的顺序运行。 (刷新,更新,打印)注意:使用未来即可获得正确的打印功能。

回答

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

+0

那些不是python文档我的朋友,这些是:https://docs.python.org/3/reference/executionmodel.html –

+0

谢谢:)这工作相当不错!会做! –

0

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

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

在其他的方法,在这里你只访问或修改stageglobal是没有必要的。

话虽如此,您还可以使用[:]切片符号到修改列表,用新值替换它的整个内容。这样,你不需要global

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