1.3模块、包与库(课件)-《Python编程基础与应用》同步教学(清华大学出版社)

2024-08-03
| 47页
| 66人阅读
| 7人下载
普通

内容正文:

《Python编程基础与应用》 绪 论 第 1 章  2 学习目标: 了解Python 语言的发展、特点与应用 掌握Python 解释器的安装、编程环境的配置 掌握利用集成工具编写、运行Python 程序的方法 掌握Python 模块的安装与使用方法 熟悉面向对象程序turtle 绘图 思政内涵: Python 语言的发展体现了创新与共享精神,我国开发的北斗卫星导航系统 已向全球提供服务,展现了中国的科技创新与共享精神,是科技强国的重大成 果。广大学子要勇于开拓,敢于创新,树立忠于祖国、勇攀科学高峰、报效国 家的理想信念。 34 1.3 模块、包与库 Python 代码通常存储在一个后缀为.py 的文件中,因此Python 代码的基本 组织单位是文件,也称为模块(module)。一个Python 项目的程序往往存储在多 个文件中,即一个项目由多个模块组成。Python 程序设计遵循标准的模块化编 程理念,Python 程序由模块组成,模块由语句组成。 当一个项目中有多个模块(多个.py 文件)时,需要再进行组织,将功能类似 的模块放到一个文件夹中就形成了包。Python 包(package) 就是一个包含 init .py 文件的文件夹。包可以包含模块,也可以包含子包(subpackage),就 像文件夹可以包含文件和子文件夹一样。 Python 库(library)借用其他编程语言的概念,没有特别具体的定义。库强调 的是功能性,而不是代码组织。通常,我们将实现某一功能的包或模块的集合 称为库。 Python 模块可分为内建模块、标准模块和第三方模块。内建模块是在运行 35 解释器时自动导入的模块,可以直接使用模块中的变量、函数等。标准模块是 在安装解释器时自动安装到硬盘上的模块,但在运行解释器时并不会自动导入, 需要用import 语句将其导入才可以使用。第三方模块是在安装解释器时没有安 装到本地的模块,使用前需要下载并安装。自己建立的.py 文件称为自定义模块, 文件名称就是模块名称。 模块的安装 Python 模块的安装有在线安装和离线安装两种方式。 在线安装 在线安装是比较常用的安装方法。利用Python 内置的pip 工具可以非常方 便地安装Python 第三方模块。进入CMD 窗口(操作系统命令行窗口),使用如 下命令进行安装。 pip install 模块名 36 如果不再使用已安装的模块,则可以卸载该模块,其语法格式如下。 pip uninstall 模块名 2. 离线安装 第三方库(模块)一般是打包压缩上传到网上的,因此,离线安装需要先把库 下载到本地,然后把包解压,在解压后的文件夹中,找到该安装包中的 setup.py 文件,最后进入CMD 窗口,使用如下命令进行安装。 python setup.py install 当第三方库、包或模块被安装到本地之后,其使用方法与标准库中模块的 使用方法一样。 1.3.2 模块的导入与使用 模块化设计的优点之一就是“代码复用性高”。写好的模块可以被反复调用、 37 使用。模块的导入就是“在本模块中使用其他模块”。 1. 模块的导入 模块的导入有两种方式:import 语句导入和from…import 语句导入。模块 就是.py 类型的Python 文件,在导入时不需要加.py 后缀,直接导入文件名即可。 (1)  import 语句导入。 import 语句的基本语法格式如下。 import 模块 1,模块 2... import 模块名 as 模块别名 # 导入多个模块 # 导入模块并使用新名字 (2)  from…import 语句导入。 Python 中可以使用from…import 导入模块中的成员,基本语法格式如下。 from 模块名import 成员 1,成员 2... from 模块名import 成员 as 成员别名 # 导入模块中的多个成员 # 导入模块中的成员并使用新名字 38 from 模块名import * 上式中的*表示导入模块中所有的名字不是以下画线(_)开头的成员(成员是 指模块中的类、函数等)。一般情况下尽量避免使用这种格式,因为导入的名字 很有可能会覆盖之前已经定义的名字,而且可读性极差。 2. 包的导入 包就是包含很多模块的文件夹,包内还可以有子包。利用import 语句可以 直接导入包(本质是执行包中的 init .py 文件,把包也转换成了模块,所以仅 导入 init .py 中的内容),语法格式如下。 import 包名 直接导入一个包,就可以使用包中 init .py 文件中的全部内容。 也可以导入包中的某一个模块,语法格式如下。 import 包名.模块名 39 还可以导入包中指定模块的某一个类或函数,语法格式如下。 import 包名.模块名.类名(或函数名) 3. 模块的使用 (1) 内建模块。 内建模块是在运行解释器时自动导入的模块,可以直接使用模块中的变量、 函数等。在Python 中,有一个内建模块(builtins),该模块在Python 启动后会自 动加载到内存,可以直接使用内建模块中的函数或其他功能。例如,内建模块 中有一个abs()函数,其功能是计算一个数的绝对值,解释器命令行执行abs(-20), 将返回 20,如图 1.34 所示。 40 图 1.34 调用内置函数abs() (2) 标准模块。 标准模块是在安装解释器时自动安装到硬盘上的模块,但在运行解释器时 并不会自动导入,需要用import 语句将其导入才可以使用。例如,标准模块中 的数学模块math,要将其导入以后才能使用,示例代码如程序段 P1.1 所示。在 Python 中,有许多标准模块,随着Python 的发展,标准模块也在发展。 P1.1 导入math 模块 import math print(math.pi) print(math.sqrt(9)) 运行代码,输出结果如下: 3.141592653589793 3.0 41 导入模块后,在使用时要加上模块名。例如,使用 math.pi 输出圆周率;使 用math.sqrt(9)计算 9 的平方根,计算后输出 3。 (3) 第三方模块。 第三方模块需要先安装、导入,然后才能使用,如数值计算模块numpy。 以在线安装为例,首先在操作系统命令行输入以下语句。 pip install numpy 执行命令后,显示结果如图 1.35 所示。 图 1.35 安装第三方模块numpy 显示安装成功后,与标准模块一样在程序中导入使用。示例代码如程序段 P1.2 所示。 42 P1.2 导入numpy 模块 import numpy as np print(np.pi) x=np.array([1,2,3]) print(x) 运行代码,输出结果如下。 3.141592653589793 [1 2 3] 在导入numpy 模块时,给它取了一个别名np,用np.pi 输出了圆周率,用 np.array([1,2,3])定义了一个数组[1,2,3]。 Python 是一个开放的生态系统。开放系统的重要特征是每个开发者都有权 编辑和发布模块(或包),人人都可以为这个系统做出贡献。Python 拥有丰富的标 准库和第三方库,Python 的第三方库会在PyPI 网站(https://pypi.org/)上发布,在 43 安装某个第三方库之前,建议先到 PyPI 官方网站找到该库,了解其基本情况, 特别是它支持的Python 版本,以及最新版本的发布时间。当然很多开发者也使 用GitHub 网站的源码安装。 turtle 对象绘图库 turtle 对象编程思维 对象这个概念,我们并不陌生。现实世界中,我们把感知到的一切有形、 无形的事物都称为对象。例如,大家手里的一本书、校园里的一棵树、动物园 里的一只老虎都可以称为一个对象,这些是有形的对象。同时,“书”这个概念 表示世界上所有的书籍(提到这个概念,你自然会想到所有的书类);“树”这个 概念表示地球上所有的树木;“老虎”这个概念表示地球上所有的虎类动物,这 些都是现实世界中人类创造的概念事物,可以称为概念对象,属于无形的对象。 这是人类的自然思维方式。 44 我们每天都会使用各种不同的软件,软件几乎成了我们生活的必需品。可 以说,大部分软件都是采用面向对象编程技术开发的基于对象的软件系统,人 类创造了一个软件对象世界,这个世界由信息世界、网络空间、虚拟世界和未 来的元宇宙等组成。就像分子、原子是现实世界的基本事物一样,软件世界中的 对象是软件世界中的基本事物。那么,软件世界中的对象是什么呢? 这个问题其实很简单,软件世界中的对象就是现实世界中对象的映射。现 实世界由现实对象构成,软件世界由软件对象构成。一切皆对象,Python 语言 充分实现了这个哲学认识。因此,在现实世界中我们用自然语言表达的对象, 在软件世界中可以很容易地用Python 语言描述出来,因为所采用的思维方式是 一样的,即人类的自然思维方式。这就是 Python 易学、易用且功能强大的根本。 人类认识事物所创造的概念对象,实际上是通过思维活动对现实事物进行 模式识别,再进行归纳、抽象而建立的分类模型概念,并用语言符号进行命名, 这就是类型对象,简称为类对象。例如,书、树、虎就是现实世界中的类对象, 45 而具体的一本书、一棵树、一只老虎就是实例对象。任何对象都有自己的属性 特征和功能行为,因此,通过自然语言描述对象的属性特征和功能行为,我们 就可以识别对象。 Python 语言如何描述对象呢?Python 语言采用class、def、self 等关键词加 上语言符号来描述对象。用Python 语言和中文字符描述海龟类对象的简单模型 如程序段P1.3 所示。 P1.3  用Python 语言和中文字符描述的海龟类 class 海龟: 颜色= "黑色" 腿数= 4 def 前进(self): #  用class 关键词给海龟类模型命名 # 描述海龟的颜色属性 # 描述海龟的腿数属性 #  用def 关键词给海龟前进方法命名,self 关键字表示方法所属的对象 print("前进 10 米") # 方法体描述前进方法要做的事情,这里只输出“前进 10 米” def 后退(self): 46 print("后退 8 米") def 左转(self): print("左转 5 度") def 右转(self): print("右转 3 度") # 用海龟类模型创建一个海龟实例,并命名为小海 # 查看小海的颜色属性 # 调用海龟的前进方法 小海= 海龟() print(小海.颜色) print(小海.腿数) 小海.前进() 小海.后退() 小海.左转() 小海.右转() 运行代码,输出结果如下。 47 黑色 4 前进 10 米 后退 8 米 左转 5 度 右转 3 度 从上面对海龟类模型的描述中可以看到,Python 语言通过定义变量描述对 象的属性特征,这里称为属性;通过 def 定义的函数描述对象的功能行为,在类 模型中,定义的函数的第一个参数必须是表示自身对象的self 参数,因此,在 类对象中定义的函数称为对象的方法。对象的属性和方法,称为对象的成员。 用Python 语言和英文字符描述海龟类对象的模型如程序段P1.4 所示。 P1.4 用Python 语言和英文字符描述的海龟类 class turtle: color = "black" legs = 4 def forward(self): print("Forward 10 meters") 48 def backward(self): print("Backward 8 meters") def left(self): print("Turn left 5 degrees") def right(self): print("Turn right 3 degrees") xiaohai = turtle() print(xiaohai.color) print(xiaohai.legs) xiaohai.forward() xiaohai.backward() xiaohai.left() xiaohai.right() 49 运行代码,输出结果如下。 Backward 8 meters black 4 Turn left 5 degrees    Forward 10 meters   Turn right 3 degrees 在上面的模型中,class 定义类对象的名称turtle,def 定义类对象的行为方 法,self 作为行为方法的第一个参数,表示使用这个行为方法的对象自身。 与自然语言描述类对象一样,用 Python 语言描述类对象实际上就是用 Python 语言对现实世界中的对象建模,构建一个现实世界中的对象映射到软件 世界的模型。这个模型就是软件世界中的类对象。利用这个模型可以创建软件 世界中的一个个实例对象,这些实例对象是现实世界中一个个具体实例对象在 软件世界中的映射。例如,上面程序中的海龟(turtle)是类对象,映射现实世界中 的海龟类概念;创建的小海(xiaohai)是一个实例对象,映射现实世界中的某个具 体的海龟。 50 Python 的turtle 绘图库,就是由一系列软件对象构成的软件系统。 1.4.2 turtle 库概述 turtle 是Python 的一个编程教育类库,广受教育者的喜爱。许多智能设计与 创意编程比赛均使用turtle 库。turtle 库也称为海龟绘图库,它模拟一只小海龟 在爬行,爬行轨迹就是绘制出来的图形。 在turtle 中,小海龟是绘图的画笔(pen)对象,记录小海龟爬行轨迹的是画布 (canvas)对象。画笔对象的形状、颜色和大小等特征,称为画笔对象的属性;画 笔对象的前进、后退、左转和右转等动作,称为画笔对象的方法。在绘图编程 中,根据绘图要求设置画笔属性、调用画笔方法,就可以绘制出需要的图形。turtle 绘图就是采用这种面向对象的编程思维,对画布对象和画笔对象等进行编程来 实现绘图功能的。只是这里的对象都是 turtle 模块已经设计好的,而在解决其他 问题的编程实践中,其对象往往需要自己设计。 51 turtle 是Python 的标准图形模块,当通过 import 语句导入turtle 时,就创建 了一个turtle 对象(模块对象),其中包括屏幕窗口对象、画布对象、画笔对象等。 在屏幕坐标系中,turtle 绘图窗口及画布示意图如图 1.36 所示。 图 1.36 turtle 绘图窗口及画布示意图 绘图窗口及画布属性如表 1-1 所示。 表 1-1 绘图窗口及画布属性 属性名 功能描述 52 width 绘图窗口宽 height 绘图窗口高 startx 绘图窗口左上角顶点 x 坐标 starty 绘图窗口左上角顶点 y 坐标 canvwidth 画布宽 canvheigh 画布高 bg 画布背景颜色 画笔属性如表 1-2 所示。 表 1-2 画笔属性 属性名 功能描述 53 shape 画笔形状 pensize 画笔线条的宽度 colormode 画笔颜色模式 pencolor 画笔颜色 speed 画笔移动速度 turtle 绘图是通过控制海龟(画笔)对象在创建的绘图窗口(画布对象)上移动 来实现图形绘制的。海龟在绘图窗口的移动以两个坐标系为参考。  空间坐标系:空间坐标系以绘图窗口画布的中心点为坐标系原点,原点的 绝对坐标为(0,0)。在图 1.37 中,第一至第四象限四点的绝对坐标分别为 (100,100)、(-100,100)、(-100, -100)、(100, -100)。默认状态下海龟以水 平向右为前进方向。  角度坐标系:角度坐标系是以海龟为中心的相对坐标系,顺时针方向一周为 54 0~-360°,逆时针方向一周为 0~360°,如图 1.38 所示。 图 1.37 空间坐标系 图 1.38 角度坐标系 以两个坐标系为参考,控制海龟在画布上移动,它爬行的路径就是绘制的 图形。turtle 绘图对象常用的控制方法如表 1-3 所示。 表 1-3 turtle 绘图对象常用的控制方法 方法名 功能描述 设置窗体、画布 55 turtle.setup(width,height,startx,starty) 创建设置窗体的宽、高、坐标 turtle.screensize(canvwidth,canvheight,bg) 创建设置画布的宽、高、背景色 turtle.title("s") 设置窗体标题 turtle.bgcolor() 设置背景颜色 turtle.bgpic() 设置背景图片 screen_name = turtle.Screen() 创建窗体对象并取名screen_name canvas_name = turtle.Canvas() 创建画布对象并取名canvas_name (续表) 方法名 功能描述 设置画笔 turtle.shape("turtle") 设置画笔的形状(turtle-海龟;arrow-箭头; circle-圆圈;square-实心正方形;triangle-三角 56 形;classic-默认箭头) turtle.pensize(width)/width() 设置当前画笔线条的宽度为width 像素 turtle.colormode(1.0[255]) 设置画笔颜色模式 turtle.pencolor(colorstring)/color() 设置画笔颜色,colorstring 可以是"green"、 "red"、"blue"、"yellow"等英文字符串 turtle.speed(5) 设置画笔的移动速度,取值范围为[0,10]的 整数,数字越大,画笔移动的速度越快 pen_name=turtle.Pen() 创建画笔对象并取名pen_name 控制画笔 turtle.penup()/pu()/up() 提起画笔,不绘图 turtle.pendown()/pd()/down() 画笔移动时绘制图形 turtle.forward(100)/fd(100) 画笔向当前方向移动 100 像素距离 57 图形与填充 turtle.circle(5,[extent,steps]) 绘制半径为 5 的圆形 turtle.backward(100)/bk(100) 画笔向相反方向移动 100 像素距离 turtle.right(45)/rt(45) 画笔顺时针移动 45° turtle.left(45)/lt(45) 画笔逆时针移动 45° turtle.setheading(45)/seth(45) 设置当前画笔朝向为 45° turtle.goto(x,y) 移动画笔到指定坐标位置 turtle.hideturtle() 隐藏画笔turtle 形状 turtle.showturtle() 显示画笔turtle 形状 turtle.setx(x) 海龟的 x 坐标移动到指定位置 turtle.sety(y) 海龟的 y 坐标移动到指定位置 turtle.home() 设置当前画笔位置为原点,朝向东(默认值) 58 turtle.dot() 画一个圆点(实心) turtle.stamp() 复制当前画笔图形 turtle.fillcolor('red') 设置填充颜色 turtle.color(pencolor,fillcolor) 同时设置画笔颜色(边框颜色)和填充颜色 turtle.begin_fill() 以当前为起点,开始填充颜色 turtle.end_fill() 以当前为终点,结束填充图形 自定义画笔形状 begin_poly() 开始记录图形 end_poly() 结束图形记录 (续表) 方法名 功能描述 59 get_poly() 获取画笔图形 addshape('name',shape) 增加画笔形状 register_shape('name', shape) 注册画笔形状 register_shape("file.gif") 注册gif 格式图片为画笔形状 全局控制 turtle.done() 绘图后,保留窗口。必须是最后一个语句 turtle.clear() 清空turtle 窗口,但是 turtle 的位置和状态不 会改变 turtle.reset() 清空turtle 窗口,重置 turtle 状态为起始状态 turtle.undo() 撤销上一个turtle 动作 turtle.isvisible() 返回当前turtle 是否可见 turtle.write(" 文本" ,align="center",font=(" 微 写文本。align(可选):left、right、center;font(可 60 软雅黑",20,"normal")) 选):字体名称、字体大小、字体类型 屏幕事件 动画控制 turtle.mainloop() 启动事件循环 turtle.listen() 监听屏幕事件 turtle.onkeypress() 当键按下 turtle.onkeyrelease() 当键按下并释放 turtle.onclick(fun,btn=1,add=None) 当单击画布屏幕时,执行函数(fun 为传入的 函数),btn 值:1 为鼠标左键,2 为鼠标中 间键,3 为鼠标右键。当 add 为True 时将添 加一个新绑定 turtle.ontimer(fun,t=0) 定时器,在达到t 毫秒后,执行fun 函数 61 turtle.delay() 延迟(毫秒):连续两次画布刷新的间隔时间 turtle.tracer(n,delay) 追踪小海龟的绘图,当 n 为 0 或为False 时 禁用追踪,默认为 1;delay 为延迟(毫秒) turtle.update() 更新 , 保存图形 image = pen.getscreen() 将屏幕转换为图形对象 image.getcanvas().postscript(file="demo.eps") 保存画布上的图形。仅能保存为 eps 矢量图 格式,可用GIMP 转换为其他格式 turtle 绘图操作方法 创建并设置窗体、画布属性 窗体是绘图展示区域,画布是绘图区域,创建与设置窗体的语法格式如下。 turtle.setup(width=200,height=100,startx=100,starty=100) 62 参数说明如下。  width:窗体宽,当为整数时,表示像素;当为小数时,表示占据计算机屏 幕的比例。  height:窗体高,当为整数时,表示像素;当为小数时,表示占据计算机屏 幕的比例。  startx、starty:表示矩形窗口左上角顶点的位置坐标,如果为空,则窗口位 于屏幕中心。 如果程序中未调用setup()函数,那么绘图程序执行时会生成一个默认窗口。 在程序中绘制完图形后,应调用 done()函数声明绘制结束,此时 turtle 的主循环 会终止,但直到用户手动关闭图形窗口时图形窗口才会退出。 创建与设置画布的语法格式如下。 turtle.screensize(canvwidth=400,canvheight=300,bg='black') 63 参数说明如下。    canvwidth:画布宽,单位为像素。 canvheight:画布高,单位为像素。 bg:背景颜色。可以是"green"、"red"、"blue"、"yellow"等英文字符串。 设置窗体和画布的示例代码如程序段P1.5 所示。 # 导入turtle 模块 # 窗体尺寸为 200×100,左上角顶点坐标为(100, P1.5 设置窗体和画布 import turtle turtle.setup(200,100,100,100) 100) turtle.screensize(400,200,'green') turtle.done() # 画布尺寸为 400×200,颜色为绿色 # 声明绘制结束 运行代码,显示窗口与画布,如图 1.39 所示。 64 图 1.39 窗口与画布 设置的画布比窗体尺寸要大,因此会显示窗口滑动条。 2. 设置画笔属性 画笔形状。 使用shape()方法设置画笔的形状,语法如下。 turtle.shape("turtle") 输入参数表示设置画笔的形状,可以设置以下 6 种形状的画笔:turtle-海龟; arrow-箭头;circle-圆圈;square-实心正方形;triangle-三角形;classic-默认箭头。 画笔粗细。 使用width()方法设置画笔线条粗细,语法如下。 65 turtle.width(width) 参数width 用于设置画笔线条的宽度,用像素表示。 (3) 画笔颜色模式。 使用colormode()方法设置画笔颜色模式,语法如下。 turtle.colormode(1.0[255]) 设置颜色的模式,如果参数 mode 的取值为 255,则采用的是RGB 整数值 模式;如果参数 mode 的取值为 1.0,则采用的是 RGB 小数值模式。颜色模式配 色数值如表 1-4 所示。 表 1-4 颜色模式配色数值表 颜色 RGB 整数值 RGB 小数值 十六进制字符串 白色 (255,255,255) (1,1,1) #FFFFFF 66 黑色 (0,0,0) (0,0,0) #000000 红色 (255,0,0) (1,0,0) #FF0000 绿色 (0,255,0) (0,1,0) #00FF00 蓝色 (0,0,255) (0,0,1) #0000FF 黄色 (255,255,0) (1,1,0) #FFFF00 紫色 (160,32,240) (0.63,0.13,0.94) #A020F0 (4) 画笔颜色。 使用color()方法设置画笔颜色,语法如下。 turtle.color(colorstring) 设置画笔的颜色,参数colorstring 可以是"green"、"red"、"blue"、"yellow" 等英文字符串,也可以是表 1-4 中的配色数值。 67 (5) 画笔速度。 使用speed()方法设置画笔运动速度,语法如下。 turtle.speed(num) 参数num 用于设置画笔移动的速度,其取值范围为[0,10]的整数,数字越大, 速度越快。 设置画笔属性示例代码如程序段P1.6 所示。 P1.6 设置画笔属性 import turtle as pen pen.setup(800,600,100,100) pen.screensize(800,600,'white') pen.shape("turtle") pen.width(10) # 画笔形状,turtle-海龟 # 画笔线条宽度 10 像素 68 # 红色画笔red # 画笔速度 5 # 画笔前进 100 像素 pen.color('red') pen.speed(5) pen.forward(100) pen.done() 运行代码,显示结果如图 1.40 所示。 图 1.40 显示结果 3. 控制画笔 (1) 提起和放下。 69 正如在纸上绘图一样,turtle 中的画笔分为提起(up)和放下(down)两种状态。 只有当画笔为放下状态时,移动画笔,画布上才会留下痕迹。turtle 中的画笔默 认 为 放 下 状 态 , 使 用 penup()/pu()/up() 方 法 可 以 提 起 画 笔 , 使 用 pendown()/pd()/down()方法可以放下画笔。 (2) 移动画笔。 当画笔状态为 down 时,通过移动画笔可以在画布上绘制图形。此时,可以 将画笔想象成一只海龟(这也是turtle 模块名字的由来),当海龟落在画布上时, 它可以向前、向后、向左、向右移动,海龟在爬动时可以在画布上留下痕迹, 路径即为所绘图形。移动画笔的方法如下。  forward(distance)方法用于向前移动画笔,参数distance 为距离,单位为像 素。  backward(distance)方法用于向后移动画笔,参数 distance 为距离,单位为像 素。 70  goto(x,y)方法用于将画笔移动到画布上的指定位置,该函数可以使用参数x、 y 分别接收表示目标位置的横坐标和纵坐标,也可以仅接收一个表示坐标 向量的参数。 (3) 转动画笔。 转动画笔的方法如下。    right(angle)方法用于指定画笔向右转,参数 angle 为转动的角度,单位是度。 left(angle)方法用于指定画笔向左转,参数angle 为转动的角度,单位是度。 setheading(angle)/seth(angle)方法用于设置画笔在坐标系中的角度。参数 angle 以 x 轴正向为 0°,以逆时针方向为正,角度从 0°逐渐增大;以顺 时针方向为负,角度从 0°逐渐减小。 若要使画笔向左或向右移动某段距离,应先调整画笔角度,再使用移动画 笔的方法。 移动与转动画笔的示例代码如程序段P1.7 所示。 71 P1.7 移动与转动画笔 import turtle turtle.goto(-100, -100) turtle.forward(100) turtle.left(45) turtle.forward(100) turtle.right(45) turtle.backward(50) turtle.left(90) turtle.forward(100) turtle.setheading(45) turtle.forward(20) turtle.done() 72 运行代码,显示结果如图 1.41 所示。 图 1.41 显示结果 4. 图形与填充 (1) 圆形绘制。 turtle 模块中提供了circle()方法,用于绘制以当前坐标为圆心,以指定像素 值为半径的圆或弧。语法格式如下。 turtle.circle(radius,[extent,steps]) 参数说明如下。  radius:用于设置半径。当 radius 为正时,画笔以原点为起点向上绘制弧线; 73  当radius 为负时,画笔以原点为起点向下绘制弧线。 extent:用于设置弧的角度。当extent 为正时,画笔以原点为起点向右绘制 弧线;当 extent 为负时,画笔以原点为起点向左绘制弧线;当 extent 为默 认值None 时,绘制整个圆。  steps:用于设置步长。circle()方法可用于绘制正多边形(圆由近似正多边形 来描述)。 (2) 图形填充。 turtle 模块中提供了fillcolor()函数用于设置填充颜色,使用begin_fill()函数 和end_fill()函数可以填充图形,实现“面”的绘制。 例如,先绘制半径为 90/-90 像素、角度为 60°/-60°的弧线组合的四段弧 线;然后把中心点移到(0,100),当参数extent 为默认值None 时,绘制整个圆; 最后把中心点移到(0,-120),参数 steps 用于设置步长,circle()方法用于绘制正多 边形,并把圆形填充为红色。示例代码如程序段P1.8 所示。 74 P1.8 图形与填充 import turtle turtle.circle(90,60) turtle.home() turtle.circle(90,-60) turtle.home() turtle.circle(-90,60) turtle.home() turtle.circle(-90, -60) turtle.home() turtle.goto(0,50) turtle.fillcolor('red') turtle.begin_fill() 75 turtle.circle(50) turtle.end_fill() turtle.goto(0, -120) turtle.circle(50,steps=6) turtle.done() 运行代码,显示结果如图 1.42 所示。 图 1.42 显示结果 通过对海龟对象绘图程序的使用可以发现,面向对象编写的程序逻辑十分 76 清晰,可以通过对象完成程序功能。若要发挥对象的功能,就要设置好对象属 性、使用好对象方法。了解了对象体系,也就熟悉了程序。 合理利用 turtle 模块,可绘制简单有趣的图形,也可结合逻辑代码生成可视 化图表。此外,turtle 模块中还定义了实现更多功能的方法,如制作动画的方法 等。有兴趣的读者可自行查阅Python 官方文档进行深入学习。 谢谢观看 汇报人:WPS $$

资源预览图

1.3模块、包与库(课件)-《Python编程基础与应用》同步教学(清华大学出版社)
1
1.3模块、包与库(课件)-《Python编程基础与应用》同步教学(清华大学出版社)
2
1.3模块、包与库(课件)-《Python编程基础与应用》同步教学(清华大学出版社)
3
1.3模块、包与库(课件)-《Python编程基础与应用》同步教学(清华大学出版社)
4
1.3模块、包与库(课件)-《Python编程基础与应用》同步教学(清华大学出版社)
5
1.3模块、包与库(课件)-《Python编程基础与应用》同步教学(清华大学出版社)
6
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。