Как заставить черепаху помнить свое положение в L-системах?

Мы только начали программировать в универе. Одна из наших задач - создать фрактальное дерево с L-системой с черепахой на питоне. Вот этот:

1. variables : X F
2. constants : + − [ ]
3. start  : X
4. rules  : (X → F-[[X]+X]+F[+FX]-X), (F → FF)
5. angle  : 25°

Код:

def fraktal_plante(padde, depth):
    Xmerke(padde, depth-1)       # X

def Xmerke(padde, depth):
    if depth > 0:# X ->
        padde.forward(10)          #      F
        padde.right(25)            #       -
        padde.setposition()
        padde.setheading()         #         [
        padde.setheading()         #          [
        Xmerke(padde, depth-1)     #            X
        padde.heading()
        padde.goto()               #              ]
        padde.left(25)             #                +
        Xmerke(padde, depth-1)     #                 X
        padde.heading()            #                  ]
        padde.left(25)             #                   +
        padde.forward(10)          #                    F
        padde.setposition()
        padde.setheading()         #                      [
        padde.left(25)             #                       +
        padde.forward(10)          #                        F
        Xmerke(padde, depth-1)     #                         X
        padde.heading()
        padde.goto()               #                          ]
        padde.right(25)            #                            -
        Xmerke(padde, depth-1)     #                             X

def Fmerke (padde, depth):
    if depth > 0:                  #    Y ->
        padde.forward(10)          #          F
        padde.forward(10)          #             F

Как вы можете видеть, это грязно. Мне интересно, как заставить черепаху вспомнить свое положение и направить ее " [ ", чтобы потом вернуться к ней " ] ".

Я действительно новичок в этом, поэтому, пожалуйста, ответьте в ясной и простой для понимания форме.

1 ответ

Вы можете получить текущий курс черепахи, позвонив turtle.heading(), Кроме того, его текущая позиция возвращается turtle.position(), Поэтому вы можете использовать их, чтобы сохранить текущее состояние, а затем использовать эти значения для его восстановления. Вот тривиальный пример, иллюстрирующий использование их для того, что вы хотите:

from __future__ import print_function


def get_turtle_state(turtle):
    """ Return turtle's current heading and position. """
    return turtle.heading(), turtle.position()

def restore_turtle_state(turtle, state):
    """ Set the turtle's heading and position to the given values. """
    turtle.setheading(state[0])
    turtle.setposition(state[1][0], state[1][1])


if __name__ == '__main__':
    import turtle

    tortoise = turtle.Turtle()
    saved_state = get_turtle_state(tortoise)
    print('saved state:', saved_state)  # -> (0.0, (0.00,0.00))

    tortoise.forward(100)
    tortoise.left(90)
    print('changed state:', get_turtle_state(tortoise))  # -> (90.0, (100.00,0.00))

    restore_turtle_state(tortoise, saved_state)
    print('restored state:', get_turtle_state(tortoise))  # -> (0.0, (0.00,0.00))

    turtle.getscreen().ontimer(turtle.bye, 2000)  # End script after a delay.
    turtle.mainloop()
Другие вопросы по тегам