Простая L -система в питоне

Здравствуйте, я ищу способ внедрить простую L-систему в функцию в Python, которая бы принимала три аргумента: аксиома, правила и количество взаимодействий (если выход итераций = 0 был бы ранее входной аксиомой). Я придумал некоторый код, он работает только на 1 итерации, и я не знаю, как реализовать больше.

Код, который я придумал:

#  x = axiom
#  y = rules
#  z would be iterations which I dont know how to implement

def lsystem(x,y):
    output = ''
    for i in x:
        if i in y:
            output += y[i]
        else:
            output += i
    print(output)

rules = { "A" : "ABA" , "B" : "BBB"}
# output    lsystem("AB",rules) ---> ABABBB    

1 ответ

Решение

Вам необходимо вернуть данное axioms если iterations == 0, В этой функции вы возвращаете аргумент axioms вам дали, так что если iterations == 0, вернете данные, нетронутые аксиомы.

Затем, позже, в конце вашего iteration, если iteration есть, недавно созданные аксиомы, которые вы получаете от iteration переводится в axioms так что вы вернете хорошее значение, и, если необходимо, следующий iteration будет иметь вновь созданные аксиомы для повторения.:)

def lsystem(axioms, rules, iterations):
    #    We iterate through our method required numbers of time.
    for _ in range(iterations):
        #    Our newly created axioms from this iteration.
        newAxioms = ''

        #    This is your code, but with renamed variables, for clearer code.
        for axiom in axioms:
            if axiom in rules:
                newAxioms += rules[axiom]
            else:
                newAxioms += axiom
        #    You will need to iterate through your newAxioms next time, so...
        #    We transfer newAxioms, to axioms that is being iterated on, in the for loop.
        axioms = newAxioms
    return axioms

rules = { "A" : "ABA" , "B" : "BBB"}
print(lsystem('AB', rules, 0))
# outputs : 'AB'

print(lsystem('AB', rules, 1))
# outputs : 'ABABBB'

print(lsystem('AB', rules, 2))
# outputs : 'ABABBBABABBBBBBBBB'
Другие вопросы по тегам