首页 > 技术文章 > turtle()几个实例

ylzchs 2020-07-03 15:54 原文

 

 1.用文本内容画圆

import turtle
#text=input('请输入要打印的文字:')
text="我爱你中国!我爱你中国!我爱你中国!我爱你中国!我爱你中国!我爱你中国!我爱你中国!我爱你中国!我爱你中国!"
'''
可近似地将画笔的运动轨迹看为一个正多边形.
根据多边形内角和公式:度数=(边数-2)*180,
那么,每次旋转的度数为:180-度数/角数=180-(边数-2)*180/边数.
易知,边数=角数=文字数,
所以每次旋转的度数为:180-(文字数-2)*180/文字数=360/文字数.
'''
turtle.pu()#抬起笔turtle.penup()
turtle.goto(-100,200)#将画笔移动到坐标为(-100,200)的位置
x=len(text)#x为文本长度
for i in text:
    turtle.speed(1)#设置画笔速度
    turtle.write(i,font='华文中宋')
    turtle.rt(360/x)#turtle顺时针方向移动360/x度
    turtle.pu()#抬起笔
    turtle.fd(30)#向当前画笔方向移动30个像素长度
turtle.hideturtle()#隐藏画笔的turtle形状

效果图:

 2.画玫瑰花

import turtle

import time

turtle.speed(5)

# 设置初始位置  

turtle.penup()  

turtle.left(90)  

turtle.fd(200)  

turtle.pendown()  

turtle.right(90)
# 花蕊  

turtle.fillcolor("red")  

turtle.begin_fill()  

turtle.circle(10,180)  

turtle.circle(25,110)  

turtle.left(50)  

turtle.circle(60,45)  

turtle.circle(20,170)  

turtle.right(24)  

turtle.fd(30)  

turtle.left(10)  

turtle.circle(30,110)  

turtle.fd(20)  

turtle.left(40)  

turtle.circle(90,70)  

turtle.circle(30,150)  

turtle.right(30)  

turtle.fd(15)  

turtle.circle(80,90)  

turtle.left(15)  

turtle.fd(45)  

turtle.right(165)  

turtle.fd(20)  

turtle.left(155)  

turtle.circle(150,80)  

turtle.left(50)  

turtle.circle(150,90)  

turtle.end_fill()  

   

# 花瓣1  

turtle.left(150)  

turtle.circle(-90,70)  

turtle.left(20)  

turtle.circle(75,105)  

turtle.setheading(60)  

turtle.circle(80,98)  

turtle.circle(-90,40)  

  

# 花瓣2  

turtle.left(180)  

turtle.circle(90,40)  

turtle.circle(-80,98)  

turtle.setheading(-83)  

  

# 叶子1  

turtle.fd(30)  

turtle.left(90)  

turtle.fd(25)  

turtle.left(45)  

turtle.fillcolor("green")  

turtle.begin_fill()  

turtle.circle(-80,90)  

turtle.right(90)  

turtle.circle(-80,90)  

turtle.end_fill()  

   

turtle.right(135)  

turtle.fd(60)  

turtle.left(180)  

turtle.fd(85)  

turtle.left(90)  

turtle.fd(80)  

   

# 叶子2  

turtle.right(90)  

turtle.right(45)  

turtle.fillcolor("green")  

turtle.begin_fill()  

turtle.circle(80,90)  

turtle.left(90)  

turtle.circle(80,90)  

turtle.end_fill()  

   

turtle.left(135)  

turtle.fd(60)  

turtle.left(180)  

turtle.fd(60)  

turtle.right(90)  

turtle.circle(200,60) 

效果:

 

 3.画太阳花

import turtle

turtle=turtle.Turtle()#调用turtle库中的turtle()函数创建一个turtle对象
screen=turtle.getscreen()#获取屏幕

turtle.color('red', 'yellow')#画笔为红色,填充为黄色
turtle.begin_fill()
for i in range(50):
    turtle.forward(200)
    turtle.left(170)
turtle.end_fill()
screen.mainloop() #使画布运行完之后不要关闭

效果:

 

 4.数据驱动的动态路径绘制

import turtle as t
def main():
    #设置窗口信息
    t.title("数据驱动的动态路径绘制")#建立标题
    t.setup(800,600,0,0)#设置大小为800*600的窗口,python坐标原点默认设置在窗口中心
    
    #设置画笔
    pen=t.Turtle()#通过turtle()建立画笔pen,其默认位置是窗口原点
    pen.color("red")#设置画笔颜色为红色
    pen.width(5)#设置画笔宽度为5
    pen.shape("turtle")#设置画笔形状为turtle
    pen.speed(1)#设置绘画速度为5
    #读取数据文件到列表result[]中
    result=[]
    file=open("data.txt","r")
    for line in file:
        result.append(list(map(float,line.split(','))))
        #将数据文件的每行数据都存放在result[]中
        #print(result)
    #动态绘制
    for i in range(len(result)):
        pen.color((result[i][3],result[i][4],result[i][5]))
        #每一行的第4-6位来定义画笔颜色
        pen.fd(result[i][0])#向前爬行的距离
#判断语句如为1则为真,0则为假,如果该行的第二个数据是0则画笔向左,如为1画笔向右
        if result[i][1]:
            pen.rt(result[i][2])
            #小乌龟向右爬行并旋转角度为第三个数据
        else:
            pen.lt(result[i][2])
    pen.goto(0,0)#画笔回到原点
    
main()
        

效果:

 

 

 5.画五角星

#使用turtle库绘制并填充五角星

from turtle import Turtle   #引用turtle库
p=Turtle()      #给p赋值为
p.speed(2)     #速度
p.pensize(5)   #画笔宽度
p.color("red")    #画笔颜色
p.fillcolor("yellow")#填充颜色
#以上两句也可以用  p.color("red","yellow")代替

p.begin_fill()     #填充颜色开始
for i in range(5):      #循环5次绘制五角星
    p.forward(400)      
    p.right(144)        #五角星的每个角为144度
p.end_fill()   #填充图形颜色前调用

效果:

 

 

 

6.画树

#绘制树的代码
#from turtle import Turtle
#p=Turtle()

import turtle as p #这一句相当于上面的两句
def tree(plist,l,a,f):
    """
    plist 是存放一组turtle对象的列表
    l  是树枝的长度
    a  是画笔调整角度
    f  是下层枝杈长度与下层枝杈长度的比例
    """
    if l>5:
        lst=[]
        #for循环语句主要是用来完成lst[]列表里存放的画笔对象对应的一支树枝的绘制及左右各分支的绘画准备
        for p in plist:
            p.forward(l)#沿当前的方向画画,完成主杆的绘制
            q=p.clone()
            """相当于在当前海龟的位置处克隆出另外一只位置方向等属性相同的海龟,并取名为q,
               之后使用q.任意turtle()可操作这只海龟,q海龟与之前的海龟完全独立,相当于两
               只海龟经过克隆后思维就完全独立了,改变turtle海龟或者q海龟的属性对另一个没有影响"""
            p.left(a)#将原来的海龟向左调整角度a
            q.right(a)#将克隆的海龟向右调整角度a
            lst.append(p)#将对象存储在lst[]中,用来进行下一层枝杈绘制的递归调用
            lst.append(q)#将对象存储在lst[]中,用来进行下一层枝杈绘制的递归调用
        tree(lst,l*f,a,f)
def main():
   # from turtle import Turtle
    #p=Turtle
    p.color("green")#画笔颜色
    p.pensize(5)#画笔宽度
    p.hideturtle()#隐藏画笔的turtle形状
    p.speed(1)
    p.getscreen().tracer(30,0)
    
    """ turtle.tracer()是为了加快作图的,你可以在里面添加参数,比如:
        turtle.tracer(False)或者turtle.tracer(0):图形将一次性画好
        turtle.tracer(1):图形按照正常速度进行,可有可无
        turtle.tracer(4):在循环中,图形将一次画出4次循环的图"""
    p.left(90)#画笔左转90度
    p.penup()#提起笔
    p.goto(100,100)#去这个坐标点
    p.pendown()#落下笔
    t=tree([p],110,65,0.6375)#调用tree()函数
    p.getscreen().tracer(30,0)
    p.right(90)#画笔左转90度
    p.penup()#提起笔
    p.goto(-300,100)#去这个坐标点
    p.pendown()#落下笔
    t=tree([p],110,65,0.6375)#调用tree()函数
    p.getscreen().tracer(30,0)
    p.right(90)#画笔左转90度
    p.penup()#提起笔
    p.goto(-300,-300)#去这个坐标点
    p.pendown()#落下笔
    t=tree([p],110,65,0.6375)#调用tree()函数
    p.getscreen().tracer(30,0)
    p.right(90)#画笔左转90度
    p.penup()#提起笔
    p.goto(100,-300)#去这个坐标点
    p.pendown()#落下笔
    t=tree([p],110,65,0.6375)#调用tree()函数
    """[p]是原来的小海龟的turtle对象列表??????????不太明白"""
   
main()

效果:

 

 

 


版权声明:本文为CSDN博主「Commander_Wing」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Commander_WingT/java/article/details/88748970

推荐阅读