restauration de l'état enregistré dans le code système de l en utilisant des graphiques de tortue
-
26-10-2019 - |
Question
J'utilise les graphiques de tortue pour reproduire l-systèmes (bibliothèque TurtleWorld). Les règles que j'ont essayé d'appliquer à un état sauvegardé précédent travail bien quand ils ne concernent pas aller, mais chaque fois qu'il ya un [et] (voir la règle ci-dessous), les choses se brisent et la tortue ne consomme que bs aléatoires.
En fait, l'instruction IF qui vérifie où « ] » est présent, est l'endroit où les pauses de code, je pense. (De plus, je sais que ce n'est pas optimisé pour le moment, je l'ai écrit un solide SI pour des raisons de clarté ...)
EDIT:. Nouveau code - ce tout angle de calcul n'a pas été nécessaire, comme nous l'avons get_heading (), qui nous fait part de l'angle que nous sommes orientés dans
import turtle
turtle.down()
n = 'F'
s1 = 'F'
s2 = 'FF-[-F+F+F]+[+F-F-F]'
#s3 = 'F'
#s4 = 'FF'
steps = 5
for i in range(steps):
n = n.replace(s1,s2)
#n = n.replace(s3,s4)
a = 25
x = []
y = []
angle = []
for i in n:
if i == 'F':
turtle.forward(2)
if i == '+':
turtle.left(a)
if i == '-':
turtle.right(a)
if i=='[':
x.append(turtle.xcor())
y.append(turtle.ycor())
angle.append(turtle.heading())
if i==']':
turtle.pu()
turtle.setpos(x[len(x)-1],y[len(y)-1])
turtle.right(turtle.heading())
turtle.setheading(angle[len(angle)-1])
x.pop()
y.pop()
angle.pop()
turtle.pd()
La solution
Quelques idées:
- Vous ne
angle
ensemble au nouvel angle (newa
) dans votre]
-gestionnaire. - Votre condition est mauvais selon le commentaire,
newa>0
se tourner vers la gauche si l'angle est positif. - Êtes-vous sûr poignées de
rt
négatif angles bien? - Vous pourrait simplifier votre code beaucoup si vous utilisez
pop
à la place, et poussé un tuple ou somesuch de l'État. - Un indice de
-1
est égal àlen(lst) - 1
.
Exemple de pop
-suggestion:
>>> state = []
>>> angle = 90
>>> posx = 10
>>> posy = 15
>>> state.append((angle, posx, posy))
>>> angle = 40
>>> angle, posx, posy = state.pop()
>>> angle
90