Python 2.7 康威';生命指数误差的s博弈
所以我必须用5条规则来做康威的人生游戏:Python 2.7 康威';生命指数误差的s博弈,python-2.7,for-loop,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
>>> 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
and so on... .
请注意,下一代(A)将返回一个新的电路板,因此我可以继续将A重新绑定到每一代
这是我目前的代码:
def countNeighbors(row, col, A):
count = 0
for row in range(len(A) - 1, len(A) + 2):
for col in range(len(A) - 1, len(A) + 2):
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[0]) - 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
def countneights(行、列、A):
计数=0
对于范围内的行(len(A)-1,len(A)+2):
对于范围内的列(len(A)-1,len(A)+2):
如果[行][col]==1:
计数+=1
返回计数
def下一代生命(A):
对于范围(1,len(A)-1)中的行:
对于范围(1,len(A[0])-1)中的列:
如果A[行][col]==0且countneights(行、列、A)==3:
A[行][col]=1
如果countneights(行、列、A)<2:
A[行][col]=0
elif Countneights(行、列、A)>3:
A[行][col]=0
归还
我的问题是我遇到了这个错误:
Traceback (most recent call last):
File "<pyshell#10>", line 1, in <module>
A = next_life_generation(A)
line 88, in next_life_generation
if countNeighbors(row, col, A) < 2:
line 79, in countNeighbors
if A[row][col] == 1:
IndexError: list index out of range
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
A=下一代(A)
第88行,在下一代
如果countneights(行、列、A)<2:
第79行,按顺序排列
如果[行][col]==1:
索引器:列表索引超出范围
如果有人能帮助我,我将不胜感激
range(len(A)-1,len(A)+2)
显然包含A
范围之外的索引(0到len(A)-1
是有效的)(Python中的数组传递/返回可能不像您认为的那样工作:“重新绑定”)您能解释一下为什么range(len(A)-1,len(A)+2)无效?您可以尝试:@VinceCarter如果A=[3,2,5]
那么len(A)=3
,如果索引它,那么A[2]=5
,因此A[len(A)+2]
将尝试索引A
的第五个元素,而这是不存在的。范围(len A)-1,len A)+2)
显然包含的索引超出了A
的范围(0到len(A)-1
是有效的)(Python中的数组传递/返回可能不像您认为的那样工作:“重新绑定”)您能解释一下为什么范围(len(A)-1,len(A)+2)无效吗?您可以尝试:@VinceCarter ifA=[3,2,5]
然后len(A)=3
,如果对其进行索引,则A[2]=5
,因此A[len(A)+2]
将尝试对A
的第五个元素进行索引,但该元素不存在。