Python语言基础学习(六)

前言

本文介绍如何用Python里的turtle模块,并给出绘制小猪佩奇的代码说明。

Turtle介绍

海龟绘图(Turtle Graphics)是1966年被开发出来的,专门给儿童学习编程语言,后来被移植到各种高级语言中,Python内置了turtle库,可以通过from turtle import *来导入,详细的官方文档见:https://docs.python.org/3.3/library/turtle.html,快速上手见:https://www.cnblogs.com/nowgood/p/turtle.html,一个很好的详细入门的系列博客:https://segmentfault.com/a/1190000017854607,https://segmentfault.com/a/1190000017867847,https://segmentfault.com/a/1190000017873112。

Turtle画图主要就是确定:

  • 坐标
    goto(x,y) #去到绝对坐标x,y处
    penup() #抬起笔
    pendown() #落笔,开始画。这两步中间加上方向语句可以去到相对位置处
  • 方向
    setheading(angle)#接下来绘画的绝对角度
    left(angle)#接下来绘画的相对角度,相对于上次方向向左转多少度
    right(angle)#接下来绘画的相对角度,相对于上次方向向右转多少度
  • 位移
    forward(distance) #或者fd
    backward(distance) #或者bd
    circle(半径,弧度) #画圆或者弧线

另外需要设置的:

  • 绘制流程中的语句
    down() #让会话窗口不要关闭
  • 美观相关的语句
    pensize(25) #画笔粗细
    pencolor('green') #画笔颜色,可选'red','green','blue','gray','brown'等
    fillcolor('red') #填充颜色
    bengin_fill() #需要填充的图形要在画之前加一句
    end_fill() #需要填充的图形要在画好后加一句
  • 界面设置的语句
    mode('standard') #切换坐标角度系统,'standard'是默认的,还有一个选择是’logo‘,因为turtle本来就是用LOGO语言开发的。
    # standard:以绘图界面的中心点为坐标圆点(0,0),以x坐标正方向为0度角,逆时针旋转
    # logo:以绘图界面的中心点为坐标圆点(0,0),以y坐标正方向为0度角,顺时针旋转
    shape('turtle') #三角形会变成小乌龟
    hideturtle() #小乌龟和三角形都不见了
    colormode(255) #可以将colormode设置为1.0或255。颜色三元组的r,g,b值必须在0...colormode范围内
    speed(0) #可选0,1,2,...,10,好像是0最快,10其次,10到1速度递减

再就是一些绘画基本元素:

  • 直线:forward(distance), backward(distance)
  • 圆:可以用circle(半径),半径的正负对应逆时针/顺时针方向画圆,也可以自己用一个正120边形来近似(120步,每步360/120=3度)
  • 圆弧:circle(半径,角度),半径的正负对应逆时针/顺时针方向画圆弧
  • 任意曲线:多段圆弧、圆拼接,拼接时根据需要更改方向
  • 椭圆:在画正120边形表示圆的基础上改一下每步的步长,有60步步长由短变长,有60步步长由长变短。

用Turtle绘制小猪佩奇

代码来自https://mp.weixin.qq.com/s/whtJOrlegpWzgisYJabxOg,我自己的理解加在注释里了,只要前面的看懂了这个代码不难理解。

from turtle import*

def nose(x,y):#鼻子 (公众号:数据分析联盟)
    penup()#提起笔
    goto(x,y)#定位
    pendown()#落笔,开始画
    setheading(-30)#将乌龟的方向设置为to_angle/为数字(0-东、90-北、180-西、270-南)

    # 画椭圆
    begin_fill()#如果要画的图形需要填充,要在画图前begin_fill()
    a=0.4
    for i in range(120):
        if 0<=i<30 or 60<=i<90:
            a=a+0.08
            left(3) #向左转3度
            forward(a) #向前走a的步长
        else:
            a=a-0.08
            left(3)
            forward(a)
    end_fill()#填充完成

    #画鼻孔1的圆
    penup()
    setheading(90)
    forward(25)
    setheading(0)
    forward(10)
    pendown()
    pencolor(255,155,192)#画笔颜色
    setheading(10)
    #以上操作将画笔移动到了该画第一个鼻孔的位置,并设置好了颜色
    begin_fill()
    circle(5)
    color(160,82,45)#返回或设置pencolor和fillcolor
    end_fill()

    #画鼻孔2的圆
    penup()
    setheading(0)
    forward(20)
    pendown()
    pencolor(255,155,192)
    setheading(10)
    begin_fill()
    circle(5)
    color(160,82,45)
    end_fill()


def head(x,y):#头
    color((255,155,192),"pink")
    penup()
    goto(x,y)
    setheading(0)
    pendown()
    begin_fill()
    setheading(180)
    circle(300,-30)
    circle(100,-60)
    circle(80,-100)
    circle(150,-20)
    circle(60,-95)
    setheading(161)
    circle(-300,15)
    penup()
    goto(-100,100)
    pendown()
    setheading(-30)
    a=0.4
    for i in range(60):
        if 0<=i<30 or 60<=i<90:
            a=a+0.08
            lt(3) #向左转3度
            fd(a) #向前走a的步长
        else:
            a=a-0.08
            lt(3)
            fd(a)
    end_fill()


def ears(x,y): #耳朵
    color((255,155,192),"pink")
    penup()
    goto(x,y)
    pendown()
    begin_fill()
    setheading(100)
    circle(-50,50)
    circle(-10,120)
    circle(-50,54)
    end_fill()

    penup()
    setheading(90)
    forward(-12)
    setheading(0)
    forward(30)
    pendown()
    begin_fill()
    setheading(100)
    circle(-50,50)
    circle(-10,120)
    circle(-50,56)
    end_fill()


def eyes(x,y):#眼睛 公众号 数据分析联盟
    color((255,155,192),"white")
    penup()
    setheading(90)
    forward(-20)
    setheading(0)
    forward(-95)
    pendown()
    begin_fill()
    circle(15)
    end_fill()

    color("black")
    penup()
    setheading(90)
    forward(12)
    setheading(0)
    forward(-3)
    pendown()
    begin_fill()
    circle(3)
    end_fill()

    color((255,155,192),"white")
    penup()
    seth(90)
    forward(-25)
    seth(0)
    forward(40)
    pendown()
    begin_fill()
    circle(15)
    end_fill()

    color("black")
    penup()
    setheading(90)
    forward(12)
    setheading(0)
    forward(-3)
    pendown()
    begin_fill()
    circle(3)
    end_fill()


def cheek(x,y):#腮 公众号 数据分析联盟
    color((255,155,192))
    penup()
    goto(x,y)
    pendown()
    setheading(0)
    begin_fill()
    circle(30)
    end_fill()


def mouth(x,y): #嘴 公众号 数据分析联盟
    color(239,69,19)
    penup()
    goto(x,y)
    pendown()
    setheading(-80)
    circle(30,40)
    circle(40,80)

def body(x,y):#身体 公众号 数据分析联盟
    color("red",(255,99,71))
    penup()
    goto(x,y)
    pendown()
    begin_fill()
    setheading(-130)
    circle(100,10)
    circle(300,30)
    setheading(0)
    forward(230)
    setheading(90)
    circle(300,30)
    circle(100,3)
    color((255,155,192),(255,100,100))
    setheading(-135)
    circle(-80,63)
    circle(-150,24)
    end_fill()


def hands(x,y):#手 公众号 数据分析联盟
    color((255,155,192))
    penup()
    goto(x,y)
    pendown()
    setheading(-160)
    circle(300,15)
    penup()
    setheading(90)
    forward(15)
    setheading(0)
    forward(0)
    pendown()
    setheading(-10)
    circle(-20,90)

    penup()
    setheading(90)
    forward(30)
    setheading(0)
    forward(237)
    pendown()
    setheading(-20)
    circle(-300,15)
    penup()
    setheading(90)
    forward(20)
    setheading(0)
    forward(0)
    pendown()
    setheading(-170)
    circle(20,90)

def foot(x,y):#脚 公众号 数据分析联盟
    pensize(10)
    color((240,128,128))
    penup()
    goto(x,y)
    pendown()
    setheading(-90)
    forward(40)
    setheading(-180)
    color("black")
    pensize(15)
    fd(20)

    pensize(10)
    color((240,128,128))
    penup()
    setheading(90)
    forward(40)
    setheading(0)
    forward(90)
    pendown()
    setheading(-90)
    forward(40)
    setheading(-180)
    color("black")
    pensize(15)
    fd(20)

def tail(x,y):#尾巴 公众号 数据分析联盟
    pensize(4)
    color((255,155,192))
    penup()
    goto(x,y)
    pendown()
    seth(0)
    circle(70,20)
    circle(10,330)
    circle(70,30)

def setting():          #参数设置
    pensize(4)
    # hideturtle()        #使乌龟无形(隐藏)
    shape('turtle')
    colormode(255)      #将其设置为1.0或255.随后 颜色三元组的r,g,b值必须在0 .. cmode范围内
    color((255,155,192),"pink")
    setup(840,500)
    speed(10)

def main():
    setting()           #画布、画笔设置
    nose(-100,100)      #鼻子
    head(-69,167)       #头
    ears(0,160)         #耳朵
    eyes(0,140)         #眼睛
    cheek(80,10)        #腮
    mouth(-20,30)       #嘴
    body(-32,-8)        #身体
    hands(-56,-45)      #手
    foot(2,-177)        #脚
    tail(148,-155)      #尾巴
    done() #调用done()使得窗口等待被关闭,否则将立刻关闭窗口

if __name__ == '__main__':
   main()

输出:

Python语言基础学习(六)_第1张图片

你可能感兴趣的:(Python)