美文网首页代码改变世界
python的绘图利器--海龟绘图turtle

python的绘图利器--海龟绘图turtle

作者: 树哥区块链 | 来源:发表于2019-05-30 03:35 被阅读0次

    我们之前提到Python是一种超级语言,因为其提供了极其丰富的库,需要什么拿来黏合一下就可以直接使用。就像现在的有些汽车工厂一样,根本不用重新发明生产什么,只需要买来相应部件等把它们组装起来就好。

    作为你学习python的第一个程序,树哥决定直接来一个实战干货程序:利用海龟turtle来画一个奥运五环。这样就既可以理解库的概念和使用,又可以理解程序的基本概念。

    闲话少叙,直接上程序:

    C2CD5756-27DB-4658-AE38-3228803B2C10.png

    总共26行代码,树哥建议你把每行代码敲进去执行一下,你会发现执行的效果如下图:

    4E7FA906-A667-49FB-AB24-18680ACA9EC4.png

    这26行代码说多不多,不过对于没有看过代码的人来讲,可能会有点压力。
    不过可以想到的是,这5个环画法都一样,再看到那么多长得很像的代码,就知道重复的代码很多,也难不在哪里。

    我们把这段代码先分成几个部分,如下图:


    B9A7490F-3A8C-4B64-B15E-3CCB5819C743.png

    从这张图中可以看出来,程序就分为两个主体部分:

    • 公共部分
    • 画图部分

    当然,你可能会说,结尾不是还有一句:P.done()吗?

    这个语句是个固定格式,有这句话画完图,绘图窗口还保留,如果没有这句话,绘图窗口就直接关闭了,所以初期都加上就好了。

    下面,我们就进入正题:

    公共设置

    公共设置的第一条

    import turtle

    import是导入,turtle是海龟绘图库,所以这句话就是导入海龟会图库的意思,记住就可以了。

    turtle是一个专门用于绘图的库,需要画图的时候我们直接import一下就好,在此需要说明的有两点:

    • 其他库也一样,直接import一下就好,例如:pyquery 网页解析库, pymysql 存储库等等。
    • 安装python的时候自带的turtle库被称作标准库,需要另外安装的库称作第三方库。也就是说,第三方库必须先安装,再import。

    第二条:p = turtle

    这条语句相当于把给turtle起了个比较短的名字叫做p,如果没有这条语句的话,那么下面的语句就变成:
    turtle.pensize(3)
    这条语句其实没有什么实际意义,就是可以让下面的语句简单一些而已。有点像我们平常所说的:深圳华为科技有限公司,以下简称:华为,一个道理。

    第三句:p.pensize(3)

    就是turtle.pensize(3)的缩写形式,意思是画笔的粗细为3个像素。pensize就是两个单词组合:pen(画笔)+size(大小)。

    画图部分

    画图部分语句基本都是重复的,我们把重复的几个语句拿出来分析一下就很了然了。

    DB4F17A8-2D38-413A-9EC1-38EF93D6ABB6.png

    第一句:p.pu()

    其实只要知道pu是由两个单词:pen(画笔)+up(拿起)组成就知道这句话的意思了:把画笔抬起来,之后画笔的移动不会在纸面上留下痕迹。

    p.goto(60,0)

    goto的意思是去的意思,也就是说把画笔拿到画布的坐标点(60,0)去。画布的中心为(0,0),所以当前的位置就是顺着x轴移动60像素。

    因为上个语句把画笔抬起来了,所以从当前位置移动到(60,0)不会再画布上留下痕迹。

    p.pd()

    pd与pu对应,是pen(画笔)+down(放下)的缩写,也就是把画笔落下了,之后画笔移动就会在画布上留下痕迹。

    p.color(“black”)

    这句话太好理解了,就是把画笔的颜色改成黑色,几个圆圈的颜色不同,就是要在画圆圈之前把画笔的颜色变了。需要知道的是,颜色除了写英文之外,还可以使用RGB(255.255.255)和小数标识。不过,这个也不需要记忆,需要的时候查询就好。

    p.circle(30,360)

    最最重要的画圆终于出现了,circle就是画个圆,直径是30像素,画360度,也就是一个整个圆。当然也可以画成180度半个圆弧,或者90度、30度甚至15度的圆弧。

    轻轻易易地把一段程序解读完成了,这个绘图其实很简单,就两个步骤:

    • 设置公共变量
    • 绘图

    当然,这个库还有一些内容,我们稍作补充:

    其他参数

    • turtle.setup设置绘图窗口大小和位置。
    • turtle.colormode 颜色模式RGB还是英文
    • turtle.speed 画笔速度
    • turtle.fd向前走直线,fd=forward
    • turtle.bk 向后走直线 bk=back
    • turtle.left 向左转
    • turtle.right 向右转
    • turtle.seth 转向角度

    很简单吧?

    本质上,库的含义是,库是已经编写好的程序模块,然后给我们提供基本的功能,我们通过这些基本功能“咒语”来驱动这些基本功能来实现我们的目的。

    虽然这个库的内容也没有很多,不过确实也没有必要记忆或者学习什么,需要的时候只要搜一下这个库提供哪些功能接口就好了。

    总结:python的强大不在于程序本身,而在于其有强大的生态,也就是有无数的库可以被我们使用,我们可以把他们当成模组直接拿来使用。已经集成到python中的库被称作标准库,没有集成进去的叫做第三方库,安装一下就好。最后,附一个绘制小猪佩奇的小代码,如果你有兴趣也可以复制尝试执行一下,需要其他案例,可以私信索要。

    import turtle

    画鼻子

    def drawNose():
    turtle.penup()
    turtle.seth(90)
    turtle.fd(100)
    turtle.pendown()
    turtle.begin_fill()
    turtle.fillcolor('black')
    turtle.seth(45)
    turtle.fd(25)
    turtle.seth(135)
    turtle.circle(25, 95)
    turtle.seth(315)
    turtle.fd(25)
    turtle.end_fill()

    画眼睛

    def drawEyes(seth, fd, r):
    turtle.penup()
    turtle.seth(seth)
    turtle.fd(fd)
    turtle.pendown()
    turtle.begin_fill()
    turtle.fillcolor('black')
    turtle.circle(50)
    turtle.end_fill()
    turtle.penup()
    turtle.circle(50, r)
    turtle.pendown()
    turtle.begin_fill()
    turtle.fillcolor('white')
    turtle.circle(20)
    turtle.end_fill()

    画脸

    def drawFace(seth, fd):
    turtle.penup()
    turtle.seth(seth)
    turtle.fd(fd)
    turtle.pendown()
    turtle.begin_fill()
    turtle.fillcolor('red')
    turtle.circle(70)
    turtle.end_fill()

    画嘴巴

    def drawLip():
    turtle.penup()
    turtle.seth(135)
    turtle.fd(250)
    turtle.pendown()
    turtle.seth(-300)
    turtle.circle(30, -65)
    turtle.begin_fill()
    turtle.fillcolor('Firebrick')
    turtle.seth(165)
    turtle.fd(140)
    turtle.seth(195)
    turtle.fd(140)
    turtle.seth(-360)
    turtle.circle(30, -65)
    turtle.penup()
    turtle.seth(-60)
    turtle.circle(30, 65)
    turtle.pendown()
    turtle.seth(-70)
    turtle.fd(240)
    turtle.circle(55, 140)
    turtle.seth(70)
    turtle.fd(240)
    turtle.end_fill()
    turtle.seth(-110)
    turtle.fd(80)
    turtle.begin_fill()
    turtle.fillcolor('Firebrick')
    turtle.seth(120)
    turtle.circle(120, 123)
    turtle.seth(-70)
    turtle.fd(165)
    turtle.circle(55, 140)
    turtle.seth(72)
    turtle.fd(165)
    turtle.end_fill()

    主函数

    def main():
    turtle.pensize(4)
    turtle.hideturtle()
    turtle.setup(1000, 600)
    turtle.speed(10)
    turtle.screensize(bg='yellow')
    drawNose()
    drawEyes(160, 250, 60)
    drawEyes(-9.5, 530, 230)
    drawFace(195, 600)
    drawFace(-11, 720)
    drawLip()
    turtle.done()

    if name == 'main':
    main()

    相关文章

      网友评论

        本文标题:python的绘图利器--海龟绘图turtle

        本文链接:https://www.haomeiwen.com/subject/aguptctx.html