mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 11:49:12 +00:00 
			
		
		
		
	bpo-31803: time.clock() and time.get_clock_info('clock') now emit a
DeprecationWarning warning.
Replace time.clock() with time.perf_counter() in tests and demos.
Remove also hasattr(time, 'monotonic') in test_time since time.monotonic()
is now always available since Python 3.5.
		
	
			
		
			
				
	
	
		
			108 lines
		
	
	
	
		
			2.9 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			108 lines
		
	
	
	
		
			2.9 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
#!/usr/bin/env python3
 | 
						|
"""     turtlegraphics-example-suite:
 | 
						|
 | 
						|
             tdemo_forest.py
 | 
						|
 | 
						|
Displays a 'forest' of 3 breadth-first-trees
 | 
						|
similar to the one in tree.
 | 
						|
For further remarks see tree.py
 | 
						|
 | 
						|
This example is a 'breadth-first'-rewrite of
 | 
						|
a Logo program written by Erich Neuwirth. See
 | 
						|
http://homepage.univie.ac.at/erich.neuwirth/
 | 
						|
"""
 | 
						|
from turtle import Turtle, colormode, tracer, mainloop
 | 
						|
from random import randrange
 | 
						|
from time import perf_counter as clock
 | 
						|
 | 
						|
def symRandom(n):
 | 
						|
    return randrange(-n,n+1)
 | 
						|
 | 
						|
def randomize( branchlist, angledist, sizedist ):
 | 
						|
    return [ (angle+symRandom(angledist),
 | 
						|
              sizefactor*1.01**symRandom(sizedist))
 | 
						|
                     for angle, sizefactor in branchlist ]
 | 
						|
 | 
						|
def randomfd( t, distance, parts, angledist ):
 | 
						|
    for i in range(parts):
 | 
						|
        t.left(symRandom(angledist))
 | 
						|
        t.forward( (1.0 * distance)/parts )
 | 
						|
 | 
						|
def tree(tlist, size, level, widthfactor, branchlists, angledist=10, sizedist=5):
 | 
						|
    # benutzt Liste von turtles und Liste von Zweiglisten,
 | 
						|
    # fuer jede turtle eine!
 | 
						|
    if level > 0:
 | 
						|
        lst = []
 | 
						|
        brs = []
 | 
						|
        for t, branchlist in list(zip(tlist,branchlists)):
 | 
						|
            t.pensize( size * widthfactor )
 | 
						|
            t.pencolor( 255 - (180 - 11 * level + symRandom(15)),
 | 
						|
                        180 - 11 * level + symRandom(15),
 | 
						|
                        0 )
 | 
						|
            t.pendown()
 | 
						|
            randomfd(t, size, level, angledist )
 | 
						|
            yield 1
 | 
						|
            for angle, sizefactor in branchlist:
 | 
						|
                t.left(angle)
 | 
						|
                lst.append(t.clone())
 | 
						|
                brs.append(randomize(branchlist, angledist, sizedist))
 | 
						|
                t.right(angle)
 | 
						|
        for x in tree(lst, size*sizefactor, level-1, widthfactor, brs,
 | 
						|
                      angledist, sizedist):
 | 
						|
            yield None
 | 
						|
 | 
						|
 | 
						|
def start(t,x,y):
 | 
						|
    colormode(255)
 | 
						|
    t.reset()
 | 
						|
    t.speed(0)
 | 
						|
    t.hideturtle()
 | 
						|
    t.left(90)
 | 
						|
    t.penup()
 | 
						|
    t.setpos(x,y)
 | 
						|
    t.pendown()
 | 
						|
 | 
						|
def doit1(level, pen):
 | 
						|
    pen.hideturtle()
 | 
						|
    start(pen, 20, -208)
 | 
						|
    t = tree( [pen], 80, level, 0.1, [[ (45,0.69), (0,0.65), (-45,0.71) ]] )
 | 
						|
    return t
 | 
						|
 | 
						|
def doit2(level, pen):
 | 
						|
    pen.hideturtle()
 | 
						|
    start(pen, -135, -130)
 | 
						|
    t = tree( [pen], 120, level, 0.1, [[ (45,0.69), (-45,0.71) ]] )
 | 
						|
    return t
 | 
						|
 | 
						|
def doit3(level, pen):
 | 
						|
    pen.hideturtle()
 | 
						|
    start(pen, 190, -90)
 | 
						|
    t = tree( [pen], 100, level, 0.1, [[ (45,0.7), (0,0.72), (-45,0.65) ]] )
 | 
						|
    return t
 | 
						|
 | 
						|
# Hier 3 Baumgeneratoren:
 | 
						|
def main():
 | 
						|
    p = Turtle()
 | 
						|
    p.ht()
 | 
						|
    tracer(75,0)
 | 
						|
    u = doit1(6, Turtle(undobuffersize=1))
 | 
						|
    s = doit2(7, Turtle(undobuffersize=1))
 | 
						|
    t = doit3(5, Turtle(undobuffersize=1))
 | 
						|
    a = clock()
 | 
						|
    while True:
 | 
						|
        done = 0
 | 
						|
        for b in u,s,t:
 | 
						|
            try:
 | 
						|
                b.__next__()
 | 
						|
            except:
 | 
						|
                done += 1
 | 
						|
        if done == 3:
 | 
						|
            break
 | 
						|
 | 
						|
    tracer(1,10)
 | 
						|
    b = clock()
 | 
						|
    return "runtime: %.2f sec." % (b-a)
 | 
						|
 | 
						|
if __name__ == '__main__':
 | 
						|
    main()
 | 
						|
    mainloop()
 |