《Python电子教案5-2 函数和代码复用》由会员分享,可在线阅读,更多相关《Python电子教案5-2 函数和代码复用(56页珍藏版)》请在人人文库网上搜索。

1、七段数码管绘制,数码管是一种价格便宜、使用简单的发光电子器件,广泛应用在价格较低的电子类产品中,其中,七段数码管最为常用。七段数码管(seven-segment indicator)由7段数码管拼接而成,每段有亮或不亮两种情况,改进型的七段数码管还包括一个小数点位置,如图5.4所示,七段数码管绘制,七段数码管绘制,七段数码管能形成27=128种不同状态,其中部分状态能够显示易于人们理解的数字或字母含义,因此被广泛使用。图5.5给出了十六进制中16个字符的七段数码管表示,七段数码管绘制,本节将延续实例2和第2.4节内容,通过部分turtle库函数绘制七段数码管形式的日期信息。该问题的IPO描述如。

2、下: 输入:当前日期的数字形式 处理:根据每个数字绘制七段数码管表示 输出:绘制当前日期的七段数码管表示,七段数码管绘制,每个0到9的数字都有相同的七段数码管样式,因此,可以通过设计函数复用数字的绘制过程。进一步,每个七段数码管包括7个数码管样式,除了数码管位置不同外,绘制风格一致,也可以通过函数复用单个数码段的绘制过程。这里,先给出程序的全部代码,实例代码7.1如下,七段数码管绘制,实例代码7.1定义了drawDigit()函数,该函数根据输入的数字d绘制七段数码管,结合七段数码管结构,每个数码管的绘制采用图5.6所示顺序,七段数码管绘制,绘制起点在数码管中部左侧,无论每段数码管是否被绘制出。

3、来,turtle画笔都按顺序“画完”所有7个数码管。对于给定数字d,哪个数码段被绘制出来采用ifelse语句判断。 drawLine(True) if d in 2,3,4,5,6,8,9 else drawLine(False,七段数码管绘制,以第8行为例,代码采用了单行ifelse语句,这种语句常用于if和else分别只有一行语句的情形。第8行代码含义采用普通ifelse语句表达如下,可见,单行语句的实现方式能够使表达更加紧凑。 if d in 2,3,4,5,6,8,9: drawLine(True) else: drawLine(False,七段数码管绘制,第8行代码根据输入数字判断是。

4、否要绘制七段数码管最中间的横线 当需要绘制时,调用绘制函数drawLine(),参数赋值True 当不需要绘制时,赋值参数False。根据0-9数字结构,对于2,3,4,5,6,8,9这些数字需要绘制,否则不需要绘制。为了使输出样式固定,简化设计,当不需要绘制时,turtle画笔需要抬起。drawLine()函数根据输出参数的值(True或False)决定是否抬起画笔,七段数码管绘制,为了使代码模块化更好,实例代码7.1定义了drawDate()函数和main()函数。 drawDate()函数将更长数字分解为单个数字,进一步调用drawDigit()分别绘制每个数字。 main()函数将启动。

5、窗体大小、画笔宽度、系统时间等功能封装在一起,但main()函数并不体现单一功能,这种封装仅从提高代码可读性角度考虑,七段数码管绘制,实例代码7.1的运行效果,实例代码7.1仅给出了最基本的七段数码管绘制程序,可以看出,使用函数能大量复用代码,避免相同功能重复编写。此外,函数的好处还体现在对代码的修改方面。能否绘制更有趣的七段数码管呢? 实例代码7.2给出了图5.8的绘制风格,请读者比较实例代码7.2和实例代码7.1,进一步体会函数为编程带来的便利,七段数码管绘制,实例代码7.2的运行效果,代码的复用和模块化设计,程序由一系列代码组成,如果代码是顺序但无组织的,不仅不利于阅读和理解,也很难进行。

6、升级和维护。因此,需要对代码进行抽象,形成易于理解的结构。 当代编程语言从代码层面采用函数和对象两种抽象方式,分别对应面向过程和面向对象编程思想,复用和模块化,函数是程序的一种基本抽象方式,它将一系列代码组织起来通过命名供其他程序使用。函数封装的直接好处是代码复用,任何其他代码只要输入参数即可调用函数,从而避免相同功能代码在被调用处重复编写。代码复用产生了另一个好处,当更新函数功能时,所有被调用处的功能都被更新,复用和模块化,对象是程序的一种高级抽象方式,它将程序代码组织为更高级别的类。对象包括表征对象特征的属性和代表对象操作的方法。例如,汽车是一个对象,其颜色、轮胎数量、车型是属性,代表汽车。

7、的静态值;前进、后退、转弯等是方法,代表汽车的动作和行为。 在程序设计中,如果代表对象,获取其属性采用.,调用其方法采用.()。对象的方法具有程序功能性,因此采用函数形式封装,复用和模块化,简单地,对象是程序拟解决计算问题的一个高级别抽象,它包括一组静态值(属性)和一组函数(方法)。从代码行数角度,对象和函数都使用了一个容易理解的抽象逻辑,但对象可以凝聚更多代码。因此,面向对象编程更适合代码规模较大,交互逻辑复杂的程序,复用和模块化,面向过程是一种以过程描述为主要方法的编程方式,该方法要求程序员列出解决问题所需要的步骤,然后用函数将这些步骤一步一步实现,使用时依次建立并调用函数或编写语句即可。。

8、面向过程编程是一种基本且自然的程序设计方法,函数通过将步骤或子功能封装实现代码复用并简化程序设计难度。 面向过程和面向对象只是编程方式不同、抽象级别不同,所有面向对象编程能实现的功能采用面向过程同样能完成,两者在解决问题上不存在优劣之分,复用和模块化,当程序的长度在百行以上,如果不划分模块就算是最好的程序员也很难理解程序含义。解决这一问题的最好方法是将一个程序分割成短小的程序段,每一段程序完成一个小的功能。无论面向过程和面向对象编程,对程序合理划分功能模块并基于模块设计程序是一种常用方法,被称为“模块化设计,复用和模块化,模块化设计指通过函数或对象的封装功能将程序划分成主程序、子程序和子程序间。

9、关系的表达。模块化设计是使用函数和对象设计程序的思考方法,以功能块为基本单位,一般有两个基本要求: 紧耦合:尽可能合理划分功能块,功能块内部耦合紧密; 松耦合:模块间关系尽可能简单,功能块之间耦合度低,复用和模块化,对比实例代码2.1和实例代码2.3,尽管后者通过函数封装增多了代码行数,但采用drawSnake()函数封装的功能理解起来更加容易。 观察实例代码7.1,采用函数封装后,理解程序的第一层次不再是直接阅读语句,而是阅读函数及其框架,有需要时再进一步理解函数内部语句。为了增强代码可读性,复用和模块化,建议读者采用实例代码7.1中方式,将程序初始化或函数间过度语句封装为main()函数,。

10、使得全部代码都由函数组成,最后通过main()语句执行程序。 尽管函数和模块化设计使整个程序看上去篇幅更长,但所增加的封装代码十分有益,它们为程序带来了模块化的层次结构,使程序具有更好的可读性,复用和模块化,函数的递归,函数作为一种代码封装,可以被其他程序调用,当然,也可以被函数内部代码调用。这种函数定义中调用函数自身的方式称为递归。就像一个人站在装满镜子的房间中,看到的影像就是递归的结果。递归在数学和计算机应用上非常强大,能够非常简洁的解决重要问题,递归的定义,数学上有个经典的递归例子叫阶乘,阶乘通常定义为: 为了实现这个程序,可以通过一个简单的循环累积去计算阶乘。观察5!的计算,如果去掉了。

11、5,那么就剩下计算4!,推广来看,n!=n(n-1),递归的定义,实际上,这个关系给出了另一种方式表达阶乘的方式: 这个定义说明0的阶乘按定义是1,其他数字的阶乘定义为这个数字乘以比这个数字小1数的阶乘。递归不是循环,因为每次递归都会计算比它更小数的阶乘,直到0!。0!是已知的值,被称作递归的基例。当递归到底了,就需要一个能直接算出值的表达式,递归的定义,阶乘的例子揭示了递归的2个关键特征: (1)存在一个或多个基例,基例不需要再次递归,它是确定的表达式; (2)所有递归链要以一个或多个基例结尾,递归的定义,微实例5.1:阶乘的计算,递归的使用方法,fact()函数在其定义内部引用了自身,形成。

12、了递归过程。 无限制的递归将耗尽计算资源,因此,需要设计基例使得递归逐层返回。fact()函数通过if语句给出了n为0时的基例,当n=0,fact()函数不再递归,返回数值1,如果n!=0,则通过递归返回n与n-1阶乘的乘积,递归的使用方法,由于负数和小数通过减1无法到达递归的基例,即n=0,代码第7行通过abs()和int()函数将用户输入转变成非负整数,该程序输出效果如下,递归的使用方法,请输入一个整数: 10 3628800 请输入一个整数: 12.345 479001600,递归遵循函数的语义,每次调用都会引起新函数的开始,表示它有本地变量值的副本,包括函数的参数。图5.13给出了计算。

13、5!的递归调用过程,每次函数调用时,函数参数的副本会临时存储,递归中的各函数在运算自己的参数,相互没有影响。当基例结束函数运算并返回值时,各函数逐层结束运算,向调用者返回计算结果,递归的使用方法,递归的使用方法,对于用户输入的字符串s,输出反转后的字符串。 解决这个问题的基本思想是把字符串看作一个递归对象。长字符串由较短字符串组成,每个小字符串也是一个对象。假如把一个字符串看成仅有两部分组成:首字符和剩余字符串。如果将剩余字符串与首字符交换,就完成了反转整个字符串,代码如下。 def reverse(s): return reverse(s1:) + s0,微实例5.2:字符串反转,观察这个函。

14、数的工作过程。s0是首字符,s1:是剩余字符串,将它们反向连接,可以得到反转字符串。执行这个程序,结果如下,递归的使用方法,这个错误表明系统无法执行reverse()函数创建的递归,这因为reverse()函数没有基例,递归层数超过了系统允许的最大递归深度。默认情况下,当递归调用到1000层,Python解释器将终止程序。 递归深度是为了防止无限递归错误而设计,当用户编写的正确递归程序需要超过1000层时,可以通过如下代码设定,递归的使用方法,import sys sys.setrecursionlimit(2000) #2000是新的递归层数 reverse()超过递归深度是因为没有设计基例。

15、。字符串反转中的递归调用总是使用比之前更短的字符串,因此,可以把基例设计为字符串的最短形式,即空字符串,递归的使用方法,实例5.2的完整代码和结果,微实例5.2的结果 请输入一个字符串: 唐诗宋词 词宋诗唐,科赫曲线绘制,科赫曲线的基本概念和绘制方法如下: 正整数n代表科赫曲线的阶数,表示生成科赫曲线过程的操作次数。科赫曲线初始化阶数为0,表示一个长度为L的直线。对于直线L,将其等分为三段,中间一段用边长为L/3的等边三角形的两个边替代,得到1阶科赫曲线,它包含四条线段。进一步对每条线段重复同样的操作后得到2阶科赫曲线。继续重复同样的操作n次可以得到n阶科赫曲线,如图5.14所示,科赫曲线绘制。

16、,科赫曲线绘制,科赫曲线属于分形几何分支,它的绘制过程体现了递归思想,绘制过程代码如下,科赫曲线绘制,科赫曲线绘制,n阶科赫曲线的绘制相当于在画笔前进方向的0度、60度、-120度和60度分别绘制n-1阶曲线。实例代码8.1中main()函数设置了一些初始参数,如果希望控制绘制科赫曲线的速度,可以采用turtle.speed()函数增加或减少速度。 科赫曲线从一条直线绘制开始,如果从等边三角形开始将更有趣。替换实例代码8.1中的main()函数,代码如下。在给定初始图形后,通过科赫曲线可以生成很多漂亮的图形,请读者探索和尝试,科赫曲线绘制,科赫曲线绘制,Python内置函数,Python解释器。

17、提供了68个内置函数,这些函数不需要引用库直接使用,如表5.4所示。其中,前36个已经或将在本书中出现,需要读者掌握,Python内置函数,Python内置函数,部分函数说明如下,其他尚未遇到的函数将在后续章节中介绍并使用 all()函数一般针对组合数据类型,如果其中每个元素都是True,则返回True,否则返回False。需要注意,整数0、空字符串、空列表等都被当作False。 any()函数与all()函数相反,只要组合数据类型中任何一个是True,则返回True,全部元素都是False时返回False,Python内置函数,hash()函数对于能够计算哈希的类型返回哈希值。 id()函数对每一个数据返回唯一编号,数据不同编号不同,可以通过比较两个变量是否相同判断数据是否一致。 reversed()函数返回输入组合数据类型的逆序形式。 sorted()函数对一个序列进行排序,默认从小到大排序。 type()函数返回每个数据对应的类型,Python内置函数,本章主要介绍了函数的代码复用问题,包括函数的定义、lambda函数使用、函数递归以及参数的位置和名称传递等内容。本章还引入datatime时间日期库的使用,并绘制了七段数码管时钟,讲解了如何使用函数递归绘制复杂精美的科赫曲线,本章小结。

python中组合数据类型、函数和代码复用的难点_Python电子教案5-2 函数和代码复用...相关推荐

  1. 数据科学 IPython 笔记本 9.3 理解 Python 中的数据类型

    9.3 理解 Python 中的数据类型 本节是<Python 数据科学手册>(Python Data Science Handbook)的摘录. 译者:飞龙 协议:CC BY-NC-SA ...

  2. 软件测试【三】Python中的数据类型

    一.Python中的数据类型: python中的list列表定义 在Python中,list是一种有序的数据类型,可以存储任意类型的对象,包括数字.字符串.布尔值.函数等. 定义一个list列表可以使 ...

  3. python字典、列表、元祖使用场景_python学习第七讲,python中的数据类型,列表,元祖,字典,之元祖使用与介绍...

    python学习第七讲,python中的数据类型,列表,元祖,字典,之元祖使用与介绍 一丶元祖 1.元祖简介 元祖跟列表类似.只不过是有区别的. 如下: tuple(元祖英文) 跟列表类似, 元素不能 ...

  4. goupby 两个值 结果变了_一道问题引出的python中可变数据类型与不可变数据类型...

    一. 问题的提出 我们先来看两个对比 第一道题,当对象为整数时,最终结果:b = 2, a = 1,b的变化没有引起a的变化 第二道题,当对象为字典时,最终结果:a = {"name&quo ...

  5. python学习第八讲,python中的数据类型,列表,元祖,字典,之字典使用与介绍

    目录 python学习第八讲,python中的数据类型,列表,元祖,字典,之字典使用与介绍.md 一丶字典 1.字典的定义 2.字典的使用. 3.字典的常用方法. python学习第八讲,python ...

  6. python中的数据类型和控制流

    上一篇文章中我们介绍了 python 语言的几个特点,并在最后留了一个问题,python 除了上下执行以外有没有其他的执行方式. 今天我们就来介绍 python 中的数据类型和控制流. 数据类型 py ...

  7. 数据类型有哪几种python,python中的数据类型有哪几种

    python中的数据类型有哪几种 发布时间:2020-07-20 11:21:01 来源:亿速云 阅读:107 作者:清晨 小编给大家分享一下python中的数据类型有哪几种,希望大家阅读完这篇文章后 ...

  8. python数据类型哪些是无序的_Python自学知识-Python中的数据类型有哪些?

    今天小编要跟大家分享的文章是关于Python自学知识-Python中的数据类型有哪些?正在自学Python知识的小伙伴们来和小编一起看一看吧,希望能够对大家有所帮助!Python中主要有8种数据类型: ...

  9. 在python中输入10个整数并求出最大值_python练习题 :用户任意输入10个整数到列表中,然后由大到小排列并输出。...

    一:填空题: 1.python是一种面向_对象 __的高级语言. 2.python可以在多种平台运行,这体现了python的___可移植___特性. 3.python源代码被解释器转换后的格式为___ ...

最新文章

  1. AKOJ-1695-找素数
  2. python能做回归吗_有大神会看Python多元回归的结果吗?本人做出来了,但是不会看.....
  3. DevExpress的下拉框控件ComboxBoxEdit怎样绑定键值对选项
  4. 编写一个算法frequency,统计在一个输入字符串中各个不同字符出现的频度。用适当的测试数据来验证这个算法。
  5. 【自动驾驶】武汉全球首发自动驾驶商用牌照,无人驾驶的梦想照进现实?
  6. 【转】十八个绝招把你从压力中营救出来
  7. gmssl java api_关于GmSSL Java API编译
  8. Python 数据恢复实战 - 恢复U盘中的chk文件,以及误删的文件
  9. Python数据分析项目实例5: 分析某餐饮企业的订单详情表数据(基于matplotlib的python数据可视化分析)
  10. CyanogenMod精简手记
  11. 西湖,半含春雨半垂丝
  12. Linux之安全最佳做法(未完成)
  13. python实现小程序_python实现小程序
  14. Cadence 禁止start page的方法
  15. 【c++ primer】第五版第十六章习题答案
  16. pdfkit批量转换html文件为pdf
  17. Auto-Tuning with Reinforcement Learning for Permissioned Blockchain Systems
  18. e^(πi)=-1的最佳解释笔记
  19. 程序员的自我修养--读阮一峰《如何变得有思想》有感
  20. 图像分类和目标检测到底有什么区别??

热门文章

  1. Gentoo下搭建DNS中转服务器基本配置
  2. Too_many_open_files_问题的解决
  3. matlab实验报告的总结,matlab实验报告
  4. bfv同态加密_五分钟了解同态加密及三种常见方案
  5. 错误上报_PCIe错误的上报方式
  6. 二十年后我发明了保姆机器人作文_【赏学堂】苹果五级作文班优秀作品赏析——温睿哲二十年后回故乡...
  7. java 反射抽象_Java实现抽象工厂模式+java的反射的机制
  8. python 每月每周_R-Python:获取每月,每周的索引点
  9. C++函数返回值的规则
  10. java中的greeting_JAVA基础知识——字符串