同时替换字符串中的字符串

时间:2012-12-09 09:39:53

标签: string recursion

我需要递归添加到String以使用Lindenmayer系统构建Fractal。无论如何,基本上我从字符串=“A”开始,每次我递归(即我从0的深度开始,并且在深度等于的时候多次预处理过程)

我将“A”的每个实例更改为“BrArB”,将每个B更改为“AlBlA”。问题是,每次我执行其中一个操作时,它会增加另一个操作,并搞砸算法。

我从“A”开始...... 应该去“BrArB”...... 然后应该有“AlBlArBrArBrAlBlA”

但是第三步我得到的东西比我应该多得多。

有什么建议吗?如果我能同时做到这两个问题就能解决。

1 个答案:

答案 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)

希望它有所帮助!