2017-01-27 5 views
-5

はIndexError:範囲外のリストインデックスPYTHONエラーHELP ME

import random 
import copy 
SHOW_POSITIONS = True 

#Task 2 
def play_game(grid_size = 8, treasure = 10, bandits = 5): 
    player_x = 0 
    player_y = grid_size - 1 
    grid = [] 
    for row in range(grid_size): 
     grid.append([" " for col in range(grid_size)]) 
     while treasure > 0: 
      x = random.randint(0, grid_size - 1) 
      y = random.randint(0, grid_size - 1) 
      if x == 0 and y == grid_size - 1: 
       continue 
      if grid[y][x] == " ": # Error here 
       grid[y][x] = "3" 
       treasure -= 1 
       while bandits > 0: 
        x = random.randint(0, grid_size - 1) 
        y = random.randint(0, grid_size - 1) 
        if(grid[y][x] == " "): # Error here 
         grid[y][x] = "B" 
         bandits -= 1 
         moves = 0 
         coins = 0 

あり、それへのより多くのコードがあるが、それは誰もが問題をしてください識別することができれば、私に問題を与えているコードの唯一の塊であります助けて!!

+1

まず、太字の線はありません。それから、エラー/トレースバックを投稿してください。 – iFlo

+1

利用できないインデックスにアクセスしようとしていることを意味します。それをデバッグしようとしてください – Gogo

+0

おそらく 'grid'は1Dリストであり、それを2Dリストとして使用しようとします。 – iFlo

答えて

1

grid.append([" " for col in range(grid_size)])は、for row in range(grid_size)ループ内にあります。

サイズがの場合、の後にダブルループが終了しました。

しかし、0->grid_size-1にランダムをキャストすると、外寸がgridになることがあります。

あなたはこのように、あなたの最初のforループの前に、あなたのグリッドを宣言する必要があります。

grid = [[" "]*grid_size for _ in range(grid_size)] 

ので、あなたは(正しく初期化2Dのリストを持って、私は[" "]*grid_sizeを使用[" " for col in range(grid_size)]は、内側のリストのためのやり過ぎであることに注意して、文字列

grid = [] 
for row in range(grid_size): 
    grid.append([" " for col in range(grid_size)]) 

012によって:

を交換するまで、それを合計する)不変です

grid = [[" "]*grid_size for _ in range(grid_size)] 
for row in range(grid_size): 
+0

if(grid [y] [x] == ""): grid [y] [x] == ""の場合: トレースバック(最新のコールの最後): ファイル " " M:¥Python¥Gaming Programming¥Code.py "、行144、 play_game() ファイル" M:\ Python \ Gaming Programming \ Code.py "、行87、play_game内 grid [y] [ x] == "": IndexError:リストのインデックスが範囲外にある – tomripp0123

+0

修正なし私は提案していません –

+0

どのようにしてコード全体を取得できますか? – tomripp0123