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]エラーが表示されます。

tableから戻るtblDataと、空のリストのリストを取得しますが、(l, w)isと言う(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 に答える