1#!/usr/bin/env python3 2""" turtle-example-suite: 3 4 tdemo_tree.py 5 6Displays a 'breadth-first-tree' - in contrast 7to the classical Logo tree drawing programs, 8which use a depth-first-algorithm. 9 10Uses: 11(1) a tree-generator, where the drawing is 12quasi the side-effect, whereas the generator 13always yields None. 14(2) Turtle-cloning: At each branching point 15the current pen is cloned. So in the end 16there are 1024 turtles. 17""" 18from turtle import Turtle, mainloop 19from time import perf_counter as clock 20 21def tree(plist, l, a, f): 22 """ plist is list of pens 23 l is length of branch 24 a is half of the angle between 2 branches 25 f is factor by which branch is shortened 26 from level to level.""" 27 if l > 3: 28 lst = [] 29 for p in plist: 30 p.forward(l) 31 q = p.clone() 32 p.left(a) 33 q.right(a) 34 lst.append(p) 35 lst.append(q) 36 for x in tree(lst, l*f, a, f): 37 yield None 38 39def maketree(): 40 p = Turtle() 41 p.setundobuffer(None) 42 p.hideturtle() 43 p.speed(0) 44 p.getscreen().tracer(30,0) 45 p.left(90) 46 p.penup() 47 p.forward(-210) 48 p.pendown() 49 t = tree([p], 200, 65, 0.6375) 50 for x in t: 51 pass 52 53def main(): 54 a=clock() 55 maketree() 56 b=clock() 57 return "done: %.2f sec." % (b-a) 58 59if __name__ == "__main__": 60 msg = main() 61 print(msg) 62 mainloop() 63