1 #!/usr/bin/env python3 2 """ turtle-example-suite: 3 4 tdemo_tree.py 5 6 Displays a 'breadth-first-tree' - in contrast 7 to the classical Logo tree drawing programs, 8 which use a depth-first-algorithm. 9 10 Uses: 11 (1) a tree-generator, where the drawing is 12 quasi the side-effect, whereas the generator 13 always yields None. 14 (2) Turtle-cloning: At each branching point 15 the current pen is cloned. So in the end 16 there are 1024 turtles. 17 """ 18 from turtle import Turtle, mainloop 19 from time import clock 20 21 def 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 39 def 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 print(len(p.getscreen().turtles())) 53 54 def main(): 55 a=clock() 56 maketree() 57 b=clock() 58 return "done: %.2f sec." % (b-a) 59 60 if __name__ == "__main__": 61 msg = main() 62 print(msg) 63 mainloop() 64