康威的生命游戏没有改变任何事物

时间:2016-11-13 19:24:53

标签: python python-2.7 for-loop

所以,我必须通过以下5条规则来进行康威的生命游戏:

  1. 活动邻居少于两个的单元格
  2. 有超过3个活邻居的单元格
  3. 一个已经死亡且正好有3个活着的邻居的牢房正在栩栩如生
  4. 所有边缘单元格保持为0
  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
    

    依旧......

  6. 注意,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
    

    我真的很感激有人的帮助!

1 个答案:

答案 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)处停止,因此您无法获得索引超出界限错误。