2017-02-27 47 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)]