0

Space という名前のクラスを定義しました。これは、9x9 ボード上のスペースを表すことを目的としています。2D 配列として使用する予定のリストの要素に割り当てることにより、プログラムの開始時に 81 個のインスタンスを生成したいと考えています。

クラスは次のとおりです。

class Space:
    def __init__(self, x_coord, y_coord):
        self.row = x_coord
        self.column = y_coord

これは、インスタンスをリスト (スペースとも呼ばれます) に割り当てる私の試みの 1 つです。

for i in xrange(1,9):
   for j in xrange(1,9):
        space[i][j] = Space(i,j)

ここでの私の目標は、リスト インデックスを使用してインスタンスを座標であるかのように参照できるようにすることです。つまり、space[1][2].value = 3

私がやろうとしていることは可能ですか?インスタンスをまとめて生成するより良い方法はありますか? ありがとう!

編集:(以下のより読みやすい形式での私の回答)

スクリプトは実行されますが、コマンド プロンプトでリストにアクセスしようとすると、リストが定義されていないようです

>>> space[1][2].value = 3
Traceback (most recent call last):
  File "<interactive input>", line 1, in <module>
NameError: name 'space' is not defined
>>> space[1][1]
Traceback (most recent call last):
  File "<interactive input>", line 1, in <module>
NameError: name 'space' is not defined
4

2 に答える 2

2

オブジェクトspaceを保持するために使用しようとしているリストを作成していないようです。Spaceこれを行う 1 つの方法を次に示します。空のリストから始めて、値をリストに追加していきます。

space = [] # initially empty list
for i in range(9):
    column = [] # create an empty list to hold a column of values
    for j in range(9):
        column.append(Space(i, j)) # add the object to the column
    space.append(column) # add the column to the outer list

isedev の回答のように、よりクリーンで「Pythonic」なソリューションは、ネストされたリスト内包表記を使用することです。

space = [[Space(i, j) for j in range(9)] for i in range(9)]

最後の注意として、コード内の異なるものに対して大文字と小文字の違いだけで同じ単語を使用することは、おそらく悪い考えです。foo単一のインスタンスを保持する名前の変数を使用することは問題ありませんFooが、より適切な名前はインスタンスの目的を示しますfoo_for_frobbing。あなたの場合、インスタンスのリストboardよりも良い名前かもしれません。spaceSpace

于 2013-01-29T01:04:45.437 に答える
0

0 ベースのインデックスを使用する必要がありますが、これで目的が達成されます。

space = [[Space(i,j) for j in range(9)] for i in range(9)]
于 2013-01-28T23:31:02.577 に答える