mirror of
				https://github.com/python/cpython.git
				synced 2025-10-23 01:43:53 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			63 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			63 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| #!/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()
 | 
