一、简单例子
1.太阳花
import turtleimport time
turtle.speed(10)#同时设置pencolor=color1, fillcolor=color2
turtle.color("red","yellow")
turtle.begin_fill()for _inrange(50):
turtle.forward(200)
turtle.left(170)
turtle.end_fill()
turtle.done()
2.螺旋方阵
import turtle
turtle.color('red','yellow')
turtle.speed("fastest")
turtle.begin_fill()for xinrange(100):
turtle.forward(2*x)
turtle.left(90)
turtle.end_fill()
turtle.done()
3.彩色螺旋
import turtle
turtle.speed("fastest")
turtle.pensize(2)
turtle.bgcolor("black")
colors=["red","blue","yellow","purple"]for xinrange(300):
turtle.color(colors[x%4])
turtle.forward(2*x)
turtle.left(91)
turtle.done()
import turtle
turtle.speed("fastest")
turtle.pensize(2)
turtle.bgcolor("black")
turtle.color("red")for x inrange(200):
turtle.forward(x)
turtle.left(61)
turtle.done()
要是想超快的绘制,把turtle.speed("fastest")
换成turtle.tracer(0)
,打开直接就是结果。
4.七段数码管
import turtle,timedefdrawLine(draw):
turtle.pendown()if drawelse turtle.penup()
turtle.fd(40)
turtle.right(90)defdrawDight(dight):#根据数字绘制七段数码管
drawLine(True)if dightin[2,3,4,5,6,8,9]else drawLine(False)
drawLine(True)if dightin[0,1,3,4,5,6,7,8,9]else drawLine(False)
drawLine(True)if dightin[0,2,3,5,6,8,9]else drawLine(False)
drawLine(True)if dightin[0,2,6,8]else drawLine(False)
turtle.left(90)
drawLine(True)if dightin[0,4,5,6,8,9]else drawLine(False)
drawLine(True)if dightin[0,2,3,5,6,7,8,9]else drawLine(False)
drawLine(True)if dightin[0,1,2,3,4,7,8,9]else drawLine(False)
turtle.left(180)
turtle.penup()#为绘制后续数字确定位置
turtle.fd(20)#为绘制后续数字确定位置defdrawDate(date):
turtle.pencolor("red")for iin date:if i=='-':
turtle.write('年',font=("Arial",18,"normal"))
turtle.pencolor("green")
turtle.fd(40)elif i=='=':
turtle.write('月',font=("Arial",18,"normal"))
turtle.pencolor("blue")
turtle.fd(40)elif i=='+':
turtle.write('日',font=("Arial",18,"normal"))else:
drawDight(eval(i))defmain():
turtle.speed(10)
turtle.setup(800,350,200,200)
turtle.penup()
turtle.fd(-300)
turtle.pensize(5)
drawDate(time.strftime('%Y-%m=%d+',time.gmtime()))
turtle.hideturtle()
turtle.done()
main()
二、官方例子
1.打开方法
turtledemo 包汇集了一组演示脚本。在cmd命令行中打入
python -m turtledemo
2.bytedesign
from turtleimport Turtle, mainloopfrom timeimport perf_counteras clock# wrapper for any additional drawing routines# that need to know about each otherclassDesigner(Turtle):defdesign(self, homePos, scale):
self.up()for iinrange(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)defwheel(self, initpos, scale):
self.right(54)for iinrange(4):
self.pentpiece(initpos, scale)
self.down()
self.left(36)for iinrange(5):
self.tripiece(initpos, scale)
self.left(36)for iinrange(5):
self.down()
self.right(72)
self.forward(28* scale)
self.up()
self.backward(28* scale)
self.left(54)
self.getscreen().update()deftripiece(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()defpentpiece(self, initpos, scale):
oldh= self.heading()
self.up()
self.forward(29* scale)
self.down()for iinrange(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 iinrange(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()defpentl(self, side, ang, scale):if side<(2* scale):return
self.forward(side)
self.left(ang)
self.pentl(side-(.38* scale), ang, scale)defpentr(self, side, ang, scale):if side<(2* scale):return
self.forward(side)
self.right(ang)
self.pentr(side-(.38* scale), ang, scale)deftripolyr(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)deftripolyl(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)defcenterpiece(self, s, a, scale):
self.forward(s); self.left(a)if s<(7.5* scale):return
self.centerpiece(s-(1.2* scale), a, scale)defmain():
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()
3.chaos
from turtleimport*
N=80deff(x):return3.9*x*(1-x)defg(x):return3.9*(x-x**2)defh(x):return3.9*x-3.9*x*xdefjumpto(x, y):
penup(); goto(x,y)defline(x1, y1, x2, y2):
jumpto(x1, y1)
pendown()
goto(x2, y2)defcoosys():
line(-1,0, N+1,0)
line(0,-0.1,0,1.1)defplot(fun, start, color):
pencolor(color)
x= start
jumpto(0, x)
pendown()
dot(5)for iinrange(N):
x=fun(x)
goto(i+1,x)
dot(5)defmain():
reset()
setworldcoordinates(-1.0,-0.1, N+1,1.1)
speed(0)
hideturtle()
coosys()
plot(f,0.35,"blue")
plot(g,0.35,"green")
plot(h,0.35,"red")# Now zoom in:for sinrange(100):
setworldcoordinates(0.5*s,-0.1, N+1,1.1)return"Done!"if __name__=="__main__":
main()
mainloop()
4.clock
from turtleimport*from datetimeimport datetimedefjump(distanz, winkel=0):
penup()
right(winkel)
forward(distanz)
left(winkel)
pendown()defhand(laenge, spitze):
fd(laenge*1.15)
rt(90)
fd(spitze/2.0)
lt(120)
fd(spitze)
lt(120)
fd(spitze)
lt(120)
fd(spitze/2.0)defmake_hand_shape(name, laenge, spitze):
reset()
jump(-laenge*0.15)
begin_poly()
hand(laenge, spitze)
end_poly()
hand_form= get_poly()
register_shape(name, hand_form)defclockface(radius):
reset()
pensize(7)for iinrange(60):
jump(radius)if i%5==0:
fd(25)
jump(-radius-25