2017-07-12 11 views
1

だから私は2次元配列を含むゲームを作っています、と私はグリッドの高さと幅の入力をユーザーに尋ねるが、ここではグリッドにPythonのインデックスエラーが

Grid=[['O'for x in range(gridS[0])]for y in range(gridS[1])] 

Iを行うコードであります後で変更グリッド[0]と1 gridXとYに

その後、私は、その多くの選手

を追加し、(変数の相手に格納されている)多くの選手がプレーしているかをユーザーに尋ねる再び、グリッドに選手を追加しよう
  if opponents>0: 
      Grid[gridX-1][gridY-2]='P' 
      if opponents>1: 
       Grid[0][(gridY-2)]='P' 
       if opponents>3: 
        Grid[gridX-1][0]='P' 

ho wever、テストするとき、それはこのエラーを思い付く:

>>> How many bots do you want to play against? 
>>> 10 
>>> Please enter a number between 0 and 3 
>>> 2 
2 

    Grid[gridX-1][gridY-2]='P' 
IndexError: list assignment index out of range 
+0

これは配列ではなく*リスト*です。 –

+0

私の先生は、配列 - 私の悪いと言った –

+0

それは賢明な点であり、それは配列と呼ばれることができますが、正確であることが良いです。 –

答えて

1

問題は、あなたのネストされた理解は、寸法のネストされた配列を構築しているが、「裏返し」。考えてみましょう:通常2X4 "マトリックス" と呼ばれることになる

>>> dims = (4, 2) 
>>> GRID = [['0' for x in range(dims[0])] for y in range(dims[1])] 
>>> GRID 
[['0', '0', '0', '0'], ['0', '0', '0', '0']] 

を。それは赤い旗ですが、それは表記の問題です。基本的な問題は、gridX, gridY = dimsを使用しての最初の軸にインデックスを作成していることです。

>>> x, y = dims 
>>> x 
4 
>>> len(GRID) 
2 
>>> GRID[x] 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
IndexError: list index out of range 

、すべてがうまく作る以下の理解使用するには:だから、つまり

Grid=[['O'for y in range(gridS[1])]for x in range(gridS[0])] 

を、内側の理解が第2の軸を作成し、外側には、最初に作成されます。しかし、あなたはそれについて逆の考え方をしていました。

関連する問題