0

2D配列を繰り返し処理している間に問題が発生しています。私は4X3のグリッドを通過し、要求された座標をある文字から別の文字に変更し、「B」または「W」を「削除」する代わりに、何も残さない(「 - 」文字)。私は文句を言わないコードのniddy griddyに入るが、私は現在、このグリッドに働いていることを何を言うことができます。2次元配列が範囲外にあるときは範囲外です。 (PYTHON)

B W B W   <= trying =>  A1 A2 A3 A4 
W B W B  to get these to  B1 B2 B3 B4 
B W B W  <=correspond=>  C1 C2 C3 C4 

B =黒のゲームの部分 W =白ゲームピース

ここではコードの抜粋がありますので、私はどこでそれを使って行くのか見ていきます。

removeB = input("~BLACK Player, remove one of your 'B's by typing in the coordinance: ") 
print("") 
removeW = input("~WHITE Player, remove one of your 'W's by typing in the coordinance: ") 
print("") 
newgrid = copy_grid(board) 
for r in range(numrows): 
    for c in range(numcols): 
     if(removeB == 'A1'): 
      newgrid[r][c] = '-' 
     elif(removeB == 'A2'): 
      newgrid[r][c+1] = '-' 
     elif(removeB == 'A3'): 
      newgrid[r][c+2] = '-' 
     elif(removeB == 'A4'): 
      newgrid[r][c+3] = '-' 
     elif(removeB == 'B1'): 
      newgrid[r+1][c] = '-' 
    etc....etc...etc...' 
     if(removeW == 'A1'): 
      newgrid[r-1][c-1] = '-' 
     elif(removeW == 'A2'): 
      newgrid[r-1][c-1] = '-' 
     elif(removeW == 'A3'): 
      newgrid[r-1][c+1] = '-' 
     elif(removeW == 'A4'): 
      newgrid[r-1][c+2] = '-' 
     elif(removeW == 'B1'): 
      newgrid[r][c-1] = '-' 
    etc....etc...etc... 

あなたは、私が第二に入るたら私はnewgridの書式を変更することを声明は限りインデックス値としてチェック座標がいることがわかります。私は、両方のメソッドで同じエラーメッセージが表示されることを知っているので、テスト目的でこれを行いました。したがって、私の混乱....また、両方のif/elseステートメントの内部で、そのプレイヤーのColorでなくても場所をチェックしているので、私は問題に遭遇することを知っています。私は一度座標を取得するとこれに行きます。ここで

はときremoveB = A1私が欲しいの出力とremoveW = C4である:

Traceback (most recent call last): 
    File "<pyshell#29>", line 1, in <module> 
    initial() 
    File "C:\Users\Ted\Desktop\Lab3.1Final.py", line 84, in initial 
    newgrid[r][c] = '-' 
    IndexError: list index out of range 

ライン84:ここで

- W B W 
    W B W B 
    B W B - 

はエラーメッセージです最初のif(removeB == 'A1')の直後の行で、de指さした座標。

この質問に関連する他のコードを提出する必要がある場合は、それが最良の回答を提供するのに役立つ場合はお知らせください。前もって感謝します!

+1

直接あなたの問題に関連していますが、スイッチ/ case文をご覧くださいしない(少なくとも、Pythonのバージョン)、ここで示すようにします。http:/ /stackoverflow.com/questions/11479816/what-is-the-python-equivalent-for-a-case-switch-statement –

+1

多分私は何かを逃しているが、彼らはA4で入力することができます、ifステートメントは見えません最初の時間と作業を見ているので、c(1,2,3,4)が最初に0 + 4 = 4(良い答え!)になるので、毎回壊れて3回見えます。次のように見える1 + 4 = 5(悪い回答)など...なぜここにループがありますか?私はこれをまったく新しいやり方でアプローチすることが最善であると思う(私はチャットでもっと遠くに助けることができる) –

答えて

1

あなたがはるかに簡単にこれについて行くことができます:

In [1]: grid = [['B','W','B','W'],['W','B','W','B'],['B','W','B','W']] 

In [2]: def show_grid(grid): 
    ...:  print(*(" ".join(row) for row in grid),sep='\n') 
    ...:  

In [3]: def delete_at_coordinate(grid,coordinate): 
    ...:  row = ord(coordinate[0]) - 65 
    ...:  col = int(coordinate[1]) - 1 
    ...:  grid[row][col] = '-' 
    ...:  

In [4]: removeB = 'A1' 

In [5]: removeA = 'C4' 

In [6]: show_grid(grid) 
B W B W 
W B W B 
B W B W 

In [7]: delete_at_coordinate(grid,removeB) 

In [8]: delete_at_coordinate(grid,removeA) 

In [9]: show_grid(grid) 
- W B W 
W B W B 
B W B - 
関連する問題