(root)/
Python-3.11.7/
Lib/
turtledemo/
tree.py
       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 perf_counter as 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  
      53  def main():
      54      a=clock()
      55      maketree()
      56      b=clock()
      57      return "done: %.2f sec." % (b-a)
      58  
      59  if __name__ == "__main__":
      60      msg = main()
      61      print(msg)
      62      mainloop()