Простая 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'