Skip to content

Instantly share code, notes, and snippets.

@mrosata
Last active October 7, 2023 11:08
Show Gist options
  • Save mrosata/b9a56641f15c8350c2d4 to your computer and use it in GitHub Desktop.
Save mrosata/b9a56641f15c8350c2d4 to your computer and use it in GitHub Desktop.
Python Turtle Flower... Stack like recursion
#!/usr/bin/python
# Udacity exercise. Just posted the code here to help anyone who wanted to see the work behind my posted result.
__author__ = 'Michael Rosata [email protected]'
__package__ = ''
from random import random
import turtle
class TurtleArtist(turtle.Turtle):
_origin = (0, 0)
_starts = []
_level = 1
_len = 140
def mark_future_start(self):
self._starts.append(self.position())
def clear_all_starts(self):
self._starts = []
print('Added a new Start')
print(self._starts)
def incrememnt_level(self):
self._level += 1
def to_origin(self):
try:
if self._origin:
self.goto(self._origin)
except AttributeError:
self.home()
def triangle(self, ang_step1, ang_step2):
self.turn_move(ang_step1)
self.mark_future_start()
self.turn_move(ang_step2)
self.to_origin()
def turn_move(self, angle_dist):
"""Pass in (ang, dist) for turtle to turn and move """
self.right(angle_dist[0])
self.forward(angle_dist[1])
def style(self, color='#009b30', shape='turtle', speed=0.1, pen=(0, 0, 0)):
self.color(color)
self.pencolor(pen[0], pen[1], pen[2])
self.shape(shape)
self.speed(speed)
def flower(self, orig_angle1, orig_angle2):
self._origin = self.position()
for x in range(1, 21):
self.triangle(orig_angle1, orig_angle2)
def make_stem(self):
pensize = self.pensize()
self.pencolor('#238c13')
self.pensize(6)
self.setheading(270)
self._starts.append(mike.position())
self.forward(460)
self.penup()
self.to_origin()
self.pendown()
# Return pensize to however it was before method was called
self.pensize(pensize)
def run_through_levels(self):
length = self._len
if self._level > 2:
print('time to end')
return True
for start in self._starts:
self._starts = self._starts[1:]
if len(self._starts) < 3 and self._level == 2:
length = 3
self.penup()
self.goto(start)
self.pendown()
for i in range(1, 2):
mod = length * i ** 0.9
mike.flower((0, mod), (18, 40))
mike.flower((0, mod), (-18, 40))
self.pencolor((random(), random(), random()))
self.incrememnt_level()
# self._len *= 0.2
self._len = 10
self.run_through_levels()
window = turtle.Screen()
mike = TurtleArtist()
mike.goto(0, 100)
mike.pensize(1.1)
mike.shape('turtle')
mike.speed(500)
mike.make_stem()
mike.pencolor('#FBE54E')
mike.run_through_levels()
window.exitonclick()
@opsdri
Copy link

opsdri commented Mar 20, 2017

very clean codes. i hope i can do the same someday 😄

@deemarc
Copy link

deemarc commented Jul 26, 2017

really nice code, thanks for sharing

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment