我需要递归添加到String以使用Lindenmayer系统构建Fractal。无论如何,基本上我从字符串=“A”开始,每次我递归(即我从0的深度开始,并且在深度等于的时候多次预处理过程)
我将“A”的每个实例更改为“BrArB”,将每个B更改为“AlBlA”。问题是,每次我执行其中一个操作时,它会增加另一个操作,并搞砸算法。
我从“A”开始...... 应该去“BrArB”...... 然后应该有“AlBlArBrArBrAlBlA”
但是第三步我得到的东西比我应该多得多。
有什么建议吗?如果我能同时做到这两个问题就能解决。
答案 0 :(得分:0)
尝试使用map:
grammar = {'A': 'BrArB', 'B': 'AlBlA'}
# number of rule substitutions
times = 8
# the starting point
axiom = 'A'
for n in xrange(times)
axiom = sum( (list(grammar[c]) if c in grammar else [c] for c in axiom), [] )
axiom = ''.join(axiom)
最后,您可能希望使用过滤器消除每个非终端符号:
TERMINALS ='lrf'
axiom =''。join(如果在TERMINALS中,则c表示公理中的c)
希望它有所帮助!