我有一些我决定用 Python 做的项目。简而言之:我有清单。它们每个都有列表,有时是一个元素,有时更多。它看起来像这样:
rules=[
[[1],[2],[3,4,5],[4],[5],[7]]
[[1],[8],[3,7,8],[3],[45],[12]]
[[31],[12],[43,24,57],[47],[2],[43]]
]
关键是将 numpy 数组中的值与此规则中的值(规则表的元素)进行比较。我们将一些 [x][y] 点与第一个元素进行比较(例如,第一个元素中的 1),然后,如果为真,则将数组中的值 [x-1][j] 与列表中的第二个值,依此类推。五个第一次比较必须为真才能更改 [x][y] 点的值。我是这样写的(主要函数是 SimulateLoop,顺序切换,因为simulate2函数是在第二个函数之后编写的):
def simulate2(self, i, j, w, rule):
data = Data(rule)
if w.world[i][j] in data.c:
if w.world[i-1][j] in data.n:
if w.world[i][j+1] in data.e:
if w.world[i+1][j] in data.s:
if w.world[i][j-1] in data.w:
w.world[i][j] = data.cc[0]
else: return
else: return
else: return
else: return
else: return
def SimulateLoop(self,w):
for z in range(w.steps):
for i in range(2,w.x-1):
for j in range(2,w.y-1):
for rule in w.rules:
self.simulate2(i,j,w,rule)
数据类:
class Data:
def __init__(self, rule):
self.c = rule[0]
self.n = rule[1]
self.e = rule[2]
self.s = rule[3]
self.w = rule[4]
self.cc = rule[5]
NumPy 数组是 World 类的对象。规则是如上所述的列表,由从另一个程序(GPL 许可证)获得的函数解析。
老实说,它似乎工作正常,但事实并非如此。我正在尝试其他可能性,但没有运气。它正在工作,解释器不会返回任何错误,但数组中的值会以某种方式改变错误。规则很好,因为它是由我从中获得解析器的程序提供的(GPL 许可证)。
也许它会有所帮助 - 它是 Perrier's Loop,修改过的 Langton's loop(人造生命)。
将非常感谢您的帮助!)