mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 07:31:38 +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.
		
	
			
		
			
				
	
	
		
			161 lines
		
	
	
	
		
			4.1 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			161 lines
		
	
	
	
		
			4.1 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
#!/usr/bin/env python3
 | 
						|
"""      turtle-example-suite:
 | 
						|
 | 
						|
        tdemo_bytedesign.py
 | 
						|
 | 
						|
An example adapted from the example-suite
 | 
						|
of PythonCard's turtle graphics.
 | 
						|
 | 
						|
It's based on an article in BYTE magazine
 | 
						|
Problem Solving with Logo: Using Turtle
 | 
						|
Graphics to Redraw a Design
 | 
						|
November 1982, p. 118 - 134
 | 
						|
 | 
						|
-------------------------------------------
 | 
						|
 | 
						|
Due to the statement
 | 
						|
 | 
						|
t.delay(0)
 | 
						|
 | 
						|
in line 152, which sets the animation delay
 | 
						|
to 0, this animation runs in "line per line"
 | 
						|
mode as fast as possible.
 | 
						|
"""
 | 
						|
 | 
						|
from turtle import Turtle, mainloop
 | 
						|
from time import perf_counter as clock
 | 
						|
 | 
						|
# wrapper for any additional drawing routines
 | 
						|
# that need to know about each other
 | 
						|
class Designer(Turtle):
 | 
						|
 | 
						|
    def design(self, homePos, scale):
 | 
						|
        self.up()
 | 
						|
        for i in range(5):
 | 
						|
            self.forward(64.65 * scale)
 | 
						|
            self.down()
 | 
						|
            self.wheel(self.position(), scale)
 | 
						|
            self.up()
 | 
						|
            self.backward(64.65 * scale)
 | 
						|
            self.right(72)
 | 
						|
        self.up()
 | 
						|
        self.goto(homePos)
 | 
						|
        self.right(36)
 | 
						|
        self.forward(24.5 * scale)
 | 
						|
        self.right(198)
 | 
						|
        self.down()
 | 
						|
        self.centerpiece(46 * scale, 143.4, scale)
 | 
						|
        self.getscreen().tracer(True)
 | 
						|
 | 
						|
    def wheel(self, initpos, scale):
 | 
						|
        self.right(54)
 | 
						|
        for i in range(4):
 | 
						|
            self.pentpiece(initpos, scale)
 | 
						|
        self.down()
 | 
						|
        self.left(36)
 | 
						|
        for i in range(5):
 | 
						|
            self.tripiece(initpos, scale)
 | 
						|
        self.left(36)
 | 
						|
        for i in range(5):
 | 
						|
            self.down()
 | 
						|
            self.right(72)
 | 
						|
            self.forward(28 * scale)
 | 
						|
            self.up()
 | 
						|
            self.backward(28 * scale)
 | 
						|
        self.left(54)
 | 
						|
        self.getscreen().update()
 | 
						|
 | 
						|
    def tripiece(self, initpos, scale):
 | 
						|
        oldh = self.heading()
 | 
						|
        self.down()
 | 
						|
        self.backward(2.5 * scale)
 | 
						|
        self.tripolyr(31.5 * scale, scale)
 | 
						|
        self.up()
 | 
						|
        self.goto(initpos)
 | 
						|
        self.setheading(oldh)
 | 
						|
        self.down()
 | 
						|
        self.backward(2.5 * scale)
 | 
						|
        self.tripolyl(31.5 * scale, scale)
 | 
						|
        self.up()
 | 
						|
        self.goto(initpos)
 | 
						|
        self.setheading(oldh)
 | 
						|
        self.left(72)
 | 
						|
        self.getscreen().update()
 | 
						|
 | 
						|
    def pentpiece(self, initpos, scale):
 | 
						|
        oldh = self.heading()
 | 
						|
        self.up()
 | 
						|
        self.forward(29 * scale)
 | 
						|
        self.down()
 | 
						|
        for i in range(5):
 | 
						|
            self.forward(18 * scale)
 | 
						|
            self.right(72)
 | 
						|
        self.pentr(18 * scale, 75, scale)
 | 
						|
        self.up()
 | 
						|
        self.goto(initpos)
 | 
						|
        self.setheading(oldh)
 | 
						|
        self.forward(29 * scale)
 | 
						|
        self.down()
 | 
						|
        for i in range(5):
 | 
						|
            self.forward(18 * scale)
 | 
						|
            self.right(72)
 | 
						|
        self.pentl(18 * scale, 75, scale)
 | 
						|
        self.up()
 | 
						|
        self.goto(initpos)
 | 
						|
        self.setheading(oldh)
 | 
						|
        self.left(72)
 | 
						|
        self.getscreen().update()
 | 
						|
 | 
						|
    def pentl(self, side, ang, scale):
 | 
						|
        if side < (2 * scale): return
 | 
						|
        self.forward(side)
 | 
						|
        self.left(ang)
 | 
						|
        self.pentl(side - (.38 * scale), ang, scale)
 | 
						|
 | 
						|
    def pentr(self, side, ang, scale):
 | 
						|
        if side < (2 * scale): return
 | 
						|
        self.forward(side)
 | 
						|
        self.right(ang)
 | 
						|
        self.pentr(side - (.38 * scale), ang, scale)
 | 
						|
 | 
						|
    def tripolyr(self, side, scale):
 | 
						|
        if side < (4 * scale): return
 | 
						|
        self.forward(side)
 | 
						|
        self.right(111)
 | 
						|
        self.forward(side / 1.78)
 | 
						|
        self.right(111)
 | 
						|
        self.forward(side / 1.3)
 | 
						|
        self.right(146)
 | 
						|
        self.tripolyr(side * .75, scale)
 | 
						|
 | 
						|
    def tripolyl(self, side, scale):
 | 
						|
        if side < (4 * scale): return
 | 
						|
        self.forward(side)
 | 
						|
        self.left(111)
 | 
						|
        self.forward(side / 1.78)
 | 
						|
        self.left(111)
 | 
						|
        self.forward(side / 1.3)
 | 
						|
        self.left(146)
 | 
						|
        self.tripolyl(side * .75, scale)
 | 
						|
 | 
						|
    def centerpiece(self, s, a, scale):
 | 
						|
        self.forward(s); self.left(a)
 | 
						|
        if s < (7.5 * scale):
 | 
						|
            return
 | 
						|
        self.centerpiece(s - (1.2 * scale), a, scale)
 | 
						|
 | 
						|
def main():
 | 
						|
    t = Designer()
 | 
						|
    t.speed(0)
 | 
						|
    t.hideturtle()
 | 
						|
    t.getscreen().delay(0)
 | 
						|
    t.getscreen().tracer(0)
 | 
						|
    at = clock()
 | 
						|
    t.design(t.position(), 2)
 | 
						|
    et = clock()
 | 
						|
    return "runtime: %.2f sec." % (et-at)
 | 
						|
 | 
						|
if __name__ == '__main__':
 | 
						|
    msg = main()
 | 
						|
    print(msg)
 | 
						|
    mainloop()
 |