版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第5章函数引例:
abcd
efgS1S2S3无函数用函数函数是一段具有特定功能的、可重用的语句组,用函数名来表示并通过函数名进行完成功能调用。使用函数函数,是一段能够完成一定任务的、相对独立的,可以重用的语句组。也可以被看作是一段具有名字的子程序。使用函数的优点:(1)简化程序设计,实现代码复用。(2)模块化程序设计,方便调试和维护。
使用函数进行程序设计,一个完整的Python程序由两种代码组成:(1)程序主体(2)若干个函数函数的定义语法格式:
def<函数名>(<参数列表>):
<函数体>
return<返回值列表>defarea(x,y,z):
c=1/2*(x+y+z)
return(c*(c-x)*(c-y)*(c-z))**0.5形参:需要向函数传递的信息返回值:函数的最终结果若函数的功能不是计算结果,可以没有返回值若没有信息需要传递,可以没有参数,括号不能省函数的调用语法格式:函数名(实参)…s1=area(a,b,c)…函数名实参defarea(x,y,z):c=1/2*(x+y+z)return(c*(c-x)*(c-y)*(c-z))**0.5函数的调用
defarea(x,y,z):c=1/2*(x+y+z)return(c*(c-x)*(c-y)*(c-z))**0.5a,b,c,d,e,f,g=9,11,18,13,14,7,8s1=area(a,b,c)s2=area(c,d,e)s3=area(e,f,g)s=s1+s2+s3print("五边形面积为{s:.2f}")defarea(x,y,z):c=1/2*(x+y+z)return(c*(c-x)*(c-y)*(c-z))**0.5a
xb
yc
zc
xd
ye
ze
xf
yg
z实参形参实参和形参按其位置顺序一一传递函数的返回值函数的返回值——函数在执行完成后,将向调用者返回运算的结果(数据)。return语句的两个功能:(1)将函数运算的结果返回到调用该函数的语句中(2)结束函数的执行defarea(x,y,z):c=1/2*(x+y+z)return(c*(c-x)*(c-y)*(c-z))**0.5例:编程计算20以内素数的个数设计prime函数:函数的功能:判断一个数是否为素数函数的形参:接收判断对象数据函数的返回值:判断结果,布尔类型程序主体中:
使用穷举法,穷举20以内的所有大于等于2的整数,判断整数是否为素数,进行计数。importmathdefprime(n):foriinrange(2,int(n**0.5)+1):ifn%i==0:returnFalsereturnTruem=0foriinrange(2,21):ifprime(i):m+=1print(f'20以内的素数有{m}个')编程思路:在2~sqrt(n)的区间中不存在可以整除n的数,则n为素数。程序主体:使用穷举法测试区间内各个数是否是素数(调用函数测试)。是素数就计数器加1。最后打印计数结果代码实现:defprime(n):foriinrange(2,int(n**0.5)+1):ifn%i==0:returnFalsereturnTruem=0foriinrange(2,21):ifprime(i):m+=1print(f'20以内的素数有{m}个')(1)一个函数中可以有多条return语句,执行到哪一条return语句,哪一条就起作用。(2)return语句一旦被执行,不论其后是否还有语句未执行,都将立即结束所在函数的执行,并将结果返回给调用者。(3)带return语句的函数调用时,一般出现在语句中的一部分,将计算的结果使用起来。return的注意事项:无返回值函数deftag(a):n=len(a)+2print('*'*n)print(f'*{a}*')print('*'*n)print('Wecanmakenametagslikethis:')tag('name')x=input('Pleaseinputyourname:')tag(x)如果一个函数没有return语句,或者return语句后没有数据,该函数的返回值就是None。None是Python中一个特殊的值,它不表示任何数据。返回值是None的函数,在被调用时一般都单独作为一行。它们的功能是完成特定的任务,而不是计算一个结果。lambda函数使用形式:lambda形参:返回值
函数名=lambda形参:返回值该定义完全等价于:
def函数名(形参):
return返回值勾股定理求斜边长函数:
deff(a,b):
return(a*a+b*b)**0.5等价于:
f=lambdaa,b:(a*a+b*b)**0.5例:输入直角三角形两条直角边的长度,计算斜边的长度。f=lambdaa,b:(a**2+b**2)**0.5x,y=map(eval,input('请输入两条直角边:').split())z=f(x,y) print('直角三角形的斜边长为:{:.2f}')函数的定义函数的调用函数的参数参数是调用函数的语句和函数之间信息交互的载体:(1)形式参数
——定义函数时的参数,又称为形参。(2)实际参数
——调用函数时的参数,又称为实参。函数调用的时候,实参会把值传递给形参,就实现了参数的传递。形参的设计1.有参数函数为了实现函数的功能,需要向函数传递必要的信息。2.无参数的函数无需向函数传递信息,就可以实现函数的功能。例:设计一个随机产生6位密码的程序,要求密码由6个字符组成,字符包括大写字母和数字字符。无参数的函数——随机打印一个字符importrandomdefpassword():t='ABCDEDFHIJKLMNOPQRSTUVWXYZ0123456789's=''foriinrange(6):s=s+random.choice(t)returnsprint(password())有参数的函数——求解一元二次方程ax2+bx+c=0defequation(a,b,c):dt=b*b-4*a*cifdt<0:return'Nosolution.'else:x1=(-b+dt**0.5)/(2*a)x2=(-b-dt**0.5)/(2*a)returnx1,x2print(equation(2,11,-6))equation(a,b,c):equation(2,11,-6))关键字参数定义函数:
equation(a,b,c):调用函数:
equation(2,11,-6)调用函数:
equation(b=11,c=-6,a=2)定义函数:
equation(a,b,c):关键字参数的设计importmathdefcv(r,h):returnmath.pi*r*r*hprint(cv(1,2))print(cv(r=1,h=2))print(cv(h=2,r=1))cv(r,h):cv(1,2)cv(r,h):cv(r=1,h=2)cv(r,h):cv(h=2,r=1)默认值参数定义函数:
equation(a,b,c=1):调用函数:
equation(1,-2,1)
equation(1,-2)定义函数:
equation(a=1,b=-2,c=1):调用函数:
equation()
equation(b=2.5)
equation(c=6)形参设计时,把默认值参数放在形参列表的最后。实参可以使用关键字参数。任意选择想省略的实参。如果多个形参都有默认值可变数量参数defave(name,*n):m=0foriinn:m+=im/=len(n)returnf'{name:>4}:{m}'print('选修课平均分:')print(ave('张三',99))print(ave('李四',95,78,97,84))当函数的参数个数不确定时使用,通过在形参前面加星号(*)实现。例:设计一个计算选修课平均分的函数。选修课程的数目因人而异,至少选修一门课。函数获取姓名和若干个选修课分数,返回字符串,包含姓名和平均分。可变数量参数只有一个,且放在最后。剩余的实参被当成一个整体,以元组的形式传递到可变形参中。两次调用形参n分别为:(99,)(95,78,97,84)变量的分类根据变量定义位置的不同,可分为两类:全局变量:定义在函数外的变量,其作用域是整个程序。局部变量:定义在函数内的变量(形参也属于局部变量),其作用域是该函数的内部。其特点:(1)局部变量只在本函数内部有效;(2)当函数调用结束,局部变量就被释放,变量将不存在;(3)不同函数可以拥有同名的局部变量,各自的局部变量相互不影响。全局变量的使用特点(1)全局变量,在整个程序中有效。(2)局部变量和全局变量出现同名,则在函数内部使用的是局部变量。(3)若函数中没有定义同名的局部变量,函数内部也可以直接使用全局变量,只要不对全局变量重新赋值即可。一旦在函数内部开始使用全局变量,就不能再定义同名的局部变量。(4)若要在函数内部对全局变量赋值,必须使用global关键字对全局变量进行说明。例:设计一个修改记录颜色变量的函数,并打印当前颜色值。defchange(s):color=sprint(f'Inthefunction,thecurrentcoloris{color}.')color='red'print(f'Thecurrentcoloris{color}.')change('blue')print(f'Thecurrentcoloris{color}.')函数的嵌套调用被调用函数的函数体中也可以有函数调用的语句,用于调用其他函数,我们称之为函数的嵌套调用。例:编写一个小学口算题生成程序,用户指定题数,随机产生100以内加减法口算题,并根据用户的选择决定是否给出参考答案。编程分析:设计一个cal()函数产生一道口算题,并返回该题的答案。通过另一个exam()函数根据用户输入的题数,调用cal()函数来生成一批口算题,并将这些题的所有答案返回。主体程序主要完成用户输入和调用exam()函数,并根据情况打印答案importrandomdefcal():a=random.randint(0,99)b=random.randint(0,99)ifa<b:a,b=b,ar=a-bc=random.randint(0,1)ifc==0:a,r=r,aprint(f’{a}+{b}=')else:print(f’{a}-{b}='))returnrdefexam(n):ans=[]foriinrange(n):x=cal()ans.append(x)returnansn=int(input('请输入题数:'))s=exam(n)a=input('是否需要参考答案:')ifa=='是':print(s)代码实现
…s=exam(n)
…程序主体defexam(n):
…x=cal()
…returnansexam()函数defcal():
…
returnrcal()函数程序执行过程①②③④⑤⑥⑦⑧⑨若多次调用cal()函数,则第④⑤⑥步会执行多次。递归的定义
递归的定义递归作为一种算法在程序设计过程中广泛应用。它通常是把一个复杂问题逐步(逐层)转化为一个与原问题相似,并且规模相对小的问题来求解。函数作为一种代码封装,可以被其他程序调用。当然,也可以被函数自身内部代码调用。这种函数定义中调用函数自身的方式称为递归。递归函数:在函数定义内部调用函数自身。4!=4×3!3!=3×2!2!=2×1!1!=1问题:求4!递推回归定义fact(n)函数调用fact(n)函数求阶乘函数deffact(n):ifnin[0,1]:return1else:returnn*fact(n-1)以计算4!为例:fact(4)=
4×fact(3)fact(3)=
3×fact(2)fact(2)=
2×fact(1)fact(1)=1fact(2)=
2×1=2fact(3)=
3×2=6fact(4)=
4×6=24回归递归的条件:①递推结束的条件②递推结束时的值③递归的表示,并向结束条件发展递推递归程序执行过程deffact(n):ifnin[0,1]:return1else:returnn*fact(n-1)deffact(n):ifnin[0,1]:return1else:returnn*fact(n-1)deffact(n):ifnin[0,1]:return1else:returnn*fact(n-1)x=int(input("输入一个大于等于0的整数:"))print(fact(x))若输入为3参数传递:3n=3n-1为2传2n-1为1传1n=2函数返回值为1返1函数返回值为2返2函数返回值为6返回6打印答案6n=1递
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 企业管理-病历管理制度
- 天津市东丽区2026届初三下学期3月联考数学试题含解析
- 江苏省苏州市梁丰重点达标名校2026年初三第四次模拟考试(5月)数学试题含解析
- 吉林省长春市教研室重点达标名校2026届初三第一次模拟数学试题试卷含解析
- 北京市崇文区名校2025-2026学年初三物理试题5月月考含解析
- 浙江省绍兴市海亮重点名校2025-2026学年初三练习题(一)(全国卷II)物理试题含解析
- 沈阳市铁西区重点中学2025-2026学年重点高中联盟领军考试4月初三物理试题(文)试题含解析
- 广东省汕头市科利园实验校2026年初三5月阶段质量检测试题数学试题含解析
- 山西省吕梁市蕴华国际双语校2026届第一次中考模拟考试物理试题含解析
- 江苏省宜兴市张渚徐舍教联盟重点中学2025-2026学年初三下学期期中数学试题含解析
- 人教版六年级数学下册易错题锦集(全面版)
- 中建五局有限空间作业方案编制指南(2022版)
- 中职高考《农业经营与管理》考试题库大全-中(多选题)
- 苏教版小学科学五年级下册单元测试题(含答案)
- 全国中学生物理竞赛公式
- 2022年福建省南平一中自主招生物理学科试卷
- 诊断学课件:病历书写
- 鼻咽癌患者放疗护理课件整理
- 上市公司内部控制手册模板
- 2021年高一下物理第六章《圆周运动》测试卷及答案解析
- 高考作文复习:议论文写作之驳论文段指导
评论
0/150
提交评论