Python 康威';生活的游戏不会改变任何事情
因此,我必须用以下5条规则来做康威的人生游戏:Python 康威';生活的游戏不会改变任何事情,python,python-2.7,for-loop,Python,Python 2.7,For Loop,因此,我必须用以下5条规则来做康威的人生游戏: 只有少于两个活邻居的细胞死亡 有3个以上活邻居的细胞死亡 一个死了的牢房有三个活的邻居就活了 所有边缘单元保持为0 所有其他细胞都保持其状态 例如: >>> 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
>>> 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\u life\u 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
我真的很感激有人帮忙 在你对CountNeights的定义中,你在循环什么? 您将从row=1,…,A |-1开始 首先,在python中,range从mininclusive开始,排除max
范围(0,len(A))
但这仍然不对。在下一代_life_中,您将遍历所有行和列(在这里也更正了范围错误之后)。因此,我认为您需要检查单元格周围的近邻,以确定行和列的每个值。我想您已经意识到了这一点,这就是为什么要传递行和列值来进行检查
countneighbories(行、列、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
注意最小值和最大值(注意最小值(第+2行,len(A)),因为范围将停止在最小值(第+1行,或len(A)-1),所以不会出现索引越界错误。什么是印刷板(A)?我在你的代码中看不到这样的功能。请提供一个人们在实现life时常犯的错误:如果你在适当的位置更新矩阵中的每个单元,那么最终你就无法在时间t-1准确地确定每个邻居的状态,因为其中一些单元在时间t被更新为包含它们的状态。你需要两个矩阵:一个保持旧状态,一个将保持新状态。
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