所以,我必须通过以下5条规则来进行康威的生命游戏:
所有其他单元格保持其状态
示例:
>>> A = [ [0,0,0,0,0],
[0,0,1,0,0],
[0,0,1,0,0],
[0,0,1,0,0],
[0,0,0,0,0]]
>>> printBoard(A)
00000
00100
00100
00100
00000
>>> A2 = next_life_generation( A )
>>> printBoard(A2)
00000
00000
01110
00000
00000
>>> A3 = next_life_generation( A2 )
>>> printBoard(A3)
00000
00100
00100
00100
00000
依旧......
注意,next_life_generation( A )
返回一个新的板,所以我可以继续将A重新绑定到每一代。到目前为止,这是我的代码:
import sys
def printBoard( A ):
""" this function prints the 2d list-of-lists
A without spaces (using sys.stdout.write)
"""
for row in A:
for col in row:
sys.stdout.write( str(col) )
sys.stdout.write( '\n' )
def countNeighbors(row, col, A):
count = 0
for row in range(1, len(A) - 1):
for col in range(1, len(A) - 1):
if A[row][col] == 1:
count += 1
return count
def next_life_generation(A):
for row in range(1, len(A) - 1):
for col in range(1, len(A) - 1):
if A[row][col] == 0 and countNeighbors(row, col, A) == 3:
A[row][col] = 1
if countNeighbors(row, col, A) < 2:
A[row][col] = 0
elif countNeighbors(row, col, A) > 3:
A[row][col] = 0
return A
我遇到的问题是我的代码没有改变任何东西,只是打印出同样的东西:
>>> A = [ [0,0,0,0,0],
[0,0,1,0,0],
[0,0,1,0,0],
[0,0,1,0,0],
[0,0,0,0,0]]
>>> printBoard(A)
00000
00100
00100
00100
00000
>>> A2=next_life_generation(A)
>>> printBoard(A2)
00000
00100
00100
00100
00000
我真的很感激有人的帮助!
答案 0 :(得分:0)
在你对countNeighbors的定义中,你在循环什么? 你要从row = 1,...,| A | -1 首先,在python中,范围从最小值开始,不包括最大值。所以您想要使用的范围是
range(0,len(A))
但那还不对。您将在next_life_generation中循环遍历所有行和列(一旦您在此处更正了范围错误)。所以我相信你想检查单元格周围的直接邻居是否有行和列的每个值。我想你意识到这一点,这就是你传递row和col值来检查的原因
countNeighbors(row, col, X) == 3:
但是,你又在循环什么?
从0到| A |对于行和列。所以每次你总计整个矩阵的总和,在你的例子中总是3。
这是尝试的事情:
def countNeighbors(row, col, A):
count = 0
for r in range(max(row-1,0), min(row+2, len(A))):
for c in range(max(row-1,0), min(row+2, len(A))):
if A[r][c] == 1:
count += 1
return count
注意min和max(并注意min(行+ 2,len(A))因为范围将在min(行+ 1或len(A)-1)处停止,因此您无法获得索引超出界限错误。