Python电子教案5-2函数和代码复用

合集下载

Python-函数和代码复用

Python-函数和代码复用

Python-函数和代码复⽤函数的定义与使⽤>函数的理解与定义函数是⼀段代码的表⽰-函数是⼀段具有特定功能的、可重⽤的语句组-函数是⼀种功能的抽象,⼀般函数表达特定功能-两个作⽤:降低编程难度和代码复⽤def <函数名>(<参数(0个或多个)>) : <函数体> return <返回值>#计算n!def fact(n) : #fact 函数名;n 参数s = 1for i in range(1, n+1):s *= ireturn s # s 返回值-函数定义时,所指定的参数是⼀种占位符-函数定义后,如果不经过调⽤,不会被执⾏-函数定义时,参数是输⼊、函数体是处理、结果是输出(IPO)>函数的使⽤及调⽤过程调⽤是运⾏函数代码的⽅式#接上段代码a=fact(10)-调⽤时要给出实际参数-实际参数替换定义中的参数-函数调⽤后得到返回值>函数的参数传递参数个数:函数可以有参数,也可以没有,但必须保留括号def fact() : print("我是⼀个没有参数的函数")可选参数传递:函数定义时可以为某些参数指定默认值,构成可选参数def <函数名>(<⾮可选参数>,<可选参数>) : <函数体> return <返回值>#计算 n!//mdef fact(n, m=1) : #m=1为可选参数s = 1for i in range(1, n+1):s *= ireturn s//m#fact(10) 3628800#fact(10,5) 725760可变参数传递函数定义时可以设计可变数量参数,即不确定参数总数量def <函数名>(<参数>,*b) : <函数体> return <返回值>#计算 n!乘数def fact(n, *b) : #*b可变参数s = 1for i in range(1, n+1):s *= ifor item in b:s *= itemreturn s# fact(10,3) 10886400#fact(10,3,5,8) 435456000参数传递的两种⽅式:函数调⽤时,参数可以按照位置或名称⽅式传递def fact(n, m=1) :s = 1for i in range(1, n+1):s *= ireturn s//m# fact( 10,5 ) 725760# fact( m=5,n=10 ) 725760>函数的返回值函数可以返回0个或多个结果-return保留字⽤来传递返回值-函数可以有返回值,也可以没有,可以有return,也可以没有-return可以传递0个返回值,也可以传递任意多个返回值def fact(n,m=1):s=1for i in range(1,n+1)s*=ireturn s//m,n,m#fact(10,5) (725760,10,5)#a,b,c=fact(10,5)#print(a,b,c)#725760 10 5>局部变量与全局变量n, s = 10, 100 #n,s时全局变量def fact(n) :s = 1 #fact()函数中的n s是局部变量for i in range(1, n+1):s *= ireturn sprint(fact(n), s) #n,s是全局变量#3628800 100规则1:局部变量和全局变量是不同变量-局部变量是函数内部的占位符,与全局变量可能重名但不同-函数运算结束后,局部变量被释放-可以使⽤global保留字在函数内部使⽤使⽤全局变量n, s = 10, 100 #n,s时全局变量def fact(n) :global s #fact()函数中使⽤global保留字声明此处s是全局变量sfor i in range(1, n+1):s *= ireturn sprint(fact(n), s) #此处全局变量s是被函数修改#362880000 362880000规则2:局部变量为组合数据类型且未创建,等同于全局变量ls = ["F", "f"] #通过使⽤[]真实创建了⼀个全局变量列表lsdef func(a) :ls.append(a) #此处ls是列表类型,未真实创建则等同于全局变量returnfunc("C") #局部变量ls被修改print(ls)# ['F','f','C']ls = ["F", "f"] #通过使⽤[]真实创建了⼀个全局变量列表lsdef func(a) :ls = [] #此处ls是列表类型,真实创建ls是局部变量ls.append(a)returnfunc("C") #局部变量ls被修改print(ls)#['F','f']使⽤规则-基本数据类型,⽆论是否重名,局部变量与全局变量不同-可以通过global保留字在函数内部声明全局变量-组合数据类型,如果局部变量未真实创建,则是全局变量>lambda函数lambda函数返回函数名作为结果-lambda函数是⼀种匿名函数,即没有名字的函数-使⽤lambda保留字定义,函数名是返回结果-lambda函数⽤于定义简单的、能够在⼀⾏内表⽰的函数<函数名> = lambda <参数> : <表达式>等价于def <函数名> (<参数>): <函数体> return <返回值>f=lambda x,y:x+yf=(10,15)#结果:25f=lambda:"lambda函数"print(f())#结果:lambda函数谨慎使⽤lambda函数-lambda函数主要⽤作⼀些特定函数或⽅法的参数-lambda函数有⼀些固定的使⽤⽅式,建议逐步掌握-⼀般情况,建议使⽤def定义的普通函数代码复⽤与函数递归>代码复⽤与模块化设计把代码当成资源的抽象-代码资源化:程序代码是⼀种⽤来表达计算的“资源”-代码抽象化:使⽤函数等⽅法对代码赋予更⾼级别的定义-代码复⽤:同⼀份代码在需要时可以被重复使⽤函数和对象是代码复⽤的两种主要形式函数:将代码命名在代码层⾯建⽴了初步抽象对象:属性和⽅法 <a>.<b> 和<a>.<b>( )在函数之上再次组织进⾏抽象分⽽治之-通过函数或对象封装将程序划分为模块及模块间的表达-具体包括:主程序、⼦程序和⼦程序间的关系-分⽽治之:⼀种分⽽治之、分层抽象、体系化的设计思想紧耦合松耦合-紧耦合:两个部分之间交流很多,⽆法独⽴存在-松耦合:两个部分之间交流少,可以独⽴存在-模块内部紧耦合、模块之间松耦合>函数递归的理解函数定义中调⽤函数⾃⾝的⽅式两个关键特征-链条:计算过程存在递归链条-基例:存在⼀个或多个不需要再次递归的基例类似数学归纳法-数学归纳法-证明当n取第⼀个值n0时命题成⽴-假设当n k时命题成⽴,证明当n=n k+1时命题也成⽴-递归是数学归纳法思维的编程体现>函数递归的调⽤过程def fact(n):if n==0:return 1else:return n*fact*(n-1)函数+分⽀语句-递归函数本⾝是⼀个函数,需要函数定义⽅式描述-函数内部,采⽤分⽀语句对输⼊参数进⾏判断-基例和链条,分别编写对应代码>函数递归实例解析将字符串s反转后输出def rvs(s):if s == "":return sslse:return rvs(s[1:])+s[0]斐波那契数列:⼀个经典的数列def f(n):if n==1 or n==2 :return 1else:return f(n-1)+f(n-2)。

Python语言程序设计基础(第2版)第五章答案

Python语言程序设计基础(第2版)第五章答案

第5章函数和代码复用5.1 函数的基本使用[5.1]: A[5.2]: D[5.3]: 错误。

[5.4]: 合法,因为Python语言是解释执行,即只要在真正调用函数之前定义函数,都可以进行合法调用。

5.2 函数的参数传递[5.5]: 在函数定义时,直接为可选参数指定默认值。

可选参数必须定义在非可选参数后面,可选参数可以有多个。

[5.6]: 在函数定义时,可变参数通过在参数前增加星号(*)实现。

可变数量参数只能在参数列表最后,即它只能有一个。

[5.7]: 返回值是元组类型。

[5.8]: 位置传递:支持可变数量参数,但容易忘记实参的含义;名称传递:不易忘记实参的含义,但不支持可变数量参数。

[5.9]: 如果函数里没有创建同名变量,则可以直接使用,不需global声明。

5.3 模块3:datetime库的使用[5.10]:print( "现在是{0:%Y}年{0:%m}月{0:%d}日{0:%I}:{0:%M}".format(datetime.now()))[5.11]: 答案不限。

举一个例子,输出美式日期格式:print("{0:%I}:{0:%M} {0:%b} {0:%d} {0:%Y}".format(datetime.now()))[5.12]: datetime对象可以直接做加减运算,所以可以用这样的方式给程序计时:1 2 Start = datetime.now() ... # 要计时的代码4 5 6 End = datetime.now() Cost = End – Start Print(Cost)5.4 实例7:七段数码管绘制[5.13]: 相当于C语言中的三目运算符。

[5.14]: 隐藏画笔的turtle形状。

[5.15]: 对应相应的年月日文字输出。

5.5 代码复用和模块化设计[5.16]: 错误,因为”使用函数“是“模块化设计“的必要条件。

Python中用函数实现代码的复用

Python中用函数实现代码的复用

Python中⽤函数实现代码的复⽤# Python中⽤函数实现代码复⽤"""def funcname(paras):statementsreturn [expression]关于函数定义说明如下:函数定义以def关键字开头,后接函数名称和圆括号()paras是函数的参数,放在函数名后⾯圆括号()内,参数之间⽤逗号分隔statemengts是函数体,函数体的前部可以选择性的使⽤字符串,⽤于说明函数功能函数声明以冒号结束,函数体内需要缩进return语句⽤于结束函数,将返回值传递给调⽤语句。

不带表达式的return返回None值说明:如果函数的参数是多个,默认情况下,函数调⽤时,传⼊的参数和函数定义时参数定义的顺序是⼀致的,调⽤必须在定义之后执⾏help(函数名)命令,将显⽰函数的说明信息"""def hello():print("Hello Python")def getarea(x, y):'''参数为两个数值数据,或者⼀个字符串和⼀个整数'''return x * yhello()print(help(getarea))print(getarea(2, 3))def getcirclearea(r):'''参数为数值数据(圆的半径)'''print("圆的⾯积是:{:>8.2f}".format(3.14 * r * r))returngetcirclearea(3)print(type(getcirclearea))print(getcirclearea(3)) # return 语句⽆返回值,返回None# 函数的嵌套'''函数嵌套的定义:函数嵌套的定义指的是在函数内部定义的函数,但内嵌的函数只能在该函数中使⽤'''# 使⽤嵌套定义的函数求阶乘和def sum(n):def fact(a):t = 1for i in range(1, a + 1):t *= ireturn ts = 0for i in range(1, n + 1):s += fact(i)return s# 函数的嵌套使⽤def mai():print("输⼊数据")userinput()print("处理数据")userprocessing()print("输出数据")useroutput()def userinput():passdef userprocessing():passdef useroutput():passmai()'''函数的参数和返回值1.位置参数函数调⽤时,默认情况下按照位置顺序传递给形参2.赋值参数如果参数很多,按位置传递参数的⽅式可读性较差,python提供了按照形参名输⼊实参的⽅式,这种参数称为赋值参数3.参数值的类型参数的类型是指函数调⽤时,传递的实际参数是基本数据类型还是组合数据类型。

Python技术的模块化与代码复用方法

Python技术的模块化与代码复用方法

Python技术的模块化与代码复用方法近年来,Python已经成为了一门非常受欢迎的编程语言。

其简洁、易读的语法以及强大的开发生态系统,使得开发者们纷纷选择Python来构建他们的项目。

在Python的开发过程中,模块化和代码复用是非常重要的概念。

本文将探讨Python技术中的模块化和代码复用方法,并提供一些实用的技巧。

一、模块化开发的概念模块化是指将大型程序划分为独立的功能模块,每个模块都具有特定的功能和接口,以便于在整个程序中进行组合和重用。

Python中,模块是一个包含 Python定义和声明的文件。

通过将功能代码分割为不同的模块,我们可以更好地组织和管理代码,提高可读性和可维护性。

在模块化开发过程中,我们可以通过使用import语句将其他模块导入到当前模块中,以便在当前模块中调用其他模块中的函数、类或变量。

例如,我们可以导入Python标准库中的模块,如math、random等,来使用这些模块中提供的函数和方法。

二、代码复用的方法代码复用是指在程序开发中重复使用已有的代码,而不是重复编写相同的代码。

代码复用可以提高开发效率,减少代码冗余,同时也有助于代码的稳定性和可维护性。

1. 函数的重用函数是代码复用的最常见方式之一。

在Python中,我们可以将一段需要重复执行的代码封装在一个函数中,并在需要时通过函数调用来复用该代码。

例如,我们可以编写一个用于计算斐波那契数列的函数:```pythondef fibonacci(n):if n <= 0:return []elif n == 1:return [0]elif n == 2:return [0, 1]else:fib = [0, 1]for i in range(2, n):fib.append(fib[i-1] + fib[i-2])return fib```通过定义这个函数,我们可以在其他地方直接调用`fibonacci(n)`来获取斐波那契数列的前n个数字,而不用重复编写计算斐波那契数列的代码。

可以复用的代码说课稿

可以复用的代码说课稿

可以复用的代码说课稿一、说教材本文以“可以复用的代码”为主题,深入浅出地介绍了代码复用的概念、重要性及其在实际编程中的应用。

在当今的计算机编程教学中,代码复用是一项基本且关键的技能,它对于提高编程效率、降低开发成本具有重要意义。

本文在教材中的作用和地位:1.本文是编程基础教学的重要组成部分,起到了承上启下的作用。

它在前置课程的基础上,进一步引导学生理解编程的核心思想,为后续学习更复杂的编程技能打下坚实基础。

2.本文内容紧贴实际编程需求,通过实例讲解,使学生能够直观地感受到代码复用的优势,提高学习的积极性。

主要内容:1.代码复用的概念:本文首先介绍了代码复用的定义,使学生明确何为可复用的代码,以及为何要进行代码复用。

2.代码复用的方法:文章详细阐述了常用的代码复用方法,如函数封装、模块化设计等,并举例说明了这些方法在实际编程中的应用。

3.代码复用的优势:本文从提高编程效率、降低开发成本、提高代码可维护性等方面,论述了代码复用的优势。

二、说教学目标学习本课,学生需要达到以下教学目标:1.理解代码复用的概念,明确其重要性。

2.掌握常用的代码复用方法,并能在实际编程中灵活运用。

3.提高编程思维,培养良好的编程习惯。

4.能够分析代码的可复用性,提高代码质量。

三、说教学重难点本文的教学重点是:1.代码复用的概念及其在实际编程中的应用。

2.常用的代码复用方法。

教学难点在于:1.如何引导学生理解代码复用的优势,从而培养他们在编程中主动寻求复用的意识。

2.如何让学生在实际编程中灵活运用所学代码复用方法,提高编程能力。

在教学过程中,需针对这些重点和难点进行深入讲解和练习,确保学生能够真正掌握代码复用的技能。

四、说教法为了使学生更好地理解和掌握代码复用的概念和方法,我采用了以下几种教学方法和策略,旨在突出教学亮点,提高教学效果。

1. 启发法:在讲解代码复用的概念时,我通过提出问题的方式引导学生思考,例如:“为什么我们需要重复使用代码?”,“重复编写代码会带来哪些问题?”。

Python函数和代码复用实例

Python函数和代码复用实例

for i in range(1,n+1):
result = result + pow(i,m)
return result
s = fun(100,1) + fun(50,2) + fun(10,-1) print(s) 三、利用递归函数计算1!+2!+3!+...+20!的和。 def fun(n):
if (n<=1): return 1
else: return n*fun(n-1)
result = 0 for i in range(1,21):
result = result + fun(i) print(result) 四、输入正整数n(3≤n<1000 ), 计算有多少对素数的和等于输入的整个正整数,并输出结果。 例如:input 10
其中map函数为python内置函数mapints即将int函数映射到字符串s中的每一个字符也就是将每一个字符转换为整数从而得到一个包含正整数n的各位数字的迭代器
Python函数和代码复用实例 一、编写函数,计算一个正整数n的各位数字之和。 提示: 方法1: 1)def str()e: return True
n = int(input("input ")) count = 0 list = [] for i in range(2,n):
if fun(i) and fun(n-i) and i<=n-i: list.append(i) list.append(n-i) count = count + 1
2)遍历字符串s,取出数字字符,并使用int()函数将其转换为整数num; 3)每次遍历时,将整数num累加至变量sum中,推出循环后,将sum作为函数返回值,即为各位数字之和。 方法2:1) def str()函数将该正整数n转换为字符串s; 2)通过列表生成器[int(c) for c in s],得到正整数n对应的各位数字构成的整数列表ls; 3)通过Python内置函数sum(),计算列表ls元素之和,即为各位数字之和。 方法3:1)def str()函数将该正整数n转换为字符串s; 2)使用list(map(int,s)),得到正整数n对应各位数字构成的整数列表ls。其中map()函数为Python内置函数,map(int,s)即将int()函数映射到字 符串s中的每一个字符,也就是将每一个字符转换为整数,从而得到一个包含正整数n的各位数字的迭代器; 3)通过Python内置函数sum(),计算列表ls元素之和,即为各位数字之和。 def str_1(n): s = str(n) result = 0 for c in s: result = result + int(c) return result

Python函数和代码复用

Python函数和代码复用

Python函数和代码复⽤(1).函数的定义与使⽤ 1)函数的定义与使⽤⽅法 函数是⼀段代码的表⽰,它对应了⼀段具有特定功能的、可重⽤的语句组,它是⼀种功能的抽象,它表达特定的含义。

在⼀般编程中,函数有两个作⽤,它通过函数定义⼀段功能,可以降低编码难度,同时也可以对⼀段代码进⾏复⽤。

函数的使⽤⽅法如下,其中函数体指的是函数内部包含的⼀些语句代码:def <函数名>(<参数(0个或多个)>):<函数体>return <返回值> 实例:计算n!def fact(n):s=1for i in range(1,n+1):s*=ireturn s 函数在定义时,所指定的参数只是⼀种占位符,它是⼀种符号表⽰。

函数定义之后,如果这个函数不被调⽤,那么这个函数在程序中也是不会被执⾏,即函数被调⽤才会执⾏。

从另外⼀个⾓度来理解函数,函数在定义时给定参数,参数就是函数的输⼊,函数体本⾝就是对参数的⼀种处理,⽽return就是给出这段函数运⾏的结果,可以看到有输⼊、处理和输出,这就是IPO。

可以简单理解函数就是IPO的⼀种实现,函数也是⼀段完整代码的封装。

 2)函数的使⽤以及调⽤过程 函数的调⽤指的是运⾏函数代码的⽅式,例如上⾯的实例计算n!,程序看到这段定义并不会去执⾏这段代码,⽽执⾏需要使⽤函数的调⽤⽅式。

所谓调⽤就是⽤函数的名称给定⼀个具体的值作为参数,所以调⽤时给出的实际参数是运⾏函数的输⼊,要⽤实际的参数替换定义中的占位参数,函数调⽤后会得到实际参数运⾏之后的运⾏结果。

以如下代码为例,说明调⽤过程: ⾸先,程序会查找定义的函数fact,并将给定的参数10赋给这个函数的占位参数n,此时10就代替了定义函数中的n。

然后执⾏函数体相关的程序,那么运算这段代码之后产⽣了⼀个具体的s值。

接着这个具体的s值会被作为返回值返回给fact(10)的这段代码,作为运算结果并赋值给变量a。

ppt3python函数及代码复用[1]

ppt3python函数及代码复用[1]
这个例子说明,当函数执行完退出后,其内部变量将被
释放。如果函数内部使用了全局变量呢?
ppt3python函数及代码复用[1]
变量的返回值
>>>n = 1 #n是全局变量
>>>def func(a, b):
n=b
#这个n是在函数内存中新生成的局部变量,不是全局变量
return a*b
>>>s = func("knock~", 2) >>>print(s, n) #测试一下n值是否改变
ppt3python函数及代码复用[1]
函数对变量的作用
一个程序中的变量包括两类:全局变量和局部变量。 •全局变量指在函数之外定义的变量,一般没有缩进,在 程序执行全过程有效。 •局部变量指在函数内部使用的变量,仅在函数内部有效 ,当函数退出时变量将不存在。
ppt3python函数及代码复用[1]
>>> Happy birthday to you! Happy birthday to you! Happy birthday, dear Mike! Happy birthday to you!
Happy birthday to you! Happy birthday to you! Happy birthday, dear Lily! Happy birthday to you!
>>>ls = []
#ls是全局列表变量
>>>def func(a, b):
ls.append(b) ls中
#将局部变量b增加到全局列表变量
return a*b
>>>s = func("knock~", 2) >>>print(s, ls) #测试一下ls值是否改变
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实例代码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…语句判断。
相关文档
最新文档