diff options
author | Alexander Belopolsky <alexander.belopolsky@gmail.com> | 2010-11-01 17:39:37 +0000 |
---|---|---|
committer | Alexander Belopolsky <alexander.belopolsky@gmail.com> | 2010-11-01 17:39:37 +0000 |
commit | ea13d9d86bf62c6f1d2ba0cc7cc7f9a7c0683e47 (patch) | |
tree | c2184842b163da5df6fd30c671c62083c73cb100 /Lib/turtledemo/tree.py | |
parent | 8291af2354d194fd60079380367f4ecb0eba5397 (diff) | |
download | cpython-ea13d9d86bf62c6f1d2ba0cc7cc7f9a7c0683e47.tar.gz cpython-ea13d9d86bf62c6f1d2ba0cc7cc7f9a7c0683e47.zip |
Issue #10199: Moved Demo/turtle under Lib/
Diffstat (limited to 'Lib/turtledemo/tree.py')
-rw-r--r-- | Lib/turtledemo/tree.py | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/Lib/turtledemo/tree.py b/Lib/turtledemo/tree.py new file mode 100644 index 00000000000..9c0b1f7bb43 --- /dev/null +++ b/Lib/turtledemo/tree.py @@ -0,0 +1,63 @@ +#!/usr/bin/env python3 +""" turtle-example-suite: + + tdemo_tree.py + +Displays a 'breadth-first-tree' - in contrast +to the classical Logo tree drawing programs, +which use a depth-first-algorithm. + +Uses: +(1) a tree-generator, where the drawing is +quasi the side-effect, whereas the generator +always yields None. +(2) Turtle-cloning: At each branching point the +current pen is cloned. So in the end there +are 1024 turtles. +""" +from turtle import Turtle, mainloop +from time import clock + +def tree(plist, l, a, f): + """ plist is list of pens + l is length of branch + a is half of the angle between 2 branches + f is factor by which branch is shortened + from level to level.""" + if l > 3: + lst = [] + for p in plist: + p.forward(l) + q = p.clone() + p.left(a) + q.right(a) + lst.append(p) + lst.append(q) + for x in tree(lst, l*f, a, f): + yield None + +def maketree(): + p = Turtle() + p.setundobuffer(None) + p.hideturtle() + p.speed(0) + p.getscreen().tracer(30,0) + p.left(90) + p.penup() + p.forward(-210) + p.pendown() + t = tree([p], 200, 65, 0.6375) + for x in t: + pass + print(len(p.getscreen().turtles())) + +def main(): + a=clock() + maketree() + b=clock() + return "done: %.2f sec." % (b-a) + +if __name__ == "__main__": + msg = main() + print(msg) + mainloop() |