5

私は Python にかなり慣れていないので、構文や物事が正確に機能する方法にあまり精通していません。誤解している可能性がありますが、コードからわかることから、次の行があります。

largeBoard = [[Board() for i in range(3)] for j in range(3)] 

9 つの異なる Board オブジェクトではなく、同じ Board オブジェクトへの 9 つの参照を作成しています。代わりに 9 つの異なる Board オブジェクトを作成するにはどうすればよいですか?

私が実行すると:

largeBoard = [[Board() for i in range(3)] for j in range(3)]        
x_or_o = 'x'      
largeBoard[1][0].board[0][0] = 'g' # each Board has a board inside that is a list 
for i in range(3):
    for j in range(3):
        for k in range(3):
            for l in range(3):
                print largeBoard[i][j].board[k][l]

複数の「g」が表示されるため、それらはすべて同じオブジェクトへの参照であると思いました。

4

2 に答える 2

4

逆に、9 つの独立したインスタンスを作成しています。Boardあなたが何かを持っていたら

largeBoard = [[Board()] * 3] * 3

その場合、インスタンスは 1 つしかありません。これは、多くの Python 初心者が犯しがちな間違いの根源です。

[X for i in range(3)]Xはそれぞれ 1i回 (ここでは 3 回)評価されますが、1 回だけ[X] * 3評価されXます。

于 2013-07-31T14:53:56.587 に答える
1

これはあなたのボードクラスだと思います(これを使用してエラーを再現できました):

class Board:
    board = [[0 for x in range(3)] for x in range(3)]

__init__()これを修正するには、各インスタンスが独自のボードを持つようにボードを初期化する関数を作成する必要があります。

class Board:
    def __init__(self):
        self.board = [[0 for x in range(3)] for x in range(3)]

次に、「g」が 1 つだけ表示されるはずです。 クラスを比較する ideone のコードを次に示します。

于 2013-07-31T15:18:41.713 に答える