私がしようとしているのは、2D配列を持ち、配列内のすべての座標について、1または0を格納している場合は、他の8つの座標を尋ねます。鉱山を探している掃海艇と同様です。Pythonでグリッド座標にどのように追加するのですか?
私はこれ持っていた:
grid = []
for fila in range(10):
grid.append([])
for columna in range(10):
grid[fila].append(0)
#edited
for fila in range (10):
for columna in range (10):
neighbour = 0
for i in range 10:
for j in range 10:
if gird[fila + i][columna + j] == 1
neighbour += 1
をしかし、何かがうまく動作しませんでした。私はまた、エラーをその方法を見つけることを試みるために印刷された文章を持っていましたが、私はまだそれがforループの半分だけを作った理由を理解できませんでした。だから私は、これまでのループのための第二変更:
#edited
for fila in range (10):
for columna in range (10):
neighbour = 0
if grid[fila - 1][columna - 1] == 1:
neighbour += 1
if grid[fila - 1][columna] == 1:
neighbour += 1
if grid[fila - 1][columna + 1] == 1:
neighbour += 1
if grid[fila][columna - 1] == 1:
neighbour += 1
if grid[fila][columna + 1] == 1:
neighbour += 1
if grid[fila + 1][columna - 1] == 1:
neighbour += 1
if grid[fila + 1][columna] == 1:
neighbour += 1
if grid[fila + 1][columna + 1] == 1:
neighbour += 1
をし、このエラーを得た:
if grid[fila - 1][columna + 1] == 1:
IndexError: list index out of range
私は、グリッド座標に追加することはできませんが、私は引くことができますように思え。何故ですか?
あなたは国境をチェックしますか?例えば最初の行には上位隣がありません。通常、これらの隣接チェックの外側には、さらに '' i> 0'''と '' i
sascha
まず、そのような規則的な配列を作成したい場合は、間違いなく 'numpy'に切り替える必要があります。最初の二重ループは 'grid = numpy.zeros((10,10))'という単一の行になります。つまり、私は実際にあなたのコードのロジックに従っているわけではありません。まず 'filea'と' columna'をループインデックスとして使用し、後で配列インデックスのオフセットとして使用します。これはあなたが本当に望んでいるとは思いません。 'filea'と' columna'から1を引くことができる理由は、初期ループの後では両方とも '9 'に等しく、' 9 + 1 = 10'は範囲外です。 –
omg sry私は質問の中で何かを書くのを忘れていました。編集してより意味をなさくするでしょう。 –