《Python程序设计》 课件 项目7 函数应用_第1页
《Python程序设计》 课件 项目7 函数应用_第2页
《Python程序设计》 课件 项目7 函数应用_第3页
《Python程序设计》 课件 项目7 函数应用_第4页
《Python程序设计》 课件 项目7 函数应用_第5页
已阅读5页,还剩104页未读 继续免费阅读

下载本文档

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

文档简介

项目7函数应用了解函数的概念及作用01理解函数的模块化设计思想02掌握函数的定义和调用方法03知识目标理解return语句的作用和用法05理解函数的局部变量和全局变量06理解函数的递归和嵌套用法07理解函数的参数传递方式04能够根据功能需求定义函数01能够根据功能需求定义嵌套函数。02能够运用不同的方式传递函数参数03能力目标能够熟练运用匿名函数04能够熟练运用递归函数解决复杂的问题05能够处理函数的异常和错误06目录简易计算器设计任务1汽车进销存管理系统设计任务2汉诺塔游戏设计任务3

任务1简易计算器设计任务提出01任务分析02知识准备03任务实现04任务总结05任务提出Part.01提出任务运用PyCharm开发工具编写Python程序,设计一个简易的计算器,要求该计算器能实现两个数字的加、减、乘、除(+、-、*、/)运算等功能,其中每一种运算都要求通过调用函数来完成。任务分析Part.02分析任务1.创建Python程序cal.py。2.设计命令行用户界面,向用户展示可用的运算选项。3.为加、减、乘、除每一种运算设计一个运算函数。4.通过input函数接受用户的输入,调用相应的函数进行计算。5.运行测试程序,通过验证输出的计算结果来测试程序。该任务主要完成的是两个数字的加、减、乘、除运算,在运行的过程中,根据用户选择的运算来调用不同的函数完成计算,并给出计算结果。知识准备Part.03函数概述01函数的定义02函数调用03知识准备函数的嵌套定义04函数是组织好的、实现单一功能或相关联功能,并可以重复使用的代码,这段代码已经被提前编写好了,并且为其起一个“好听”的名字。在后续编写程序过程中,如果需要同样的功能,直接通过起好的名字就可以调用这段代码。函数概述Python中的函数可以分为内置函数、标准库函数、第三方库函数和用户自定义函数等几种类型。内置函数:Python语言自带的函数,可以直接在任何Python程序中使用,无需导入任何库。标准库函数:Python的标准库包含了许多模块,这些模块提供了大量的函数来处理各种常见任务。要使用这些函数,需要首先导入相应的模块。例如,math模块提供了各种数学函数,如sqrt()、sin()、cos()等,OS模块则提供了与操作系统交互的函数,如exists()、listdir()等。函数概述第三方库函数:除了标准库之外,还有许多第三方库可供Python程序员使用。这些库通常需要通过包管理器pip进行安装,然后才能在程序中使用。例如numpy库提供了大量的数值计算函数,pandas库提供了数据处理和分析的函数,matplotlib库提供了绘图函数等。用户自定义函数:除了使用内置函数和库函数之外,Python还允许程序员根据特定的需求定义自己的函数。函数概述函数的定义,也就是创建一个函数,可以理解为创建一个具有某些用途的工具。Python中使用关键字def来定义函数,其语法格式如下:函数的定义标记函数的开始函数的唯一标识传入函数中的数据可以包含一个或多个参数也可以为空标记函数体的开始实现函数功能的具体代码返回函数的处理结果给调用方标志着函数的结束,若函数没有返回值,可以省略注意,在创建函数时,即使函数不需要参数,也必须保留一对空的“()”,否则Python解释器将提示“invaildsyntax”错误。另外,如果想定义一个没有任何功能的空函数,可以使用pass语句作为占位符。函数的定义#定义个空函数,没有实际意义defpass_fun_():pass函数在定义完成后不会立刻执行,直到被程序调用时才会执行。函数调用语法格式如下:函数调用例如:area()#无参函数area_modify(9,7)#有参函数函数名([参数列表])程序在调用函数的位置暂停执行,将数据传递给函数参数;执行函数体中的语句;程序回到暂停处继续执行。函数调用过程area()area_modify(9,7)例如调用过程area_modify(9,7)defarea_modify(a,b):

s=a*b

print(s)①②③④注意:函数调用函数的使用必须遵循先定义,后调用原则没有事先定义函数,而直接引用函数名,就相当于在引用一个不存在的变量名函数定义阶段:只检测函数体的语法,不执行函数体代码函数调用阶段执行代码说明:函数调用在函数定义阶段括号内没有参数注意:定义无参,意味着调用时也无需传入参数应用:如果函数体的代码逻辑不需要依赖外部传入的值,必须定义无参函数(1)无参函数说明:函数调用在函数定义阶段括号内有参数,称为有参函数注意:定义时有参,意味着调用时也必须传入参数应用:如果函数体代码逻辑需要依赖外部传入的值,必须定义成有参函数(2)有参函数函数在定义时可以在其内部嵌套定义另外一个函数,嵌套的函数称为外层函数,被嵌套的函数称为内层函数。函数的嵌套定义defouter():print("这是外层函数")

definner():print("这是内层函数")outer()例如:这是外层函数运行结果如下:由运行结果可知,程序没有执行内层函数的打印语句,只输出了外层函数的打印语句。这说明内层函数没有被调用。函数的嵌套定义defouter():

print("这是外层函数")

definner():

print("这是内层函数")

inner()#在outer函数中调用inner()函数outer()将上面的代码修改如下:这是外层函数这是内层函数运行结果如下:任务实现Part.04分析代码01编写代码02任务实现1.分析代码任务实现根据任务的功能需求,自定义4个函数add()、subtract()、multiply()、divide(),分别实现加法、减法、乘法和除法功能,每个函数定义两个参数,用于接收参与运算的2个数字,并将运算结果作为函数的返回值。在执行除法运算时,需要考虑除数是否为0的情况,以免出现程序异常。1.分析代码任务实现使用while循环语句保障程序持续运行,直至用户选择退出系统为止。在while循环体中包含三个部分:1)使用print()函数输出简易计算器的操作界面,并使用input()函数接收用户的输入。2)根据用户的功能选择和计算的数字,调用对应的函数进行计算,并输出计算结果。3)通过break语句结束程序运行。2.

编写代码(1)任务实现defdivide(x,y):"""除法运算"""

ify!=0:returnx/yelse:return"除数不能为零"defadd(x,y):"""加法运算"""

returnx+ydefsubtract(x,y):"""减法运算"""

returnx-ydefmultiply(x,y):"""乘法运算"""

returnx*y2.

编写代码(2)任务实现whileTrue:

print("------------简易计算器-------------\n选择一个运算:")

print("1.加法")

print("2.减法")

print("3.乘法")

print("4.除法")

print("5.退出")

choice=input("输入选项编号:")2.

编写代码(3)任务实现ifchoicein('1','2','3','4'):num1=float(input("输入第一个数:"))

num2=float(input("输入第二个数:"))

ifchoice=='1':print(f"结果:{add(num1,num2)}")elifchoice=='2':print(f"结果:{subtract(num1,num2)}")elifchoice=='3':print(f"结果:{multiply(num1,num2)}")elifchoice=='4':print(f"结果:{divide(num1,num2)}")elifchoice=='5':print("退出程序.")

breakelse:print("无效的选项,请重新输入。")任务总结Part.05通过本任务的学习,掌握了函数的作用、类型,以及函数的定义、调用方法。在定义和调用函数时,需要注意以下几点:函数命名:函数名应该遵循Python的标识符命名规则,一般使用小写字母和下划线的组合,应该能够简单、清晰地表达函数的功能。嵌套定义:定义嵌套函数时,在嵌套的外层函数体外,无法调用嵌套的内层函数。参数匹配:在调用函数时,必须提供正确数量和类型的参数。如果参数数量或类型不匹配,Python会报错。返回值:函数可以通过return语句返回一个值。如果没有return语句,或者return后面没有跟任何值,那么函数会返回None。 嵌套定义:定义嵌套函数时,在嵌套的外层函数体外,无法调用嵌套的内层函数。文档字符串:可以为每个函数添加文档字符串,以描述函数的功能、参数和返回值。有助于其他人理解代码和后期代码的维护。 任务提出01任务分析02知识准备03任务2汽车进销存管理系统设计任务实现04任务总结05任务1打印树形图案任务提出Part.01提出任务运用PyCharm开发工具编写Python程序,设计一个简单的进销存管理系统,用于实现汽车4S店的进销存业务管理,需要维护的汽车信息包括汽车品牌、颜色、价格、数量等。系统具有添加、删除、修改、查询汽车信息以及退出功能,任务分析Part.02分析任务1.创建Python程序car.py。2.定义一个列表用于存放所有的汽车信息。3.设计系统操作界面,接收用户的输入操作。4.根据功能模块设计要求,为每项功能编写函数,在函数主体中设计业务处理逻辑。5.根据用户的功能选择,调用并传递参数给不同的模块函数,实现业务功能。6.运行测试程序,逐项测试各项功能是否正常。该任务主要实现的是汽车信息添加、修改、删除、查询等功能,可以根据功能设计不同的功能模块函数,通过调用模块函数并传递相应参数实现业务处理知识准备Part.03位置参数传递01关键字参数传递02默认值参数传递03知识准备可变参数传递04混合参数传递05函数的返回值06变量作用域07通常将定义函数时设置的参数称为形式参数(简称为形参),将调用函数时传入的参数称为实际参数(简称为实参)。函数的参数传递是指将实际参数传递给形式参数的过程。函数参数传递形参实参函数在被调用时会将实参按照相应的位置依次传递给形参,也就是说将第一个实参传递给第一个形参,将第二个实参传递给第二个形参,以此类推。位置参数传递注意:位置参数传递位置参数:按位置指定,实参和形参数量必须⼀致函数调⽤时括号中只写各个实参,这时形参的值与实参按照顺序⼀⼀对应在调⽤函数,指定的实际参数的数量,必须和形式参数的数量⼀致(传多传少都不行)关键字参数的传递是通过“形参=实参”的格式将实参与形参相关联,将实参按照相应的关键字传递给形参。关键字参数传递传递方式的限定无论实参采用位置参数的方式传递,还是关键字参数的方式传递,每个形参都是有名称的,怎么区分用哪种方式传递呢?符

号“/”传递方式的限定Python在3.8版本中新增了仅限位置形参的语法,使用符号“/”来限定部分形参只接收位置传递方式的实参。deffunc(a,b,/,c):print(a,b,c)

表示在/形参前的参数只能通过位置参数传递。Python允许为参数设置默认值,即在定义函数时,直接给形式参数指定一个默认值。默认参数传递默认参数传递不传参默认参数传递传参调用函数函数调用形式不传参,调用函数就直接使用默认值。传参,在调用时可以重新给予默认值的参数

通过位置传参方式给值

通过关键词传参方式给值1.参数能不能全部定义为默认参数?函数调用形式2.默认参数位置会不会受约束呢?参数全部定义为默认参数默认参数位置变化注意:默认参数传递函数在定义时可以指定各参数的默认值;默认参数和其它参数同时存在,默认参数必须位于必选参数的后面。如果函数在定义时无法确定需要接收多少个数据,那么可以在定义函数时为形参添加“*”或“**”:可变参数的传递“*”:接收以元组形式打包的多个值“**”:接收以字典形式打包的多个值1.打包“*”定

义deff1(*args):print(args)#输出参数的值调

用f1()#f1(‘a’,‘e’,‘u’,‘i’,‘o’)结

果()(‘a’,‘e’,‘u’,‘i’,‘o’)可变参数传递2.打包“**”定

义deff2(**kwargs):print(kwargs)#输出参数的值调

用f2(name=‘john’,height=180,weight=70)f2()结

果{'name':'john','height':180,'weight':70}{}可变参数传递可变参数传递函数中添加“*”或“**”的形参可以是符合命名规范的任意名称,建议使用*args和**kwargs。若函数没有接收到任何数据,参数*args和**kwargs为空,即为空元组或空字典。

*的作用:在函数定义中,收集所有位置参数到一个新的元组,并将整个元组赋值给变量args。**

的作用:在函数定义中,收集关键字参数到一个新的字典,并将整个字典赋值给变量kwargs。可变参数传递1.实参是元组,可以使用“*”拆分成多个值,按位置参数传给形参。2.实参是字典,可以使用“**”拆分成多个键值对,按关键字参数传给形参。函数调用时——实参1.解包“*”定

义deffun1(c1,c2,c3,c4,c5):print(c1,c2,c3,c4,c5)调

用chs=(‘a’,‘e’,‘u’,‘i’,‘o’)fun1(*chs)结

果‘a’,‘e’,‘u’,‘i’,‘o’可变参数传递2.解包“**”定

义deffun2(name,height,weight):print(name,height,weight)调

用boy={'name':'john','height':180,'weight':70}

fun2(**boy)结

果john18070可变参数传递1.先按照参数的位置传递。2.再按照参数的关键字传递。3.最后按打包的形式传递。混合参数传递注意:定义函数时参数有默认值,则带有默认值的参数必须跟在必选参数的后面。混合参数传递func(1,2)#按位置传递方式将1、2赋值给a、b,c采用默认值0func(1,2,c=3)#按位置传递方式将1、2赋值给a、b,将3赋值给c#a=1b=2c=3args=()kw={}func(1,2,3,‘x',‘y')#a=1b=2c=3args=(‘x',‘y')kw={}func(1,2,3,‘x',‘y',s=100)#a=1b=2c=3args=('a','b')kw={‘s':100}函数返回值函数中的return语句会在函数结束时将数据返回给程序,同时让程序回到函数被调用的位置继续执行。defadd(num1,num2):res=num1+num2returnres#returnnum1,num2

如果函数使用return语句返回了多个值,那么这些值将被保存到元组中。一般格式为return[返回值]函数返回值如果函数没有返回值,即函数执行完毕后,不需要给调用处提供数据,那么return可以省略不写。函数的返回值,如果是一个,直接返回原类型。函数的返回值如果是多个,返回的值为元组。函数返回值局部变量局部变量和全局变量定义:局部变量,就是在函数内部定义的变量约束:其作用范围是这个函数内部,即只能在这个函数中使用,在函数的外部是不能使用的。全局变量局部变量和全局变量定义:在函数外边定义的变量叫做全局变量。范围:全局变量能够在所有的函数中进行访问。局部变量和全局变量访问修改局部变量和全局变量1.局部变量和全局变量定义的位置不同,作用域不同。2.全局变量在函数内部只能被访问,而无法直接修改。1.global关键字global和nonlocal关键字使用global关键字可以将局部变量声明为全局变量,其使用方法如下:global变量名like1=10#like1在这里是一个全局变量deffunc():

globallike1#like1声明时,不能直接赋值。like1+=20#函数内部修改变量like1print('函数内部修改后:',like1)2.nonlocal关键字global和nonlocal关键字使用nonlocal关键字可以在局部作用域中修改嵌套作用域中定义的变量,其使用方法如下:nonlocal变量名deftest():number=10deftest_in():

nonlocalnumbernumber=20test_in()print(number)test()任务实现Part.04分析代码01编写代码02任务实现1.分析代码任务实现(1)定义列表car_info用于保存所有的汽车信息,列表的元素为字典,字典中设置brand、color、price、num四个键分别对应汽车的品牌、颜色、价格、数量信息。(2)定义main_menu()函数,用于输出系统的功能界面。(3)定义input_car_info()、add_car_info()、del_car_info(car)、modify_car_info()、show_car_info()功能函数用于实现录入汽车信息、添加汽车信息入库、修改已有汽车信息、删除指定汽车信息、查询全部汽车信息等功能。(4)在main()函数中,调用main_menu()函数,并接收用户的功能选择,调用相应的功能函数。定义列表输出用户操作界面任务实现2.编写代码启动PyCharm,在项目文件夹Chapter07中新建Python文件car.py录入汽车信息函数添加汽车信息函数任务实现2.编写代码删除汽车信息函数修改汽车信息函数任务实现2.编写代码显示所有的汽车信息函数任务实现2.编写代码主函数任务实现2.编写代码任务总结Part.05通过本任务的学习,系统掌握Python中参数的传递方法、不同类型返回值以及变量的作用域的灵活应用。在使用是需要注意以下几点。参数命名:参数名应该尽量清晰、简洁,并准确描述参数的作用;避免使用Python中的保留关键字作为参数名;遵循Python的命名惯例,使用小写字母和下划线来分隔单词。参数类型:Python是一种动态类型语言,所以函数的参数不需要预先声明类型。位置参数与关键字参数:在调用函数时,可以使用位置参数(按照参数在函数定义中的顺序传递)或关键字参数(通过参数名明确指定)。使用关键字参数可以提高代码的可读性,并允许在调用函数时改变参数的顺序。默认参数:可以为函数参数提供默认值,在调用函数时可以省略这些参数。如果带有默认值的参数与必选参数同时存在,则带有默认值的参数必须位于必选参数的后面。可变参数与关键字参数:使用*args可以接收任意数量的位置参数,它们被打包为一个元组。使用**kwargs可以接收任意数量的关键字参数,它们被打包为一个字典。当同时使用*args和**kwargs时,*args必须放在**kwargs前面。参数验证:建议在函数内部对传入的参数进行验证,确保参数的数据类型、取值范围等是符合预期的,对于不符合预期的参数值,可以提前抛出异常。变量重名:为了避免变量名称冲突,在同一作用域中不能有重名,但是不同的作用域内可以重名。如果在函数内部定义了一个与全局变量同名的局部变量,那么在函数内部访问该变量时,将优先使用局部变量,而不是全局变量。变量作用域:在函数内部,如果要修改全局变量,需要使用global关键字进行声明。否则,Python会将其视为一个新的局部变量。在嵌套函数(内部函数)中,可以直接访问外部函数(外部作用域)的局部变量,但是,外部函数不能直接访问嵌套函数的局部变量。任务提出01任务分析02知识准备03任务3汉诺塔游戏设计任务实现04任务总结05任务1打印树形图案任务提出Part.01提出任务汉诺塔游戏是一个经典递归问题。假设有n个圆盘,编号从1到n,初始时按照从大到小的顺序依次放置在A柱上,较大的圆盘在下,较小的圆盘在上。目标是将这些圆盘移动到C柱上,移动过程中可以借助B柱,但是在移动过程中大圆盘不能放到小圆盘上、每次只能移动一个圆盘,如图所示。运用PyCharm开发工具编写Python程序,完成圆盘从A柱到C柱的移动,并显示移动过程。任务分析Part.02分析任务1.创建Python程序hanoi.py。2.创建递归函数。在递归函数中,记录每一次移动的步骤。3.使用input()函数接受需要移动的盘子数量。4.调用递归函数,实现盘子的移动,输出盘子移动的过程。5.运行测试,检验是否正确完成移动。本任务主要完成的是将A柱上所有的圆盘按照要求移动到C柱上,要解决这个问题,可以使用递归函数。具体的任务实施分析如下:知识准备Part.03匿名函数定义01匿名函数的应用02知识准备递归函数03递归函数经典应用04匿名函数是一类无须定义标识符的函数,它与普通函数一样可以在任何地方使用,python中使用lambda关键字定义匿名函数。语法格式如下:匿名函数定义lambda<形式参数列表>:<表达式>匿名函数与普通函数的主要区别如下:匿名函数定义普通函数定义时有名称函数体中包含有多条语句实现比较复杂的功能能被其他程序使用匿名函数匿名函数没有名称函数体只能是一个表达式实现的功能比较简单不能被其他程序使用定义好的匿名函数不能直接使用,最好使用一个变量保存它,以便后期可以随时使用这个函数。匿名函数定义示例#定义匿名函数,并将它返回的函数对象赋值给变量temptemp=lambdax:x**3temp(10)匿名函数跟函数一起使用,根据字符串长度进行排序。匿名函数的应用示例lst=['天宫一号','神州十三号','嫦娥号','北斗导航系统']print(sorted(lst,key=lambdas:len(s)))函数在定义时可以直接或间接地调用其他函数。若函数内部调用了自身,则这个函数被称为递归函数。递归函数递归函数在定义时需要满足两个基本条件:一个是递归公式,另一个是边界条件。其中:递归函数递归公式:是求解原问题或相似的子

温馨提示

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

最新文档

评论

0/150

提交评论