Python 2.7 康威';生命指数误差的s博弈

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

所以我必须用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
    
    >>> 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 if
    A=[3,2,5]
    然后
    len(A)=3
    ,如果对其进行索引,则
    A[2]=5
    ,因此
    A[len(A)+2]
    将尝试对
    A
    的第五个元素进行索引,但该元素不存在。