Frage

Ich verwende Turtle-Grafiken, um L-Systeme (Turtleworld Library) zu reproduzieren. Die Regeln, die ich versucht habe, die Arbeit zu bewerben, wenn sie nicht zu einem früheren gespeicherten Zustand zurückkehren, aber wenn es eine [und] (siehe Regel unten) gibt, brechen die Dinge und die Schildkröte zeichnet nur zufällige BS.

Grundsätzlich ist die IF -Aussage, die überprüft, wo '] vorhanden ist, der Code bricht, denke ich. (Außerdem weiß ich, dass es im Moment nicht optimiert ist, ich habe einen soliden wenn aus Claritys willen geschrieben ...)

Bearbeiten: Neues Code - Dieser gesamte Berechnungswinkel -Ding war nicht erforderlich, da wir Get_heading () haben, was uns über den Winkel informiert, in den wir ausgerichtet sind.

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()
War es hilfreich?

Lösung

Ein paar Ideen:

  • Du hast nie gesetzt angle zum neuen Winkel (newa) in deiner ]-handler.
  • Ihre bedingte ist laut Kommentar falsch, newa>0 würde es links drehen, wenn der Winkel positiv ist.
  • Bist du dir sicher rt Griff negative Winkel gut?
  • Sie können Ihren Code bei Verwendung erheblich vereinfachen pop Stattdessen und schob ein Tupel oder ein gewisses Such des Staates.
  • Ein Index von -1 ist gleich len(lst) - 1.

Beispiel des pop-Anregung:

>>> state = []
>>> angle = 90
>>> posx = 10
>>> posy = 15
>>> state.append((angle, posx, posy))
>>> angle = 40
>>> angle, posx, posy = state.pop()
>>> angle
90
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top