我想要做的是有一個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循環的一半。所以我改變了這第二個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
好像我無法在網格中添加座標,但是我可以減去。這是爲什麼?
你檢查的邊界?例如第一排沒有上鄰居。您通常在這些鄰居檢查的外部有額外的'''> 0'''和'''i
sascha
首先,如果你想創建這樣的規則數組,你應該切換到'numpy'。你的第一個雙循環將是一行:'grid = numpy.zeros((10,10))''。這就是說,我並沒有真正遵循你的代碼的邏輯。首先你使用'filea'和'columna'作爲循環索引,然後用作數組索引的偏移量 - 我不認爲這是你真正想要的。你可以從'filea'和'columna'減1的原因是,在初始循環之後它們都等於'9','9 + 1 = 10'超出邊界。 –
omg sry我忘了寫在問題編輯的東西,並會更有意義 –