项目5 函数的高级应用(课件)-《程序设计基础(Python)》同步教学(电子工业出版社)

2024-08-02
| 34页
| 53人阅读
| 4人下载
普通

内容正文:

筐鱼梧领凤峡匪跑脚凡辅乒踪勿久褂舟婴袭剪肚爹伦甄啸镣娟附卉态再骂广东农工商职业技术学院PPT模板-精美原创毕业论文答辩广东农工商职业技术学院PPT模板-精美原创毕业论文答辩 项目5 函数的高级应用 目录 | CONTENT 1 项目介绍 2 项目目标 3 项目准备 4 项目实施 项目介绍 项目背景 本项目提供了Python函数相关的一些高级概念和使用方法,能够帮助大家完成更复杂的任务。 项目介绍 项目规划 01 熟悉变量作用域、函数嵌套定义、lambda函数、闭包、装饰器等概念和设计方法 02 熟悉递归等程序设计方法 03 能综合运用Python相关知识点解决典型程序设计问题 目录 | CONTENT 1 项目介绍 2 项目目标 3 项目准备 4 项目实施 项目目标 知识目标 1 掌握Python函数相关的高级概念 2 熟悉递归的设计思想 3 熟悉经典问题的编程方法 项目目标 能力目标 1 了解Python函数相关高级方法的使用 2 了解使用递归解决问题的方法 3 掌握常用程序设计思想 目录 | CONTENT 1 项目介绍 2 项目目标 3 项目准备 4 项目实施 项目准备 1. 变量的作用域 变量的作用域是指一个变量能够作用的范围,也就是在多大范围内能够被解释器识别。根据变量的作用域,变量可分为全局变量和局部变量。 声明在函数外部的变量,被称为全局变量,作用范围是所在程序文件内从定义开始至程序结束,包括变量定义后所调用的函数内部。 项目准备 2. 函数的嵌套定义和nonlocal关键字 Python函数的定义可以嵌套。并可以通过nonlocal关键字,可以使内层的函数值接使用外层函数中定义的变量。 def outer(): x=10 # x为外部函数的局部变量 def inner(): # 定义内部函数 x=20 # x为内部函数局部变量 print('inner函数中的x值为:', x) inner() # 调用inner函数 print('outer函数中的x值为:', x) outer() # 调用outer函数 def outer(): x=10 # x为外部函数的局部变量 def inner(): # 定义内部函数 nonlocal x # nonlocal声明 x=20 # 将x赋为20 print('inner函数中的x值为:',x) inner() # 调用inner函数 print('outer函数中的x值为:',x) outer() #调用outer函数 项目准备 3. lambda函数 lambda函数是一个匿名函数,有时也被称为lambda表达式,比def格式的函数定义简单很多。lambda函数可以接收任意多个参数,但只返回一个表达式的值。lambda中不能包含多个表达式。lambda定义形式如下: lambda [参数1[, 参数2, ..., 参数n]]: 表达式 项目准备 4. 闭包 如果内层函数使用了外层函数中定义的局部变量,并且外层函数的返回值是内层函数的引用,就构成了闭包。定义在外层函数中但由内层函数使用的变量被称为自由变量。 def outer(x): # 定义函数outer y=10 # 定义局部变量y并赋为10 def inner(z): # 在outer函数中定义嵌套函数inner nonlocal x,y # nonlocal声明 return x+y+z # 返回x+y+z的结果 return inner # 返回嵌套函数inner的引用 f=outer(5) # 将返回的inner函数赋给f print('f(20)的值为:', f(20)) # print()函数输出的值为35 项目准备 5. 装饰器 装饰器实际上就是闭包。利用装饰器,可以在不修改已有函数的情况下向已有函数中注入代码,使其具备新的功能。 在装饰器外层函数的形参列表中只有一个形参func,接收要装饰的函数,在内层函数中直接调用func即表示执行所装饰的函数中的代码。 将装饰器内层函数的形参列表写为“*args, **kwargs”,表示要装饰的函数可以具有任意形式的形参列表;对应地,调用要装饰的函数时也要将实参列表写为“*args, **kwargs”。在要装饰的函数前面写上“@装饰器名”,即可将装饰器中的代码注入到该函数中。 项目准备 6. 递归 函数内部可以调用其他函数。如果一个函数在内部直接或间接地调用自己本身,这是一种递归的方法。递归是一种非常实用的程序设计技术。许多问题具有递归的特性,在某些情况下,用其他方法很难解决的问题,利用递归可以轻松解决。 目录 | CONTENT 1 项目介绍 2 项目目标 3 项目准备 4 项目实施 项目实施 任务5.1 将输入升序输出 在Python中,如果想实现可重复使用,并且目的特定的功能,可以通过函数来实现。函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。函数能提高应用的模块性,和代码的重复利用率。Python中既包括内置函数,也可以自己创建函数,这被叫做用户自定义函数。 项目实施 任务5.1 将输入升序输出 建立 “将输入升序输出.py”文件,用于编写Python实验程序 编写任务代码。 # 定义一个函数,其内部实现为通过sorted函数对输入参数进行升序排序,并打印 def sortAndPrint(x, y, z): print(sorted((x, y, z)))   # 编写程序的主入口,调用sortAndPrint函数实现排序及打印功能 if __name__ == '__main__': sortAndPrint(5, 10, 3) 项目实施 任务5.1 将输入升序输出 执行程序 ①鼠标右键单击右侧编辑窗口,在菜单中选择“Run ‘python主程序所在文件名’”一项执行编写好的Python程序,本次实验文件名为“将输入升序输出” ②在IDE下方控制台查看输出结果 项目实施 任务5.2 斐波那契数列 斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用。 项目实施 任务5.2 斐波那契数列 建立 “斐波那契数列.py”文件,用于编写Python实验程序 编写任务代码。 # 定义一个函数,该函数接收一个参数n,用于计算斐波那契数列项。当n小于等于0时,返 回的数列项值为0 def Fibonacci_Recursion_tool(n): if n <= 0: return 0 elif n == 1: # 实现当n等于1时,返回的数列项值为1 return 1 else: # 实现当n非0非1时,返回的数列项值为f(n-1) + f(n-2) return Fibonacci_Recursion_tool(n - 1) + Fibonacci_Recursion_tool(n - 2)   # 定义一个函数,该函数接收一个参数n,用于计算1-n之间的斐波那契数列。该函数的实现 为,遍历1-n之间的数,并依次调用Fibonacci_Recursion_tool函数计算数列项,并将计 算的结果保存至一个列表中 def Fibonacci_Recursion(n): result_list = [] for i in range(1, n + 1): result_list.append(Fibonacci_Recursion_tool(i)) return result_list   # 编写程序入口,调用Fibonacci_Recursion函数,并传入100作为实参,计算10个斐波那契数列项,并打印 if __name__ == '__main__': result = Fibonacci_Recursion(10) print(result) 项目实施 任务5.2 斐波那契数列 执行程序 ①鼠标右键单击右侧编辑窗口,在菜单中选择“Run ‘python主程序所在文件名’”一项执行编写好的Python程序,本次实验文件名为“将输入升序输出” ②在IDE下方控制台查看输出结果 项目实施 任务5.3 阶乘之和评价与考核 一个正整数的阶乘(factorial)是所有小于及等于该数的正整数的积,并且0的阶乘为1。自然数n的阶乘写作n!。1808年,基斯顿·卡曼引进这个表示法。亦即n!=1×2×3×...×(n-1)×n。阶乘亦可以递归方式定义:0!=1,n!=(n-1)!×n。 本任务求解1到20的正整数的各自阶乘并求和。 项目实施 任务5.3 阶乘之和评价与考核 建立 “阶乘之和.py”文件,用于编写Python实验程序 编写任务代码。 # 引入reduce函数用于之后的聚合计算 from functools import reduce # 定义函数factorialA,该函数接收一个参数n,内部通过递归的方式计算n的阶乘并返回 def factorialA(n): if n == 1: return 1 else: return n * factorialA(n - 1) # 定义函数factorialB,该函数接收一个参数n,内部通过lambda表达式以及聚合函数计算n 的阶乘并返回 def factorialB(n): return reduce(lambda x,y: x*y, range(1, n+1)) # 编写程序主入口,计算1-20的阶乘之和,并打印 if __name__ == '__main__': sum = 0; for i in range(1, 21): sum += factorialA(i) print(sum) 项目实施 任务5.3 阶乘之和评价与考核 执行程序 ①鼠标右键单击右侧编辑窗口,在菜单中选择“Run ‘python主程序所在文件名’”一项执行编写好的Python程序,本次实验文件名为“阶乘之和” ②在IDE下方控制台查看输出结果 项目实施 任务5.4 计算圆的面积 圆的面积公式我们都比较熟悉: ,其中,π为圆周率,是一个常数;r为圆的半径。在实际的程序中,除了要通过程序正确表达计算公式,还要对公式中各输入中的正确性进行判断,例如:r是圆的半径,应该是一个整数或者浮点数,如果用户输入了一个字符串,则是非法字符,无法进行计算,需要用户重新输入。 项目实施 任务5.4 计算圆的面积 建立 “计算圆的面积.py”文件,用于编写Python实验程序 编写任务代码。 import math # 引入math包,用于获取pi的值 # 定义一个函数用于校验被修饰函数的参数类型,其接收一个func参数,即为被修饰的函数 def validate(func): def validate(*arg, **kw): if type(eval(str(arg[0]))) == int or type(eval(str(arg[0]))) == float: arg = (float(arg[0]), ) return func(*arg, **kw) else: print('请传入一个数字') return validate # 定义被修饰的函数,该函数接收一个参数r,表示圆的半径,其功能为计算圆的面积。在函 数名上方添加@validate使用修饰器校验参数类型 @validate def area(r): return r * r * math.pi if __name__ == '__main__': print(area(5.4)) 项目实施 任务5.4 计算圆的面积 执行程序 ①鼠标右键单击右侧编辑窗口,在菜单中选择“Run ‘python主程序所在文件名’”一项执行编写好的Python程序,本次实验文件名为“计算圆的面积” ②在IDE下方控制台查看输出结果 课后练习与技能训练 一、填空题 练习 按照作用域的不同,Python中的变量可以分为局部变量和 。 在一个函数中使用 关键字,可以声明在该函数中使用的是全局变量、而非局部变量。 通过 关键字,可以使内层的函数直接使用外层函数中定义的变量。 函数是指在一个函数内部通过调用自己来完成一个问题的求解。 函数也称为匿名函数,是一种不使用def定义函数的形式,其作用是能快速定义一个简短的函数。 lambda函数的函数体只是一个 ,所以lambda函数通常只能实现比较简单的功能。 如果内层函数使用了外层函数中定义的局部变量,并且外层函数的返回值是内层函数的引用,就构成了 。 课后练习与技能训练 二、选择题 练习 1.下列说法中错误的是() 在一个函数中定义的变量就是局部变量 局部变量的作用域是从定义位置到函数结束位置 在所有函数外定义的变量就是全局变量 全局变量的作用域是从定义位置到程序结束位置 课后练习与技能训练 二、选择题 练习 2.下列关于装饰器的说法错误的是() A.利用装饰器,可以在不修改已有函数的情况下向已有函数中注入代码,使其具备新的功能 B.一个装饰器可以为多个函数注入代码,一个函数也可以注入多个装饰器的代码 C.一个装饰器可以为多个函数注入代码,而一个函数只能注入一个装饰器的代码 D.装饰器实际上就是一种闭包 课后练习与技能训练 三、简答题 练习 1.写出下面程序的输出结果。 def outer(): x=100 global y y=200 def inner(): nonlocal x x=1000 y=2000 print('inner函数中的x,y值为:',x,y) inner() print('outer函数中的x,y值为:',x,y) x=10 y=20 outer() print("执行outer,inner函数之后x,y值为:",x,y) 课后练习与技能训练 三、简答题 练习 2.写出下面闭包程序的输出结果。 def f(x): y = 100 def inner(z): return x * y + z return inner a10 = f(10) a20 = f(20) print(a10(29)) print(a20(29)) 课后练习与技能训练 三、简答题 练习 3.已知高阶函数的程序如下: 请将其中的area函数和perimeter函数改写为lambda函数。请将改写后的程序填写完整。 def FunAdd(f,x): return f(x) def area(r): return 3.14*r*r def perimeter(r): return 2*3.14*r print(FunAdd(area,5)) print(FunAdd(perimeter,5)) def FunAdd(f,x): return f(x) print(FunAdd( ,5)) print(FunAdd( ,5)) 课后练习与技能训练 三、简答题 练习 4.斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”。斐波那契数列前两项的值都为1,后面每一项的值等于其前两项的和,即:F(1)=F(2)=1,F(n)=F(n-1)+F(n-2)(n>2)。请编写递归函数fib(n),实现求斐波那契数列第n项的值。 $$

资源预览图

项目5  函数的高级应用(课件)-《程序设计基础(Python)》同步教学(电子工业出版社)
1
项目5  函数的高级应用(课件)-《程序设计基础(Python)》同步教学(电子工业出版社)
2
项目5  函数的高级应用(课件)-《程序设计基础(Python)》同步教学(电子工业出版社)
3
项目5  函数的高级应用(课件)-《程序设计基础(Python)》同步教学(电子工业出版社)
4
项目5  函数的高级应用(课件)-《程序设计基础(Python)》同步教学(电子工业出版社)
5
项目5  函数的高级应用(课件)-《程序设计基础(Python)》同步教学(电子工业出版社)
6
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。