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 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 print(len(p.getscreen().turtles())) 53 54def main(): 55 a=clock() 56 maketree() 57 b=clock() 58 return "done: %.2f sec." % (b-a) 59 60if __name__ == "__main__": 61 msg = main() 62 print(msg) 63 mainloop() 64