【问题标题】:Conway's Game of Life using Python matplotlib康威的生命游戏使用 Python matplotlib
【发布时间】:2017-01-22 15:01:03
【问题描述】:

我刚开始学习 Python 有一段时间了,所以我们必须做这个作业,它使用 matplotlib 编写一个程序来运行康威的生命游戏。我的教授已经做了部分代码,我们必须在TODO cmets下填写代码。所以我就写了,不知道为什么不运行动画。我做错了什么?非常感谢你们!!!程序中的 cmets 很长,因为它们是一种指令。

# life.py - Once complete, this program will play the game of
#           life.

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation

# The update function is needed for the animation
#   to work properly. It has four parameters:
# frameNum - this is handled by the animation, don't change this.
# img - the plot that is passed and changed, don't change this.
# world - the two-D array that represents the world for the
#         game of life. This will be updated to the next gen.
# N - the size of the world (which is square).

def update( frameNum, img, world, N ) :

    newWorld = world.copy( )

    ## TODO - Write code here to update the cells in newWorld
    ##        for the next generation of life. Remember to
    ##        use the toroidal model. Rather than making
    ##        special cases for row/column 0 and N-1, just
    ##        use the % operator.

    for i in range (N):
        for j in range (N):
            total= (world[(i-1)%N][(j-1)%N]+world[(i-1)%N][j]+world[(i-1)%N][(j+1)%N]+
                   world[i][(j-1)%N]+world[i][(j+1)%N]+ world[(i+1)%N][(j-1)%N]+
                   world[(i+1)%N][j]+ world[(i+1)%N][(j+1)%N])/255

            if world[i][j]== 255:

                if total>3 or total<2:
                    newWorld[i][j]== 0
                elif total==3:
                    newWorld[i][j]== 255

    img.set_data( newWorld )
    world[:] = newWorld[:]
    return img

N = 50
SPEED = 100
PROB_LIFE = 40


## TODO - Write code here to create the initial population
##   of the world. I recommend creating an N x N array that
##   is initially filled with random numbers from 0 to 99.
##   Then use the PROB_LIFE to change the entries to be
##   either alive (255) or dead (0).
world= np.random.choice([0,255], N*N, p=[1-((PROB_LIFE)/100),(PROB_LIFE)/100]).reshape(N,N)

fig, ax = plt.subplots( )
img = ax.imshow( world, interpolation='nearest' )
ani = animation.FuncAnimation( fig, update, fargs = ( img, world, N ),
                               frames = 10, interval = SPEED,
                               save_count = 50 )
plt.show( )

# This is the end of the program. You should not need
#   anything after this point.

【问题讨论】:

    标签: python numpy animation matplotlib


    【解决方案1】:

    您必须使用= 而不是== 来分配新值

    newWorld[i][j] = 0   # need `=` instead of `==
    
    newWorld[i][j] = 255 # need `=` instead of `==
    

    现在您将看到动画。

    但你也对elif 有错误 - 错误的缩进 - 正确

            if world[i][j] == 255:
    
                if total > 3 or total < 2:
                    newWorld[i][j] = 0
    
            elif total == 3:
                    newWorld[i][j] = 255
    

    或更具可读性

            if world[i][j] == 255:
    
                if total > 3 or total < 2:
                    newWorld[i][j] = 0
    
            else:
    
                if total == 3:
                    newWorld[i][j] = 255
    

    【讨论】:

    • 很好的答案,但开头的句子颠倒了 == 和 =。应该是:您必须使用= 而不是==。 (试图编辑,但编辑必须是 6 个字符,我学会了......)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-19
    • 2013-02-21
    • 1970-01-01
    • 2010-09-07
    • 2017-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多