【发布时间】:2020-01-10 15:54:28
【问题描述】:
我正在尝试用 Python 实现 Game Of Life。 new_state 函数应该计算一个单元格的邻居,并根据规则(if 语句)决定它是在下一代中死亡(转 0)还是活着(转 1)。
有没有办法检查一个值是否在数组的角落/边界?一个单元格的相邻单元格将是直接周围的单元格,无需包装数组。现在, new_state 抛出一个索引错误。我正在为这个函数使用 numPy。
import numpy
def new_state(array):
updated_array=[]
for x in range(len(array)):
for y in range(len(array[x])):
cell = array[x][y]
neighbours = (array[x-1][y-1], array[x][y-1], array[x+1][y-1], array[x+1][y], array[x+1][y+1], array[x][y+1],
array[x-1][y+1], array[x-1][y])
neighbours_count = sum(neighbours)
if cell == 1:
if neighbours_count == 0 or neighbours_count == 1:
updated_array.append(0)
elif neighbours_count == 2 or neighbours_count == 3:
updated_array.append(1)
elif neighbours_count > 3:
updated_array.append(0)
elif cell == 0:
if neighbours_count == 3:
updated_array.append(1)
return updated_array
【问题讨论】:
-
您可以检查索引是否在范围内的第一个/最后一个,并考虑这种状态,实现进一步的逻辑。
-
您是否考虑过周期性边界条件以使您的领域变得无限大......只是一个想法。
标签: python numpy conways-game-of-life