又一个WordPress站点

必克英语画个多啦A梦,小猪佩奇 用Python-从零开始学习python

画个多啦A梦,小猪佩奇 用Python-从零开始学习python
见网络上有人用Python 画出来个多啦A梦,很是新奇,来来来,我们看一下他们主要用到的库。

其实主要用的库就一个 turtle 库
先说明一下turtle绘图的基础知识:1. 画布(canvas)
画布就是turtle为我们展开用于绘图区域, 我们可以设置它的大小和初始位置1.1 设置画布大小
turtle.screensize(canvwidth=None, canvheight=None, bg=None)参数分别为画布的宽(单位像素), 高, 背景颜色
如:
turtle.screensize(800, 600, "green")turtle.screensize() #返回默认大小(400, 300)
turtle.setup(width=0.5, height=0.75, startx=None, starty=None)
参数:width, height: 输入宽和高为整数时, 表示像素; 为小数时, 表示占据电脑屏幕的比例(startx, starty): 这一坐标表示 矩形窗口左上角顶点的位置, 如果为空,则窗口位于屏幕中心
如:
turtle.setup(width=0.6, height=0.6)turtle.setup(width=800, height=800, startx=100, starty=100)2. 画笔2.1 画笔的状态
在画布上,默认有一个坐标原点为画布中心的坐标轴, 坐标原点上有一只面朝x轴正方向小乌龟. 这里我们描述小乌龟时使用了两个词语:坐标原点(位置),面朝x轴正方向(方向), turtle绘图中, 就是使用位置方向描述小乌龟(画笔)的状态2.2 画笔的属性
画笔(画笔的属性,颜色、画线的宽度)1) turtle.pensize():设置画笔的宽度;2) turtle.pencolor(); 没有参数传入,返回当前画笔颜色,传入参数设置画笔颜色,可以是字符串如"green", "red",也可以是RGB 3元组,
>>> pencolor('brown') >>> tup = (0.2, 0.8, 0.55) >>> pencolor(tup) >>> pencolor() '#33cc8c'
3) turtle.speed(speed): 设置画笔移动速度,画笔绘制的速度范围[0,10]整数, 数字越大越快2.3 绘图命令
操纵海龟绘图有着许多的命令,这些命令可以划分为3种:一种为运动命令,一种为画笔控制命令,还有一种是全局控制命令
(1)画笔运动命令:命令说明turtle.forward(distance)向当前画笔方向移动distance像素长turtle.backward(distance)向当前画笔相反方向移动distance像素长度turtle.right(degree)顺时针移动degree°turtle.left(degree)逆时针移动degree°turtle.pendown()移动时绘制图形,缺省时也为绘制turtle.goto(x,y)将画笔移动到坐标为x,y的位置turtle.penup()移动时不绘制图形,提起笔,用于另起一个地方绘制时用turtle.speed(speed)画笔绘制的速度范围[0,10]整数turtle.circle()画圆,半径为正(负),表示圆心在画笔的左边(右边)画圆
(2)画笔控制命令:命令说明turtle.pensize(width)绘制图形时的宽度turtle.pencolor()画笔颜色turtle.fillcolor(colorstring)绘制图形的填充颜色turtle.color(color1, color2)同时设置pencolor=color1, fillcolor=color2turtle.filling()返回当前是否在填充状态turtle.begin_fill()准备开始填充图形turtle.end_fill()填充完成;turtle.hideturtle()隐藏箭头显示;turtle.showturtle()与hideturtle()函数对应
(3) 全局控制命令命令说明turtle.clear()清空turtle窗口,但是turtle的位置和状态不会改变turtle.reset()清空窗口,重置turtle状态为起始状态turtle.undo()撤销上一个turtle动作turtle.isvisible()返回当前turtle是否可见stamp()复制当前图形turtle.write(s[,font=("font-name",font_size,"font_type")])写文本井出有治,s为文本内容,font是字体的参数,里面分别为字体名称,大小和类型;font为可选项, font的参数也是可选项3. 命令详解
3.1 turtle.circle(radius, extent=None, steps=None)描述: 以给定半径画圆参数:radius(半径); 半径为正(负),表示圆心在画笔的左边(右边)画圆extent(弧度) (optional);steps (optional) (做半径为radius的圆的内切正多边形,多边形边数为steps)
举例:circle(50) # 整圆;circle(50邢质斌简历 ,steps=3) # 三角形;circle(120, 180) # 半圆4. 绘图举例4.1 太阳花
?
import turtle as timport timet.color("red", "yellow")t.speed(10)t.begin_fill()for _ in range(50): t.forward(200) t.left(170)end_fill()time.sleep(1)4.2 绘制小蟒蛇
?
import turtledef drawSnake(rad, angle, len, neckrad): for _ in range(len): turtle.circle(rad, angle) turtle.circle(-rad, angle) turtle.circle(rad, angle/2) turtle.forward(rad/2) # 直线前进 turtle.circle(neckrad, 180) turtle.forward(rad/4)if __name__ == "__main__": turtle.setup(1500, 1400, 0, 0) turtle.pensize(30) # 画笔尺寸 turtle.pencolor("green") turtle.seth(-40) # 前进的方向 drawSnake(70, 80, 2, 15)4.3 绘制五角星
?
import turtle import timeturtle.pensize(5)turtle.pencolor("yellow")turtle.fillcolor("red") turtle.begin_fill()for _ in range(5): turtle.forward(200) turtle.right(144)turtle.end_fill()time.sleep(2)turtle.penup()turtle.goto(-150,-120)turtle.color("violet")turtle.write("Done", font=('Arial', 40伪装兽, 'normal'))time.sleep(1)
有了基础知识以后我们看下怎么画出多啦A梦
# !/usr/bin/env python3from turtle import *# 无轨迹跳跃def my_goto(x, y): penup() goto(x, y) pendown()# 眼睛def eyes(): fillcolor("#ffffff") begin_fill() tracer(False) a = 2.5 for i in range(120): if 0 <= i < 30 or 60 <= i < 90:a -= 0.05lt(3)fd(a) else:a += 0.05lt(3)fd(a) tracer(True) end_fill()# 胡须def beard(): my_goto(-32, 135) seth(165) fd(60) my_goto(-32, 125) seth(180) fd(60) my_goto(-32, 115) seth(193) fd(60) my_goto(37, 135) seth(15) fd(60) my_goto(37, 125) seth(0) fd(60) my_goto(37, 115) seth(-13) fd(60)# 嘴巴def mouth(): my_goto(5, 148) seth(270) fd(100) seth(0) circle(120, 50) seth(230) circle(-120, 100)# 围巾def scarf(): fillcolor('#e70010') begin_fill() seth(0) fd(200) circle(-5, 90) fd(10) circle(-5, 90) fd(207) circle(-5, 90) fd(10) circle(-5, 90) end_fill()# 鼻子def nose(): my_goto(-10, 158) seth(315) fillcolor('#e70010') begin_fill() circle(20) end_fill()# 黑眼睛def black_eyes(): seth(0) my_goto(-20, 195) fillcolor('#000000') begin_fill() circle(13) end_fill() pensize(6) my_goto(20, 205) seth(75) circle(-10, 150) pensize(3) my_goto(-17, 200) seth(0) fillcolor('#ffffff') begin_fill() circle(5) end_fill() my_goto(0, 0)# 脸def face(): fd(183) lt(45) fillcolor('#ffffff') begin_fill() circle(120, 100) seth(180) # print(pos()) fd(121) pendown() seth(215) circle(120, 100) end_fill() my_goto(63.56, 218.24) seth(90) eyes() seth(180) penup() fd(60) pendown() seth(90) eyes() penup() seth(180) fd(64)# 头型def head(): penup() circle(150, 40) pendown() fillcolor('#00a0de') begin_fill() circle(150, 280) end_fill()# 画哆啦A梦def Doraemon(): # 头部 head() # 围脖 scarf() # 脸 face() # 红鼻子 nose() # 嘴巴 mouth() # 胡须 beard() # 身体 my_goto(0, 0) seth(0) penup() circle(150, 50) pendown() seth(30) fd(40) seth(70) circle(-30, 270) fillcolor('#00a0de') begin_fill() seth(230) fd(80) seth(90) circle(1000, 1) seth(-89) circle(-1000, 10) # print(pos()) seth(180) fd(70) seth(90) circle(30, 180) seth(180) fd(70) # print(pos()) seth(100) circle(-1000, 9) seth(-86) circle(1000, 2) seth(230) fd(40) # print(pos()) circle(-30, 230) seth(45) fd(81) seth(0) fd(203) circle(5, 90) fd(10) circle(5, 90) fd(7) seth(40) circle(150, 10) seth(30) fd(40) end_fill() # 左手 seth(70) fillcolor('#ffffff') begin_fill() circle(-30) end_fill() # 脚 my_goto(103.74, -182.59) seth(0) fillcolor('#ffffff') begin_fill() fd(15) circle(-15, 180) fd(90) circle(-15, 180) fd(10) end_fill() my_goto(-96.26, -182.59) seth(180) fillcolor('#ffffff') begin_fill() fd(15) circle(15星海猎人, 180) fd(90) circle(15, 180) fd(10) end_fill() # 右手 my_goto(-133.97, -91.81) seth(50) fillcolor('#ffffff') begin_fill() circle(30) end_fill() # 口袋 my_goto(-103.42, 15.09) seth(0) fd(38) seth(230) begin_fill() circle(90, 260) end_fill() my_goto(5, -40) seth(0) fd(70) seth(-90) circle(-70, 180) seth(0) fd(70) # 铃铛 my_goto(-103.42, 15.09) fd(90) seth(70) fillcolor('#ffd200') # print(pos()) begin_fill() circle(-20) end_fill() seth(170) fillcolor('#ffd200') begin_fill() circle(-2, 180) seth(10) circle(-100, 22) circle(-2, 180) seth(180 - 10) circle(100, 22) end_fill() goto(-13.42, 15.09) seth(250) circle(20, 110) seth(90) fd(15) dot(10) my_goto(0阳光体育之歌 , -150) # 画眼睛 black_eyes()if __name__ == '__main__': screensize(800, 600, "#f0f0f0") pensize(3) # 画笔宽度 speed(9) # 画笔速度 Doraemon() my_goto(100, -300) mainloop()
看下效果

看看 小猪佩奇的实现方式:

# -*- coding: utf-8 -*-"""@Time: 2018/9/5@Author: songhao@微信公众号: zeropython@File: peiqi.py"""from turtle import *def nose(x, y): # 鼻子 pu() goto(xg7016, y) pd() seth(-30) begin_fill() a = 0.4 for i in range(120): if 0 <= i < 30 or 60 <= i < 90:a = a + 0.08lt(3) # 向左转3度fd(a) # 向前走a的步长 else:a = a - 0.08lt(3)fd(a) end_fill() pu() seth(90) fd(25) seth(0) fd(10) pd() pencolor(255, 155,周凯旋 192) seth(10) begin_fill() circle(5) color(160, 82, 45) end_fill() pu() seth(0) fd(20) pd() pencolor(255, 155, 192) seth(10) begin_fill() circle(5) color(160, 82, 45) end_fill()def head(x, y): # 头 color((255, 155, 192), "pink") pu() goto(x, y) seth(0) pd() begin_fill() seth(180) circle(300, -30) circle(100, -60) circle(80, -100) circle(150, -20) circle(60弑星者, -95) seth(161) circle(-300, 15) pu() goto(-100, 100) pd() seth(-30) a = 0.4 for i in range(60): if 0 <= i < 30 or 60 <= i < 90:a = a + 0.08lt(3) # 向左转3度fd(a) # 向前走a的步长 else:a = a - 0.08lt(3)fd(a) end_fill()def ears(x跑牛网, y): # 耳朵 color((255老千生涯日记, 155, 192), "pink") pu() goto(x, y) pd() begin_fill() seth(100) circle(-50, 50) circle(-10, 120) circle(-50, 54) end_fill() pu() seth(90) fd(-12) seth(0) fd(30) pd() begin_fill() seth(100) circle(-50, 50) circle(-10, 120) circle(-50, 56) end_fill()def eyes(x, y): # 眼睛 color((255, 155, 192)粱博, "white") pu() seth(90) fd(-20) seth(0) fd(-95) pd() begin_fill() circle(15) end_fill() color("black") pu() seth(90) fd(12) seth(0) fd(-3) pd() begin_fill() circle(3) end_fill() color((255, 155, 192), "white") pu() seth(90) fd(-25) seth(0) fd(40) pd() begin_fill() circle(15) end_fill() color("black") pu() seth(90) fd(12) seth(0) fd(-3) pd() begin_fill() circle(3) end_fill()def cheek(x鲍勃苏拉, y): # 腮 color((255, 155, 192)) pu() goto(x, y) pd() seth(0) begin_fill() circle(30) end_fill()def mouth(x, y): # 嘴 color(239, 69, 19) pu() goto(x, y) pd() seth(-80) circle(30, 40) circle(40, 80)def body(x, y): # 身体 color("red", (255, 99, 71)) pu() goto(x, y) pd() begin_fill() seth(-130) circle(100, 10) circle(300, 30) seth(0) fd(230) seth(90) circle(300, 30) circle(100, 3) color((255, 155, 192), (255, 100, 100)) seth(-135) circle(-80, 63) circle(-150, 24) end_fill()def hands(x, y): # 手 color((255, 155, 192)) pu() goto(x, y) pd() seth(-160) circle(300, 15) pu() seth(90) fd(15) seth(0) fd(0) pd() seth(-10) circle(-20松景科技 , 90) pu() seth(90) fd(30) seth(0) fd(237) pd() seth(-20) circle(-300, 15) pu() seth(90) fd(20) seth(0) fd(0) pd() seth(-170) circle(20, 90)def foot(x, y): # 脚 pensize(10) color((240, 128, 128)) pu() goto(x, y) pd() seth(-90) fd(40) seth(-180) color("black") pensize(15) fd(20) pensize(10) color((240, 128, 128)) pu() seth(90) fd(40) seth(0) fd(90) pd() seth(-90) fd(40) seth(-180) color("black") pensize(15) fd(20)def tail(x, y): # 尾巴 pensize(4) color((255, 155, 192)) pu() goto(x, y) pd() seth(0) circle(70柯哲娴, 20) circle(10, 330) circle(70, 30)def setting(): # 参数设置 pensize(4) hideturtle() colormode(255) 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() # 结束main()
其实画图主要还是坐标和尺寸
本文参考 简书伪君子_10分钟轻松学会 Python turtle 绘图
关键词: