2013-05-31 67 views
0

我有畫矩形的功能:同時追加2所列出

def drawTbl(l, w): 

    ln1 = ' ' 
    ln2 = '-' 
    ln3 = '|' 

    x = range(l) 
    print '+', ln2*w, '+' 
    for i in range(len(x)): 
     print ln3, ln1*w, ln3 
    print '+', ln2*w, '+' 

它工作正常,但我試圖樣圖這(這就像一個傍克隆),這樣我的可以在中心放置一個「O」球,並使用X和Y進行碰撞檢測。當我使用這個功能:

def tblData(l, w): 
    table=[] 
    for x in range(l): 
     table.append([]) 
    for y in range(w): 
     table.append([]) 

它似乎追加空單,但是當我嘗試使用table[x][y],所有我收到一個錯誤。

當我從tblData返回table,我得到空列表的列表, 但說(l, w)(12, 56),所以我試圖把球「O」在網格(6, 28)中心,只需鍵入table[6][28]回報一個錯誤,所以我不知道我怎麼會追加'O'table[6,28]

所以我的問題是,我怎麼能有效地訪問list[x][y]

+0

F.J的回答是不錯的,但你也有,你沒有製作二維數組的問題。你正在製作一個包含l + w空列表的列表。 – James

+0

你是對的,這在調用pprint時效果很好,但我仍然沒有操縱它來放置對象(同時仍然使用我的原始矩形函數)如果你有任何建議,我會做一些關於2D數組的閱讀那也會很酷。 – jmg87

回答

5

您不需要創建空列表,而需要將內部列表中的值初始化爲一些合理的值,如空格。

例如:

def tblData(l, w): 
    table=[] 
    for x in range(l): 
     table.append([' '] * w) 
    return table 

或者更簡潔:

def tblData(l, w): 
    return [[' '] * w for x in range(l)] 

注意[' '] * 3創建列表[' ', ' ', ' '],所以[' '] * w相當於
[' ' for x in range(w)]

例如:

>>> import pprint 
>>> table = [[' '] * 4 for x in range(5)] 
>>> pprint.pprint(table) 
[[' ', ' ', ' ', ' '], 
[' ', ' ', ' ', ' '], 
[' ', ' ', ' ', ' '], 
[' ', ' ', ' ', ' '], 
[' ', ' ', ' ', ' ']] 
>>> table[3][1] = 'O' 
>>> pprint.pprint(table) 
[[' ', ' ', ' ', ' '], 
[' ', ' ', ' ', ' '], 
[' ', ' ', ' ', ' '], 
[' ', 'O', ' ', ' '], 
[' ', ' ', ' ', ' ']] 
+0

非常感謝 – jmg87