当前位置:  开发笔记 > 编程语言 > 正文

Python实现康威生命游戏的问题

如何解决《Python实现康威生命游戏的问题》经验,为你挑选了1个好方法。

我目前正在研究康威的生命游戏,并且已经陷入困境.我的代码不起作用.

当我在GUI中运行我的代码时,它说:

 
[[0 0 0 0]
 [0 1 1 0]
 [0 1 0 0]
 [0 0 0 0]]

Traceback (most recent call last):
  File "C:\Users\Documents\Physics\Python\MainProject\conway.py", line 53, in 
    b= apply_rules(a)
  File "C:\Users\Documents\Physics\Python\MainProject\conway.py", line 14, in apply_rules
    neighbours=number_neighbours(universe_array,iy,ix)
  File "C:\Users\Documents\Physics\Python\MainProject\conway.py", line 36, in number_neighbours
    neighbours+=1
UnboundLocalError: local variable 'neighbours' referenced before assignment

这是我的代码:

'''If a cell is dead at time T with exactly three live neighbours, the cell will be alive at T+1
If a cell is alive at time T with less than two living neighbours it dies at T+1
If a cell is alive at time T with more than three live neighbours it dies at T+1
If a cell is alive at time T with exactly two or three live neighbours it remains alive at T+1'''
import numpy


def apply_rules (universe_array):
    height, width = universe_array.shape
    # create a new array for t+1
    evolved_array = numpy.zeros((height, width),numpy.uint8)
    for iy in range(1, height-1):
        for ix in range(1,width-1):
            neighbours=number_neighbours(universe_array,iy,ix)
            if universe_array[iy,ix]==0 and neighbours==3:
                evolved_array[iy,ix]==1
            elif universe_array[iy,ix]==1 and neighbours<2:
                evolved_array[iy,ix]==0
            elif universe_array[iy,ix]==1 and neighbours>3:
                evolved_array[iy,ix]==0
            elif universe_array[iy,ix]==1 and neighbours==2 or neighbours==3:
                evolved_array[iy,ix]=universe_array[iy,ix]

    return evolved_array

def number_neighbours(universe_array,iy,ix):
    neighbours=0 #fixed this line,thanks:)
    if universe_array[iy-1,ix-1]==1:
            neighbours+=1
    if universe_array[iy,ix-1]==1:
            neighbours+=1
    if universe_array[iy+1,ix-1]==1:
            neighbours+=1
    if universe_array[iy-1,ix]==1:
            neighbours+=1
    if universe_array[iy+1,ix]==1:
            neighbours+=1
    if universe_array[iy-1,ix+1]==1:
            neighbours+=1
    if universe_array[iy,ix+1]==1:
            neighbours+=1
    if universe_array[iy+1,ix+1]==1:
            neighbours+=1
    else:
        neighbours=neighbours
    return neighbours

if __name__ == "__main__":
    a = numpy.zeros((4,4),numpy.uint8)
    a[1,1]=1
    a[1,2]=1
    a[2,1]=1
    print a
    b= apply_rules(a)
    print b

我是Python的初学者,我不知道如何修复错误.我是一个有点困惑约import "neighbours"function "apply_rules",是正确的方式做到这一点?



1> Svante..:

好吧,我想你对编程本身也很陌生,否则你在解释这个简单的错误信息时应该没有任何问题.

我会帮你解剖一下:

首先,按调用顺序显示项目文件的所有"当前"行号.

然后,它会显示发生错误的函数: number_neighbours

然后,它会显示包含错误的行的内容: neighbours+=1

最后,它告诉你该行的问题是: UnboundLocalError: local variable 'neighbours' referenced before assignment

这是什么意思?让我们看一下+=运算符的作用:它为当前值增加了一些东西neighbours.这意味着它会读取当前值,向其中添加内容,最后将其存储回来."阅读"在变量方面被称为"参考".

目前的价值是neighbours多少?好吧,它以前从未使用过,所以它没有任何价值 - 从来没有分配给它的值.添加"无价值"的东西不是明智之举.我想你希望它的值为0,但你必须告诉你的翻译.为此,请在函数开头之前添加以下语句: neighbours = 0

推荐阅读
放ch养奶牛
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有