前言
本篇主要介绍Python基本图形绘制,以Python蟒蛇绘制为例,介绍turtle库的使用。
并在最后对蟒蛇绘制的代码进行分析。
读完本篇,你将了解:
1.方法论
Python语言及海龟绘图体系
2.实践能力
初步学会使用Python绘制简单图形
本篇将系统介绍:
1.实例2: Python蟒蛇绘制
2.模块1: turtle库的使用
3.turtle程序语法元素分析
引入:Python的特点与优势
-是C语言代码量的10%
-强制可读性(缩进)
-较少的底层语法元素
-多种编程方式
-支持中文字符
->13万第三方库
-快速增长的计算生态
-避免重复造轮子
-开放共享
-跨操作系统平台
提高10倍的产出
一、实例2: Python蟒蛇绘制
1.问题分析
用程序绘制一条蟒蛇,设计蟒蛇的基本形状
问题1 计算机绘图是什么原理?
一段程序为何能够产生窗体?为何能在窗体上绘制图形?
问题2 Python蟒蛇绘制从哪里开始呢?
如何绘制一条线?如何绘制一个弧形?如何绘制一个蟒蛇?
2.代码实现
# PythonDrawSnake.pyimport turtleturtle.setup(650, 350, 200, 200)turtle.penup()turtle.fd(-250)turtle.pendown()turtle.pensize(25)turtle.pencolor("purple")turtle.seth(-40)for i in range(4):turtle.circle(40, 80)turtle.circle(-40, 80)turtle.circle(40, 80 / 2)turtle.fd(40)turtle.circle(16, 180)turtle.fd(40 * 2 / 3)turtle.done()
程序运行结果如下
3.简单分析
import是一个保留字,引入了当前代码之外的功能,引入了一个绘图库turtle(海龟)
故称海龟库
4.举一反三
①Python语法元素理解
1)Python蟒蛇绘制共17行代码,但很多行类似
2)清楚理解这17行代码能够掌握Python基本绘图方法
3)参考框架结构、逐行分析、逐词理解
②程序参数的改变
1)Python蟒蛇的颜色∶黑色、白色、七彩色…
2)Python啜蛇的长度:1节、3节、10节…
3)Python蟒蛇的方向∶向左走、斜着走…
③计算问题的扩展
1)Python蟒蛇绘制问题是各类图像绘制问题的代表
2)圆形绘制、五角星绘制、国旗绘制、机器猫绘制…
二、模块1: turtle库的使用
1.turtle库基本介绍
turtle(海龟)库是turtle绘图体系的Python实现
①turtle库概述
1)Python语言的标准库之一
2)入门级的图形绘制函数库
②标准库与第三方库
Python计算生态=标准库+第三方库
1)标准库:随解释器直接安装到操作系统中的功能模块
2)第三方库:需要经过安装才能使用的功能模块
3)库Library、包Package、模块Module,统称模块
③turtle玩法
turtle(海龟)是一种真实的存在
有一只海龟,其实在窗体正中心,在画布上游走,走过的轨迹形成了绘制的图形
海龟由程序控制,可以变换颜色、改变宽度等
2.turtle绘图窗体布局
①turtle的绘图窗体
1)绘制turtle图形首先需要一个绘图窗体,在操作系统上表现为一个窗口,它是turtle的一个画布空间
2)在窗口中使用的最小单位是像素。如:绘制一个100长的直线,是绘制一个100像素长的直线
3)在一个操作系统的电脑上,在电脑显示器中,左上角坐标系是(0,0),窗体左上角是turtle绘图窗体的坐标原点(startx,starty)
4)在屏幕坐标系中和窗体坐标系,它们之间存在一个窗体位置和大小的设计
②turtle.setup(width, height, startx, starty)
1)由于设置启动窗体的位置和大小
2)4个参数:宽度、高度、起始点xy方向的坐标。
其中,后两个参数可选
3)宽度、高度(窗体本身的宽度和高度)、起始点xy方向的坐标(窗体左上角的位置的坐标)。
左上角的位置的坐标:左上角位置相对于屏幕左上角的坐标
4)注意:在绘制基本图形的过程中,setup()不是必须的,只有当你需要控制窗体大小和在屏幕中显示位置的时候才用
5)举例:turtle.setup(800,400,0,0)
生成一个宽800高400的窗体,窗体左上角就在电脑屏幕的左上角
turtle.setup( 800,400)
由于未指定左上角在屏幕中的位置,系统默认该窗口在屏幕的正中心
3.turtle空间坐标体系
①绝对坐标
1)绝对坐标系构成:海龟最开始在画布正中心,坐标(0,0)。
海龟运行方向向着画布右侧,故整个窗体的右方向是x轴,上方向是y轴。
2)区分:图中点的坐标值指海龟绘制过程中画布中间的空间坐标体系。
其与窗体在屏幕中间的位置坐标不同
3)利用空间坐标,改变turtle的行进位置,可以使用一些函数
②绝对坐标相关函数:turtle.goto(x, y)
1)指让在任何位置的海龟去到达某一个坐标位置
2)举例:
③海龟坐标
1)海龟坐标系构成:海龟本身从自身的运动来讲,当前行进方向为前进方向,反方向是后退方向
左侧为左侧方向
2)相关函数:
turtle.fd(d):向海龟的正前方向运行
turtle.bk(d):向海龟的反方向运行
turtle.circle(r,angle):以海龟当前位置,左侧的某一个点为圆心,进行曲线运行
这些函数改变海龟在空间坐标中的位置,进而实现绘图功能
4.turtle角度坐标体系
①绝对角度:
1)绝对角度坐标体系:
空间坐标体系中的x轴表示0度或360度,y轴的正方向表示90度或-270度,以此类推
2)turtle.seth(angle):改变海龟的行进角度
注意:seth()并不在图像中绘制任何信息,只改变行进方向
angle为绝对度数
②海龟角度:
1)相关函数:
turtle.left(angle):向左改变运行方向
turtle.right(angle):向右改变运行方向
2)举例:绘制Z型曲线
import turtleturtle.left(45)turtle.fd(150)turtle.right(135)turtle.fd(300)turtle.left(135)turtle.fd(150)
从海龟起始画布中心,向左方向旋转45度,此时并未运动。让其在此方向上向前行进150像素,可绘制形成一个斜线。进一步让其向右侧旋转135度,再使用fd向前行进300像素。
再进一步,让其向左侧旋转135度,再使用fd向前行进150像素。则形成一个Z字
5.RGB色彩体系
①由三种颜色构成的万物色
1)RGB指红蓝绿三个通道的颜色组合
2)覆盖视力所能感知的所有颜色
3)RGB每色取值范围为0-255的整数或O-1之间的小数
②基础颜色
③除基础颜色外,可将每个通道的色彩进行修改
④注意:
turtle库默认采用RGB的小数值来表示颜色,可切换为整数值
⑤turtle.colormode( mode)
使用turtle.colormode( 1.0):RGB小数值模式
使用turtle.colormode( 255):RGB整数值模式
三、turtle程序语法元素分析
1.库引用与import保留字
①库引用:扩充Python程序功能的方式
1)使用import保留字完成库的引用,编写代码时采用 a.b编码风格,参考蟒蛇绘制代码,turtle.xxx()
2)格式:
import<库名> <库名>.<函数名>(<函数参数>)
以此调用相关功能
②import更多用法
使用from和import保留字共同完成
1)格式:
from<库名> import<函数名>
或**from<库名> import ***
使用这种方式后,再调用函数,使用:<函数名>(<函数参数>),无需再加上库名
2)举例:
蟒蛇绘制代码改造
from turtle import *setup(650, 350, 200, 200)penup()fd(-250)pendown()pensize(25)pencolor("purple")seth(-40)for i in range(4):circle(40, 80)circle(-40, 80)circle(40, 80 / 2)fd(40)circle(16, 180)fd(40 * 2 / 3)done()
③两种方法的比较(各有优缺点)
1)import<库名>方式 <库名>.<函数名>(<函数参数>)
2)from<库名> import<函数名>
或**from<库名> import ***
**<函数名>(<函数参数>):**使用库中的函数的这个函数名,在程序中就是独立的函数名
3)带来的问题:第一种方法不会出现函数重名问题,第二种方法会出现
4)注意:如果程序很短,只使用这个库,也无自定义函数。可采用第二种
如果import了很多库,又担心名字冲突,则采用第一种
④其他方式
两种情况通盘考虑后,形成新的库引用方法,使用import和as保留字共同完成
1)结构:
import<库名>as<库别名> <库别名>.<函数名>(<函数参数>)
2)阐述:将库名形成了一个别名,简单说就是给库起个小名,用小名去调用函数
<库别名>.<函数名>也构成了一个程序中的独立名字
给调用的外部库关联一个更短、更适合自己的名字,对编写程序来说会带来很多的便利
3)举例:
蟒蛇绘制代码改造
import turtle as tt.setup(650, 350, 200, 200)t.penup()t.fd(-250)t.pendown()t.pensize(25)t.pencolor("purple")t.seth(-40)for i in range(4):t.circle(40, 80)t.circle(-40, 80)t.circle(40, 80 / 2)t.fd(40)t.circle(16, 180)t.fd(40 * 2 / 3)t.done()
4)此种方式冗余的代码量最少,同时又防止了库重名的问题(推荐使用)
2.turtle画笔控制函数
以蟒蛇绘制为例,其中有4行代码使用了与画笔控制相关的函数
分别是penup(). pendown().pensize(). pencolor()
①定义:
将海龟想象为画笔,海龟是形象图案,画笔是一个抽象图案。画笔控制函数是控制海龟
或者控制画笔的一种方式函数
②特点
画笔操作后一直有效,一般成对出现:这里指penup(). pendown().
③一些函数
1)turtle.penup()
别名turtle.pu()(pen和up首字母缩写)
抬起画笔,海龟在飞行。
注意:画笔抬起时,画笔或海龟运行的轨迹不在画布上形成图案
2)turtle.pendown()别名turtle.pd()
落下画笔,海龟在爬行
不能让海龟只在天上飞,并不形成绘图图形。故而我们说是成对出现的。
penup让海龟飞到某一个位置,再pendown,去从那个位置开始绘图
3)turtle.pensize(width)
别名turtle.width(width)(名字不同,功能一样,是turtle库提供的一些冗余性的函数)
画笔宽度,相当于海龟的腰围
4)turtle.pencolor(color):修改画笔颜色的函数
画笔颜色,海龟在涂装
color表示色彩,通过颜色字符串或r,g,b值来赋予海龟颜色
注意:pencolor(color)的color参数可以有三种形式
1))颜色字符串: turtle.pencolor(“purple”):purple是字符串形式且用小写
2))RGB的小数值: turtle.pencolor(0.63,8.13,8.94):给出3个通道数值,逗号分开
3))RGB的元组值: turtle.pencolor( ( 0.63,0.13,0.94))
元组:将小数值或整数值形成一个独立的元素。
比如0.63,0.13,0.94外围加一个括号,即是一种元组类型
3.turtle运动控制函数:控制海龟行进:走直线&走曲线
其中涉及到了运动控制函数,主要为fd(),circle()函数
1)turtle.forward(d)别名turtle.fd(d)
向前行进,海龟走直线
d:行进距离,单位为像素,可以为负数(海龟倒退行进)
2)turtle.circle(r, extent=None)
根据半径r绘制extent角度的弧形
r:是海龟行进曲线的半径,默认圆心在海龟左侧r距离的位置
extent:绘制角度,默认是360度整圆
举例:turtle.circle( -100,90)
4.turtle方向控制函数
控制海龟面对方向:绝对角度&海龟角度
①turtle.setheading(angle)
别名turtle.seth(angle)
改变行进方向
1)angle:将海龟当前的方向改变为某一个绝对的角度
2)举例:turtle.seth(-135)
将海龟当前的方向改变为绝对坐标下的-135度方向
②常用转向方法
**turtle.left(angle)**海龟向左转
**turtle.right(angle)**海龟向右转
angle:在海龟当前行进方向上旋转的角度
③注意:
方向控制函数只改变海龟的行进方向,不实际在绘图上让海龟移动(若需移动需使用运动控制函数)
5.基本循环语句与range函数
蟒蛇绘制中涉及到了一个for in的结构(即为:循环结构)和一个range()
①循环语句
按照一定次数循环执行一组语句
常用方式:for<变量> in range (<参数>) <被循环执行的语句>
1)可理解为一种固定搭配
2)range 的(<参数>):循环的次数
3)for in之间的变量:表示每次循环的计数,如果range后面的次数是固定的,变量即为0到<次数>-1
4)举例:
for i in range(5):
print(i)
打印输出
0
1
2
3
4
循环5次,i值从0开始计数逐渐加一
若改为for i in range(5):
print( "He1lo: ",i)
注意:print中间加逗号,每输出的字符串之间会增加空格
②range()函数
产生循环计数序列
有两种常用用法
1)range ( N ):产生О到N-1的整数序列,共N个
举例:range(5)产生0, 1,2,3,4
2)range ( M,N):产生M到N-1的整数序列,共N-M个
举例:range(2,5)产生2,3,4
(6)"Python蟒蛇绘制"代码分析
#此处为代码+注释,直接编译会报错哦# PythonDrawSnake.pyimport turtle:引入海龟绘制体系turtle.setup(650, 350, 200, 200):设定一个窗体,宽度为650像素高为350像素,它的位置的左上角的坐标是(200.200)turtle.penup():画笔抬起turtle.fd(-250):让海龟倒退向后行进250个像素,由于此时海龟飞起,画布上不留任何效果turtle.pendown():海龟落下以上几行代码相当于将海龟由绘图中心的原点变成在图像中左侧的某一个位置上之后开始设计海龟尺寸turtle.pensize(25):调整腰围,设定当前的画笔宽度为25个像素turtle.pencolor("purple"):画笔颜色turtle.seth(-40):将海龟方向改为绝对的-40度方向,准备启动绘制Python蟒蛇以上均为准备工作for i in range(4):turtle.circle(40, 80):循环circle走曲线,它使用40像素为半径绘制80度的弧度turtle.circle(-40, 80):同理,形成了Python蟒蛇的一个关节以上形成海龟的绘制之后的一个路径,经过四次循环,绘制了蟒蛇的四个身体部分turtle.circle(40, 80 / 2):以40像素的半径,按40度的方式绘制少半个弧形turtle.fd(40):向前行进40度构成脖子部分最后采用半圆形和继续向前进的一个直线绘制整个python的蟒蛇的头部turtle.circle(16, 180)turtle.fd(40 * 2 / 3)turtle.done():如果是一个文件式描写方法,若作为整个turtle绘制的最后一部分。程序运行之后不会退出,需要手工关闭窗体退出如果我们希望程序运行之后自动退出,去掉这行代码即可
总结
经过本篇的学习,可以大致掌握运用turtle库去绘制一些基本图形,如:正方形、六边形等。可以使用for循环辅助绘制。
如有错误,欢迎指正!
注:代码非原创
下篇将介绍基本数据类型及time库的使用。