《Python程序设计案例教程》 课件 单元5 函数_第1页
《Python程序设计案例教程》 课件 单元5 函数_第2页
《Python程序设计案例教程》 课件 单元5 函数_第3页
《Python程序设计案例教程》 课件 单元5 函数_第4页
《Python程序设计案例教程》 课件 单元5 函数_第5页
已阅读5页,还剩99页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Python编程基础函数的定义与调用一、函数的定义二、函数的调用引入4

合作共赢作为构建人类命运共同体的前提、核心和目的,有分工就有合作的需要,有合作才能有分工者之间的共赢。

在Python中,函数的重要作用就是实现分工合作的模块化程序设计。

Python中函数的应用非常广泛,除了可以直接使用的内置函数外,Python还支持自定义函数,即将一段有规律的、可重复使用的代码定义成函数,从而达到一次编写、多次调用的目的。一、函数的定义5函数定义语法:def函数名([形式参数列表]):函数体其中,函数定义以关键字def开始,随后是函数的名(例如print),函数名可以是任何合法的Python标识符;[]表示可选内容,如果函数需要一些输入信息,我们可以在括号内指定这些参数,参数可以是零个、一个或多个,当有多个参数时,各参数之间使用逗号隔开;函数定义以冒号(:)结束。函数定义之后的所有缩进代码都属于函数体。一、函数的定义6【例】定义一个名为hello()的问候函数,该函数的功能是输出“Hello”字符串。#定义一个问候函数defhello():print('Hello')7二、函数调用函数调用的一般形式如下所示。函数名([实际参数列表])其中,函数名即指的是要调用的函数的名称;实际参数列表指的是当初创建函数时要求传入的各个形式参数的值。8二、函数调用【例】编写求和函数(求1~100的和),然后调用函数输出求和结果。defsum():#定义函数#函数体,求1~100的和s=0i=1whilei<=100:s=s+ii+=1print("sum=%d"%(s))sum()#调用函数输出结果【运行结果】sum=5050感谢您的观看Python编程基础函数的参数一、形参和实参二、默认值参数三、可变参数形式参数又称形参,是函数所需的输入信息,我们在函数定义时指定形参。【例】定义一个问候函数,该函数的功能是基于用户名输出不同的问候信息。defhello(name):

print('Hello%s'%(name))13一、形参和实参一、形参和实参实际参数又称实参,是我们调用函数时传递的数据。当我们调用具有参数的函数时,需要传递相应的数据,例如:defhello(name):

print('Hello%s'%(name))hello('Python')【运行结果】HelloPython一、形参和实参函数的参数传递是指将实际参数传递给形式参数的过程,即函数在被调用时,向其传递实参,将实参引用传递给形参。如果函数有多个形参,则需要使用逗号进行分隔,当函数在被调用时会将实参按照相应的位置依次传递给形参,也就是说将第一个实参传递给第一个形参,将第二个实参传递给第二个形参,以此类推。【例】编写函数,接受两个整数,并输出其中最大数。defprintMax(a,b):#定义函数printMax(a,b)ifa>b:print(a,'isthemax')else:print(b,'isthemax')printMax(8,5)#调用函数printMax(a,b)【运行结果】8isthemax16一、形参和实参二、默认值参数定义函数时,可以为函数的参数设置默认值,这个参数被称为默认值参数。带有默认值参数的函数定义语法如下所示。def函数名(…,形参名=默认值):函数体【例】在函数定义中使用默认值参数。defnew_member(name,student_id,grade="大一"):#定义函数中使用默认值参数print("姓名",name)print("学号",student_id)print("年级",grade)print("---------------------------")return#调用函数new_member("张三","0001")new_member("李四","0002","大二")18二、默认值参数【运行结果】姓名

张三学号0001年级

大一---------------------------姓名

李四学号0002年级

大二---------------------------默认值参数必须出现在函数参数列表的最右端,任何一个默认值参数右边不能有非默认值参数。19二、默认值参数基本语法格式如下所示。def函数名([形参列表,]*a,**a):

函数体*a用来接收任意多个实参并将其放在一个元组中。**a是用来接收多个“键-值”对实参并将其放在字典中。20三、可变参数【例】使用可变参数*a。>>>defdemo1(*a):print(a)>>>demo1('大一','大二','大三')('大一','大二','大三')三、可变参数【例】使用不定长参数**a。>>>defdemo2(**a):foriteminkwargs.items():print(item)>>>demo2(张三='大一',李四='大二',王五='大三')('张三','大一')('李四','大二')('王五','大三')三、可变参数感谢您的观看Python编程基础return语句函数并非总是直接输出数据,它还可以处理一些数据,并返回一个或一组值。函数返回的值被称为返回值。26引入Python中,用def语句创建函数时,可以用return语句指定应该返回的值,该返回值可以是任意类型。调用函数的一方,可以使用变量来接收函数的返回结果。函数中,使用return语句的语法格式如下:

return[返回值]其中,返回值参数可以指定,也可以省略不写(将返回空值None)。27return语句return语句【例】定义循环求和函数,要求把求和结果返回。defsum(num1,num2):s=0whilenum1<=num2:s=s+num1num1+=1returns#使用return语句把求和结果返回s2=sum(1,100)#函数赋值给变量print("sum=%d"%(s2))print(sum(1,100))#函数返回值作为其他函数的实际参数执行程序,运行结果如下所示。sum=50505050return语句特别强调:以下情况Python将认为该函数以returnNone结束。-函数没有return语句-函数有return语句但是没有执行到-只有return关键字而没有返回值【例】定义求商函数,使用return语句根据条件判断有选择性地返回。30return语句【运行结果】感谢您的观看Python编程基础函数的嵌套和递归一、函数的嵌套二、递归函数函数在定义时还可以在其内部嵌套定义另外一个函数,此时嵌套的函数称为外层函数,被嵌套的函数称为内层函数。【例】在outer()函数中嵌套定义inner()函数。defouter(a,b):#定义外层函数outer()result=a+bprint("我是外层函数")print(result)

definner():#定义内层函数inner()print("我是内层函数")inner()#outer()函数外调用inner()函数一、函数的嵌套注意:inner()函数只在定义开始到outer()函数结束范围内有效Python还允许在一个函数中调用另外一个函数,这就是函数的嵌套调用。【例】函数的嵌套调用。defouter(a,b):#定义外层函数outer()result=a+bprint("我是外层函数")print(result)definner():#定义内层函数inner()print("我是内层函数")inner()#调用函数inner()outer(1,2)一、函数的嵌套执行程序,运行结果如下所示。我是外层函数3我是内层函数函数在定义时可以直接或间接地调用其他函数。若函数直接或间接地调用自身,则这个函数被称为递归函数,Python支持函数的递归调用。直接递归调用间接递归调用

提示这两种递归调用都是无休止地调用自身。因此,为了防止无限递归,所有递归函数都需要设定终止条件。二、递归函数二、递归函数递归函数的一般定义格式如下:

def

函数名([参数列表]):

if边界条件:

rerun结果 else:

return递归公式【例】用递归函数求解n!(n为整数)。deffunc(num):ifnum==0:return1else:returnnum*func(num-1)num=int(input("请输入一个整数:"))result=func(num)print(f"{num}!=%d"%result)程序运行效果二、递归函数n!=1*2*3*…*n,可以分为以下两种情况:1.当n=0时,所得的结果为1。

边界条件2.当n>0时,所得的结果为n*(n-1)!。

递归公式阶乘n!deffunc(4):ifnum==0:return1else:return4*func(3)deffunc(3):ifnum==0:return1else:return3*func(2)deffunc(2):ifnum==0:return1else:return2*func(1)deffunc(1):ifnum==0:return1else:return1*func(0)deffunc(0):ifnum==0:return111264!=24二、递归函数通常使用递归函数解决结构相似的问题,它可以采用递归的方式,将一个复杂的大型问题转化为与原问题结构相似的、规模较小的若干个子问题,之后再对最小化的子问题求解,从而得到原问题的解。感谢您的观看Python编程基础变量的作用域一、局部变量二、全局变量三、global关键字当一个程序中包含多个函数时,可在各函数中分别定义变量。变量并非在程序的任意位置都可以被访问,其访问权限取决于变量定义的位置,其所处的有效范围称为变量的作用域。一个变量在函数外部定义和在函数内部定义,其作用域是不同的。根据变量作用域的不同,可将变量分为局部变量(LocalVariable)和全局变量(GlobalVariable)两种类型。46引入局部变量是指在函数内部定义的变量,它的作用域仅限于函数内部,出了函数就不能使用。【例】局部变量的使用。deftest_one():number=10 #局部变量print(number) #函数内部访问局部变量test_one()print(number) #函数外部访问局部变量【运行结果】10

Traceback(mostrecentcalllast):

File"D:/PycharmProjects/untitled/1.py",line5,in<module>

print(number) #函数外部访问局部变量

NameError:name'number'isnotdefined47一、局部变量二、全局变量除了在函数内部定义变量,Python还允许在所有函数的外部定义变量,这样的变量称为全局变量。和局部变量不同,全局变量的默认作用域是整个程序,即全局变量既可以在各个函数的外部使用,也可以在各函数内部使用。二、全局变量【例】全局变量的使用。number=10 #全局变量deftest_one():print(number) #函数内部访问全局变量test_one()print(number) #函数外部访问全局变量【运行结果】1010三、global关键字如果想要在函数内部给一个定义在函数外的变量赋值,那么这个变量就不能是局部的,她的作用域必须是全局的,这时,就可以通过global关键字来声明这个变量为全局变量。使用global关键字可分为以下两种情况。

情况一:一个变量已经在函数外定义,如果在函数内需要为这个变量赋值,并要将这个赋值结果反映到函数外,可以在函数内用global声明这个变量,将其声明为全局变量。情况二:在函数内部直接将一个变量声明为全局变量,即便在函数外没有声明该变量,但是当函数执行后,被global修饰的变量仍将增加为新的全局变量。三、global关键字【例】用global关键字声明变量为全局变量。>>>defdemo():globalx#使用global声明变量x为全局变量x=3y=4print(x,y)>>>x=5#函数外定义全局变量x值为5>>>demo()#调用demo()函数34>>>x#函数外访问x变量3>>>y#函数外访问y变量Traceback(mostrecentcalllast):File"<input>",line1,in<module>NameError:name'y'isnotdefined感谢您的观看Python编程基础匿名函数匿名函数Python有一种特殊的函数叫“匿名函数”,它其实是没有使用def语句定义函数的标准方式,而是用lambda关键字的方式来简略定义的函数。匿名函数没有函数名,而是将函数名作为函数结果进行返回。55匿名函数匿名函数定义如下所示。函数名=lambda[参数列表]:表达式其中,表达式表示函数要进行的操作。【例】匿名函数的定义和使用>>>f=lambdaa,b:a+b>>>f(1,2)3匿名函数常用在临时需要一个类似于函数的功能,但又不想定义函数的场合。56匿名函数【例】给定多位学生信息(包括学号、姓名和成绩),按成绩排序后输出。stu=[{'num':'202201','name':'张三','score':89},{'num':'202202','name':'李四','score':95},{'num':'202203','name':'王五','score':85}] #定义学生信息stu.sort(key=lambdax:x['score']) #按成绩排序forsinstu:print('学号:',s['num'],'姓名:',s['name'],'成绩:',s['score']) #输出列表【运行结果】学号:202203姓名:王五成绩:85学号:202201姓名:张三成绩:89学号:202202姓名:李四成绩:9557匿名函数具有以下特点:1)lambda表达式中只包含一个表达式,函数体比def简单很多,代码更加简洁;2)lambda表达式的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去;3)匿名函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。匿名函数感谢您的观看Python编程基础模块一、模块的定义和分类二、模块的导入和使用63一个.py⽂件就可以称之为一个模块,模块用来归置类、函数、变量和可执行代码,将功能类似的类或者函数放到同一模块,使代码结构更加清晰。一、模块的定义和分类64模块可以分为三类:(1)内置标准模块(⼜称标准库):Python解释器自带,可以执⾏help(‘modules’)查看所有Python⾃带模块列表。(2)第三⽅模块(又称第三方库):开源模块,可通过“pipinstall模块名”联网安装,手动安装之后才可使用。(3)自定义模块:用户自己自行编写的尾缀.py的文件。为了更好地组织模块,通常会把多个模块放在一个包中。一、模块的定义和分类65导入模块的方式:(1)import模块名(2)from模块名import功能名(3)from模块名import*(4)import模块名as别名(5)from模块名import功能名as别名二、模块的导入与使用66在Python中用关键字import来引入某个模块。语法结构如下所示。import模块名1,模块名2,...使用模块里的函数时,语法结构如下所示。模块名.函数名()#使用模块里的函数【例】使用import导入模块。importdatetimex=datetime.datetime.now()print(x)【运行结果】2022-10-2714:30:12.2171521.import导入67from…import语句允许编写人员只导入模块的一部分。语法结构如下所示。from模块名import函数名(变量名)1,函数名(变量名)2....【例】使用from…import语句导入模块。fromtimeimportgmtimeifgmtime().tm_year==2022:foriinrange(1,13):print(str(gmtime().tm_year)+'年'+str(i)+'月')2.from…import语句68把一个模块的所有内容全都导入到当前的命名空间时,还可以使用from…import*语句,语法结构如下所示。from模块名import*3.from…import*

语句注意:“from模块名import*”语句与“import模块名”都能导入指定模块的全部内容,但是相比之下,“import模块名”导入方式使用更加方便,因此在程序开发中更推荐使用“import模块名”的方式导入指定模块全部内容。69Python支持导入模块时为模块设置别名,语法结构如下所示。import模块名as别名

或

from模块名import功能名as别名4.as别名【例】使用as关键字设置别名。>>>importtimeastt#导入模块时设置别名为tttime.sleep(1)>>>NameErrorTraceback(mostrecentcalllast)<ipython-input-2-07a34f5b1e42>in<module>()---->1time.sleep(1)NameError:name'time'isnotdefined>>>tt.sleep(1)#使用别名才能调用方法>>>fromtimeimportsleepassp#导入方法时设置别名sleep(1)>>>NameErrorTraceback(mostrecentcalllast)<ipython-input-5-82e5c2913b44>in<module>()---->1sleep(1)NameError:name'sleep'isnotdefined>>>sp(1)#使用别名才能调用方法感谢您的观看Python编程基础任务1设计饮品自动售货机程序随着无人新零售经济的崛起,商场、车站、大厦等各种场所都引入了无人饮品自动售货机,方便人们选购自己想要的饮品。购买者选择想要的饮品,通过投币或扫码的方式支付,支付成功后从出货口取出饮品。本任务将带领大家编写Python程序,利用函数设计具有显示饮品信息、计算总额等功能的饮品自动售货机程序。73任务描述功能需求1.展示商品信息("可口可乐":2.5元,"百事可乐":2.5元,"冰红茶":3元,"脉动":3.5元,"果缤纷":3元,"绿茶":3元,"茉莉花茶":3元,"尖叫":2.5元);2.提示用户输入购买的商品和数量;3.计算需要支付的总金额。74任务实施完成本任务,我们需要定义函数分别实现相关功能。1.定义函数all_goods(),利用字典结构存储饮品信息,使用return语句把饮品信息返回。75任务实施2.定义函数show_goods()用来显示饮品信息。76任务实施3.定义函数total()用来计算需要支付的总金额。77任务实施4.定义一个控制饮品自动售货机操作流程的函数main()。78任务实施感谢您的观看Python编程基础任务2

求解汉诺塔问题

汉诺塔游戏是一款风靡全球的益智游戏,它让玩家们可以通过完成各种不同的挑战,来锻炼自己的思维能力和解决问题的能力。该游戏是指在一座汉诺塔内,有三根柱子,编号A、B、C,柱子A自下而上、由大到小按顺序放置有64个盘子。游戏的目标:把A柱子上的盘子全部移到C柱子上,并保持原有顺序叠好全盘。每次只能移动一个盘子,并且在移动过程中三根柱子上都始终保持大盘在下、小盘在上的状态。82任务描述本任务将带领大家编写Python程序,使用递归函数求解汉诺塔问题。此任务用递归函数求解汉诺塔问题时,可以先将汉诺塔游戏抽象为数学问题。假设移动盘子数为N。此时可分为三个子步骤来完成。步骤一:以C柱子为中介,从A柱子将1至N-1号盘子移至B柱子。步骤二:将A柱子中剩下的第N号盘子移至C柱子。步骤三:以A柱子为中介,从B柱子将1至N-I号盘子移至C柱子。83任务实施本任务可设计递归函数hanoi(n,a,b,c)其中n、a、b和c分别表示盘子数、源柱、中介柱和目标柱。当函数调用一次,盘子数减1,当盘子数减至1时,递归结束。84任务实施本任务可设计递归函数hanoi(n,a,b,c)(其中n、a、b和c分别表示盘子数、源柱、中介柱和目标柱。)如果n为1,则将这一个盘子从a柱直接移到c柱,n=1是递归的临界条件。否则执行以下步骤:1.递归调用hanoi(n-1,a,c,b),将n-1个盘子借助c柱从a柱移到b柱。2.将第n号盘子从a柱移到c柱。3.递归调用hanoi(n-1,b,a,c),将n-1个盘子借助a柱从b柱移到c柱。85任务实施defhanoi(n,a,b,c):

if(n==1):

#直接将盘子从a移动到c

print(a+"->"+c)returnelse:

#先将n-1个盘子从a移到b

hanoi(n-1,a,c,b)

#再将1个盘子从a移到c

print(a+"->"+c)

#最后

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论