ripristinare lo stato registrato nel codice l-sistema usando grafica della tartaruga
-
26-10-2019 - |
Domanda
sto usando grafica della tartaruga di riprodurre l-sistemi (biblioteca TurtleWorld). Le regole che hanno cercato di applicare il lavoro bene quando non si tratti di tornare a uno stato salvato precedente, ma ogni volta che c'è un [e] (vedi regola sotto), le cose si rompono e la tartaruga solo pareggi bs casuali.
In sostanza, l'istruzione if che i controlli dove ']' è presente, è dove il codice si rompe, credo. (Inoltre, io so che non è ottimizzato per il momento, ho scritto una solida SE per amor di chiarezza ...)
EDIT:. Il nuovo codice - tutta questa cosa angolo di calcolo non era necessario, come abbiamo get_heading (), che informa noi dell'angolo stiamo orientati in
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()
Soluzione
Un paio di idee:
- Non hai mai impostato
angle
al nuovo angolo (newa
) nel]
-gestore. - Il condizionale è sbagliato secondo il commento,
newa>0
si trasformerebbe ha lasciato se l'angolo è positivo. - Sei sicuro maniglie
rt
negativo angoli bene? - Si potrebbe semplificare il codice molto se si utilizza
pop
invece, e ha spinto una tupla o somesuch dello stato. - Un indice di
-1
è pari alen(lst) - 1
.
Esempio di pop
-suggestione:
>>> state = []
>>> angle = 90
>>> posx = 10
>>> posy = 15
>>> state.append((angle, posx, posy))
>>> angle = 40
>>> angle, posx, posy = state.pop()
>>> angle
90