当前位置:
文档之家› Python电子教案5-2函数和代码复用
Python电子教案5-2函数和代码复用
实例代码7.2的运行效果
代码的复用和模块化设计
复用和模块化
• 程序由一系列代码组成,如果代码是顺序但无组织的,不仅不利于 阅读和理解,也很难进行升级和维护。因此,需要对代码进行抽象, 形成易于理解的结构。 • 当代编程语言从代码层面采用函数和对象两种抽象方式,分别对应 面向过程和面向对象编程思想。
if d in [2,3,4,5,6,8,9]: drawLine(True)
else: drawLine(False)
七段数码管绘制
• 第8行代码根据输入数字判断是否要绘制七段数码管最中间的横线 • 当需要绘制时,调用绘制函数drawLine(),参数赋值True • 当不需要绘制时,赋值参数False。根据0-9数字结构,对于 2,3,4,5,6,8,9这些数字需要绘制,否则不需要绘制。为了使输出样式 固定,简化设计,当不需要绘制时,turtle画笔需要抬起。 drawLine()函数根据输出参数的值(True或False)决定是否抬起画 笔。
七段数码管绘制
• 数码管是一种价格便宜、使用简单的发光电子器件,广泛应用在价 格较低的电子类产品中,其中,七段数码管最为常用。七段数码管( seven-segment indicator)由7段数码管拼接而成,每段有亮或不 亮两种情况,改进型的七段数码管还包括一个小数点位置,如图5.4 所示。
七段数码管绘制
实例代码7.1的运行效果
七段数码管绘制
• 实例代码7.1仅给出了最基本的七段数码管绘制程序,可以看出, 使用函数能大量复用代码,避免相同功能重复编写。此外,函数的好 处还体现在对代码的修改方面。能否绘制更有趣的七段数码管呢? • 实例代码7.2给出了图5.8的绘制风格,请读者比较实例代码7.2和实 例代码7.1,进一步体会函数为编程带来的便利。
复用和模块化
• 函数是程序的一种基本抽象方式,它将一系列代码组织起来通过命 名供其他程序使用。函数封装的直接好处是代码复用,任何其他代码 只要输入参数即可调用函数,从而避免相同功能代码在被调用处重复 编写。代码复用产生了另一个好处,当更新函数功能时,所有被调用 处的功能都被更新。
复用和模块化
• 对象是程序的一种高级抽象方式,它将程序代码组织为更高级别的 类。对象包括表征对象特征的属性和代表对象操作的方法。例如,汽 车是一个对象,其颜色、轮胎数量、车型是属性,代表汽车的静态值 ;前进、后退、转弯等是方法,代表汽车的动作和行为。 • 在程序设计中,如果<a>代表对象,获取其属性<b>采用 <a>.<b>,调用其方法<c>采用<a>.<c>()。对象的方法具有程序功 能性,因此采用函数形式封装。
drawLine(True) if d in [2,3,4,5,6,8,9] else drawLine(False)
七段数码管绘制
• 以第8行为例,代码采用了单行if…else语句,这种语句常用于if和 else分别只有一行语句的情形。第8行代码含义采用普通if…else语句 表达如下,可见,单行语句的实现方式能够使表达更加紧凑。
复用和模块化
• 简单地,对象是程序拟解决计算问题的一个高级别抽象,它包括一 组静态值(属性)和一组函数(方法)。从代码行数角度,对象和函 数都使用了一个容易理解的抽象逻辑,但对象可以凝聚更多代码。因 此,面向对象编程更适合代码规模较大,交互逻辑复杂的程序
复用和模块化
• 面向过程是一种以过程描述为主要方法的编程方式,该方法要求程 序员列出解决问题所需要的步骤,然后用函数将这些步骤一步一步实 现,使用时依次建立并调用函数或编写语句即可。面向过程编程是一 种基本且自然的程序设计方法,函数通过将步骤或子功能封装实现代 码复用并简化程序设计难度。 • 面向过程和面向对象只是编程方式不同、抽象级别不同,所有面向 对象编程能实现的功能采用面向过程同样能完成,两者在解决问题上 不存在优劣之分
输入:当前日期的数字形式 处理:根据每个数字绘制七段数码管表示 输出:绘制当前日期的七段数码管表示
七段数码管绘制
• 每个0到9的数字都有相同的七段数码管样式,因此,可以通过设计 函数复用数字的绘制过程。进一步,每个七段数码管包括7个数码管 样式,除了数码管位置不同外,绘制风格一致,也可以通过函数复用 单个数码段的绘制过程。这里,先给出程序的全部代码,实例代码 7.1如下
• 模块化设计指通过函数或对象的封装功能将程序划分成主程序、子 程序和子程序间关系的表达。模块化设计是使用函数和对象设计程序 的思考方法,以功能块为基本单位,一般有两个基本要求:
七段数码管绘制
• 七段数码管能形成27=128种不同状态,其中部分状态能够显示易 于人们理解的数字或字母含义,因此被广泛使用。图5.5给出了十六 进制中16个字符的七段数码管表示。
七段数码管绘制
• 本节将延续实例2和第2.4节内容,通过部分turtle库函数绘制七段 数码管形式的日期信息。该问题的IPO描述如下:
复用和模块化
• 当程序的长度在百行以上,如果不划分模块就算是最好的程序员也 很难理解程序含义。解决这一问题的最好方法是将一个程序分割成短 小的程序段,每一段程序完成一个小的功能。无论面向过程和面向对 象编程,对程序合理划分功能模块并基于模块设计程序是一种常用方 法,被称为“模块化设计”。
复用和模块化
七段数码管绘制
• 为了使代码模块化更好,实例代码7.1定义了drawDate()函数()函数将更长数字分解为单个数字,进一步调用 drawDigit()分别绘制每个数字。
main()函数将启动窗体大小、画笔宽度、系统时间等功能封装在 一起,但main()函数并不体现单一功能,这种封装仅从提高代码 可读性角度考虑。
七段数码管绘制
• 实例代码7.1定义了drawDigit()函数,该函数根据输入的数字d绘 制七段数码管,结合七段数码管结构,每个数码管的绘制采用图5.6 所示顺序。
七段数码管绘制
• 绘制起点在数码管中部左侧,无论每段数码管是否被绘制出来, turtle画笔都按顺序“画完”所有7个数码管。对于给定数字d,哪个 数码段被绘制出来采用if…else…语句判断。