0

我有一个绘制矩形的函数:

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],我收到的只是一个错误。

当我从 回来tabletblData,我确实得到了一个空列表的列表,但是说(l, w)(12, 56),所以我试图将球“O”放在网格的中心(6, 28),只是输入table[6][28]会返回一个错误,所以我不知道我是如何将附加 'O' 到table[6,28]

所以我的问题是,我怎样才能有效地访问list[x][y]

4

1 回答 1

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', ' ', ' '],
 [' ', ' ', ' ', ' ']]
于 2013-05-31T20:55:34.930 回答