mirror of
https://github.com/python/cpython.git
synced 2024-11-30 18:51:15 +01:00
c8b45a385a
* gh-118673: Remove shebang and executable bits from stdlib modules. * Removed shebangs and exe bits on turtledemo scripts. The setting was inappropriate for '__main__' and inconsistent across the other modules. The scripts can still be executed directly by invoking with the desired interpreter.
62 lines
1.3 KiB
Python
62 lines
1.3 KiB
Python
""" 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 perf_counter as 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
|
|
|
|
def main():
|
|
a=clock()
|
|
maketree()
|
|
b=clock()
|
|
return "done: %.2f sec." % (b-a)
|
|
|
|
if __name__ == "__main__":
|
|
msg = main()
|
|
print(msg)
|
|
mainloop()
|