如何在python3中创建L系统?

时间:2015-11-19 00:29:02

标签: python function python-3.x

一个基本系统,因此函数接受一个字符串并产生该过程的下一个阶段。 从X开始。所以' X'转到' XY'每一封信' Y'去了X'。 Axiom X. 规则X→XY和Y→X 结果应如下所示:

X→

XY→

XYX→

XYXXY→

下一部分是编写一个打印X系统和L系统前5个字符串的程序。然后n的长度是14?

2 个答案:

答案 0 :(得分:1)

如果你保留一个替换字典,那么为字符串的每个字符查找适当的字典是微不足道的,并且使用dict.get的两个参数形式,我们可以通过逐字传递未识别的字符(如果你如果是错误,您可以将get调用更改为replacement_rules[s],以便触发KeyError)。

replacement_rules = { 'X': 'XY',
                      'Y': 'X',
                    }

def L_system(string):
   for s in string:
      yield replacement_rules.get(s,s)

然后您的结果为''.join(L_system(my_string))

也可以利用str.translate(在Python3中)

>>> replacement_rules = { ord('X'): 'XY',
...                       ord('Y'): 'X',
...                     }
>>> s = 'X'
>>> s = s.translate(replacement_rules); s
'XY'
>>> s = s.translate(replacement_rules); s
'XYX'
>>> s = s.translate(replacement_rules); s
'XYXXY'
>>> s = s.translate(replacement_rules); s
'XYXXYXYX'
>>> s = s.translate(replacement_rules); s
'XYXXYXYXXYXXY'

答案 1 :(得分:-1)

>>> def LSys(s):
    return s + ('X','XY')[s[-1]=='X']

>>> LSys('XYXYYX')
'XYXYYXXY'

这只会识别X,其他任何内容都会返回添加的'X'