Python程序设计基础 教案8 函数自定义和高级用法_第1页
Python程序设计基础 教案8 函数自定义和高级用法_第2页
Python程序设计基础 教案8 函数自定义和高级用法_第3页
Python程序设计基础 教案8 函数自定义和高级用法_第4页
Python程序设计基础 教案8 函数自定义和高级用法_第5页
已阅读5页,还剩6页未读, 继续免费阅读

下载本文档

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

文档简介

课程单元教学设计课程名称:程序设计基础课程性质:☑必修课□选修课学时学分:3学分56学时开课学期:2023学年第一学期教师姓名:陈建勇教师职称:副教授授课班级:人工智能23-1和23-2所属专业(教研室):人工智能技术应用开课部门:信息技术学院温州科技职业学院教学督导处(诊改办)制二○二三年九月

《程序设计基础》课程单元教学设计本单元标题:函数自定义和高级用法序号8授课班级人工智能23-2上课时间15周12月4日第1-2节15周12月6日第3-4节上课地点笃1-609笃1-220人工智能23-115周12月5日第5-8节笃1-412学情分析在上复杂数据类型-字典这一节内容时,学生实操过一个词频统计的案例,针对英文和中文的词频统计,为了避免代码冗余,我们当时简要的介绍了如何封装一段代码,本质上就是函数的自定义,通过封装,学生也发现这样的写代码效率更高.本次课,我们将系统的介绍有关于函数的自定义以及函数高级用法,明白函数的使用价值.教学目标能力(技能)目标知识目标情感与价值目标学会函数的自定义.掌握函数的高级用法.掌握函数自定义的语法结构.理解实参和形参.理解值传递和引用传递.通过函数自定义理解封装的好处.2.宣传工匠精神。重点难点及解决方法教学重点教学难点解决方法掌握函数自定义的语法结构.掌握函数中传递参数的三种类型.1.理解值传递和引用传递的区别.2.学会利用函数自定义解决实际问题.1.通过多媒体展示、动画演示及播放程序设计方面的视频.2.结合教师的讲解,来突破本次课程的重点和难点。教学资源及教学用具1.参考书:崔晓军,肖红宇,python程序设计基础,电子工业出版社,2023年1第1版。2.网络教学资源:传智播客网站:/3.教学用具:多媒体、笔记本(或台式机)电脑课后教学反思

教学过程设计步骤与时间主要任务教师活动学生活动设计意图与教学方法步骤一(2分钟)课堂组织考勤课堂准备严肃课堂纪律步骤二(8分钟)复习对学生汇报进行点评课前三分钟汇报提升学生的表达能力步骤三(30分钟)函数自定义和调用讲解+实操演示边学边练课程思政;步骤四(20分钟)参数值传递和引用传递讲解+实操演示边学边练案例任务驱动步骤五(20分钟)学生实践练习讲解+实操演示边学边练案例任务驱动步骤六(10分钟)传递参数的三种类型任务说明边学边练情境教学步骤七(30分钟)函数模块的调用讲解+实操演示边学边练案例任务驱动步骤八(30分钟)结合循环模拟银行存取款操作讲解+实操演示边学边练案例任务驱动步骤九(10分钟)小结并作业布置总结;作业布置课堂小结;学生记录作业梳理知识点脉络;作业练习巩固授课详细内容[步骤一]1、课堂组织利用超星学习通平台,进行考勤结果通报,做好事假迟到同学的记录。开启KK录像机,进行课程录屏,作为课程教学资源,上传超新学习通上,供学生课后回看再学习。[步骤二]2、复习回顾学生活动:利用课前三分钟汇报,了解学生对上次课的集合和嵌套掌握情况,以便查漏补缺,了解学生对这块知识的理解和实操情况。[步骤三]函数自定义和调用设计意图:从生活中的案例出发,让学生体会有些重复性的工作,其实可以有专门的人或物来进行处理.教师活动:生活中有一些事情具有重复性:为了吃面条需要先制作面条;为了家里干净,需要经常进行卫生打扫等,能否将这些重复性的活动由专人或专物来负责,我只需要用它即可,从而产生卖面条的店,打扫卫生的机器人。有了他们的帮助,可以带来很多好处,如节省时间成本。回到我们的编程活动中,有时候我们也会经常遇到重复性的代码操作,这个时间有没有什么办法可以提高我们的编程效率呢?就是我们今天要介绍的函数自定义的相关内容,也叫做封装。教师讲解:python已经给我们提供了很多的函数,这些函数把它称为系统函数(内置函数)。这些函数是官方已经给我们自定义好的一些基本常见操作。下面以之前常见的len为例,说明封装打来的好处。教师演示:前面学习了len()函数,通过它可以直接获得一个字符串的长度。s="helloworld"length=len(s)print(length)#输出:11s="helloworld"length=0forcharins:length+=1print(length)#输出:11如果不用封装好的len函数,则要想统计helloworld,我们需要写如下代码:从而可知,对于同一个问题,一个只需写一行代码,一个要写3行代码,按照时间就是金钱角度来看,函数自定义不仅代码量少,而且能提升产生结果的效率。教师活动:首先来介绍一下函数自定义的基本语法结构。def函数名称(参数):函数执行语句return[expression]函数定义的几个规则如下:(1)函数代码块以def关键词开头,后接函数标识符名称和圆括号()。(2)任何传入参数和自定义变量必须放在圆括号中间。(3)函数内容以冒号起始,并且缩进。(4)return[表达式]结束函数,选择性地返回一个值给调用方,不带表达式的return相当于返回None。教师活动:下面举一个具体例子:求两个数的最大值来演示函数的自定义。defcalMax(a,b):'''函数的文档注释,求两个数的最大值'''ifa>b:print("最大值为",a)returnaprint("最大值为",b)returnb学生活动:学生模仿并实操该自定义过程。等学生实操完之后,教师提出问题:我们定义了一个东西的目的是为了去使用它,那如何调用呢?教师活动:调用自定义函数的语法结构函数名称(参数)针对刚才自定义的函数,调用如下defcalMax(a,b):'''函数的文档注释,求两个数的最大值'''ifa>b:print("最大值为",a)returnaprint("最大值为",b)returnbnum1=int(input("请输入一个数字:"))num2=int(input("请再输入一个数字:"))calMax(num1,num2)学生活动:学生模仿实操,掌握函数的调用。课内学生拓展训练:模仿刚才的求最大值过程,教师布置任务:写一个计算长方形的面积自定义函数,函数名自定。要求学生上台来演示。defrectangle_area(length,width):returnlength*widthlength=float(input("请输入长方形的长:"))width=float(input("请输入长方形的宽:"))area=rectangle_area(length,width)print("长方形的面积为:",area)教师活动:下面对其中的return语句做进一步的介绍。return语句可以从Python函数中返回一个值,每个函数都要有一个返回值。如果没有用return语句返回值,那么将得到一个None对象的结果,而None表示没有任何值。在函数调用时可以将调用语句看作一个具体的值,将该值赋给一个变量。同时,return语句表示函数的结束,虽然在Python语言中可以在return语句后再添加其他执行代码,但return语句后同一范围内的执行代码都不会被执行。【示例4.4】首先定义一个获取两个数中的最大数的函数,然后通过该函数分别获取3个数、4个数的最大数。defcalMax(a,b):

'''获取两个数的最大数'''

ifa>b:

returna

returnb

print("return后的语句")#在return语句后的代码都不会执行

#调用

num=calMax(23,45)

print("calMax(23,45)结果为:",num)

print("calMax(56,11)结果为:",calMax(56,11))

print("6,9,13的最大值为",calMax(6,calMax(9,13)))

print("6,15,13,12的最大值为",calMax(calMax(6,15),calMax(13,12)))课程思政:宣传工匠精神。[步骤四]参数值传递和引用传递教师活动:传递参数时,Python不允许开发者指定使用传值还是传引用。Python参数传递采用的是“传对象引用”的方式。实际上,这种方式相当于传值和传引用的一种综合。如果函数收到的是一个可变对象(如字典或者列表)的引用,就能修改对象的原始值—相当于通过“传引用”来传递对象。如果函数收到的是一个不可变对象(如数字、字符串或者元组)的引用,就不能直接修改原始对象—相当于通过“传值”来传递对象。在Python中,strings、tuples和numbers是不可更改的对象,而list、dict等则是可以修改的对象。为了区别这两种传递方式,通过具体的例子来展示。【示例4.2】在一个函数中分别改变数字、字符串和元组的值,观察这三个值是否改变。defchangeValue(num,string,my_tuple):num=5string="Trumple"my_tuple=(3,6)num=8string="Kitty"my_tuple=(4,8)changeValue(num,string,my_tuple)print(num,string,my_tuple)【示例4.3】定义一个修改字典或列表元素的函数,修改后,观察列表或字典对象是否被改变。学生活动:学生通过2个案例的对比,学会得出以下结论:1)通过对示例4.2进行分析可知,如果函数收到的是一个不可变对象(如数字、字符串或者元组)的引用,就不能直接修改原始对象,相当于通过“传值”来传递对象。2)通过对示例4.3进行分析可知,如果函数收到的是一个可变对象(如字典或者列表)的引用,就能修改对象的原始值,相当于通过“传引用”来传递对象。[步骤五]学生实践练习。教师布置任务:定义一个接收4个参数的函数,最后一个参数为可选的布尔型参数,前3个参数为带排序的数字。在不指定时排序为正序,指定时排序为倒序。教师不做具体实操演示,而是给学生提供解决思路。(1)将前3个参数放置在一个列表中。(2)判断最后一个参数是否为指定,依据布尔类型来决定是否按正序排列该案例的代码实现如下所示:defsort_numbers(num1,num2,num3,reverse=False):

#将前三个数字放入一个列表中

numbers=[num1,num2,num3]

#根据reverse参数的值决定排序顺序

ifreverse:

numbers.sort(reverse=True)

else:

numbers.sort()

returnnumbers

print(f'排序结果为{sort_numbers(20,30,12)}')[步骤六]传递参数的三种类型。教师讲解:下面对自定义函数时的参数做重点讲解。第1种:传递可选参数。有时候,需要让实参变成可选的,这样使用函数的人就只需要在必要时才提供额外的信息,可以使用默认值来实现让参数变成可选的。具体案例如下:【示例4.5】定义一个函数,它接收3个参数,其中第三个参数为可选参数,默认值为空。deffunc_info(name,age,city=''):ifcity:information='姓名:'+name+',年龄:'+str(age)+',城市:'+cityelse:information='姓名:'+name+',年龄:'+str(age)returninformationinformation=func_info('张三',20)print(information)传递3个参数,查看调用结果,代码如下:information2=func_info('李四',19,'北京')print(information2)【注意】在定义可选参数函数的传递参数时,必须要将可选参数定义在参数列表的最后,否则会报错。教师活动:下面讲解第2种参数传递的情况:传递任意数量的参数。在预先不知道需要接收多少个实参时,使用“*args”来指定函数的形参,这时会让Python创建一个名为args的空元组,并将接收到的所有值都封装到这个元组中,即使该元组只有一个元素也如此。之后如果要获取某个参数时,可以通过形参的位置来指定,这在编写main()函数时非常重要。【示例4.6】定义一个函数,通过不同的方式获取函数中的参数deffunc_args(*args):returnargs在上述代码中,定义了一个接收任意数量参数的函数,并将接收到的参数返回。names=func_args('tom','jerry','cat','dog')print(names)这时可以使用Python遍历的方式获取每一个参数的值,代码如下foriteminnames:print(item)学生活动:实操教师演示的代码从中体会参数传递的不同。教师活动:下面讲解第3种参数传递的类型:结合位置实参与任意实参。如果要让函数接收不同类型的实参,必须在函数定义中将接收任意数量实参的形参放在参数列表中最后的位置,Python会先匹配位置实参和关键字实参,再将余下的实参都收集到最后一个形参中【示例4.7】定义一个接收单个实参和多个形参的函数,它实现将实参与形参分别打印的效果。deffunc_arg_args(items_class,*itmes):print('函数的实参是:',items_class)print('函数的形参是:',itmes)func_arg_args('animal','cat','dog','rat')[步骤七]函数模块的调用教师讲解:函数的优点之一是使用它们可将代码块与主程序分离,从而降低它们之间的耦合性。通过给函数指定描述名称,可让主程序更容易理解。还有一种更高级的用法是将函数储存在被称为模块的独立文件中,再将模块导入主程序中,import语句允许在当前运行的程序文件中使用模块中的代码。通过将函数存储在独立的文件中,可以隐藏程序代码的细节,将重点放在程序的主要逻辑之上,而且,一旦将函数存储在独立的文件中后,可与其他开发者共享这些文件而不是整个程序。【示例4.9】(1)编译一个my_func.py的文件,该文件内主要包含两个函数,分别是get_detail()函数和say_hello()函数defget_detail(arg,*args):print('输入的类别是:',arg)foriteminargs:print('-',item)defsay_hello(name):print('Hello,',name.title())(2)在my_func.py文件所在的目录内再新建一个use_func.py的函数,然后使用import语句将my_func模块导入,并尝试调用my_func中定义的函数,代码如下:importmy_funcmy_func.get_detail('animals','cat','dog','rat')my_func.say_hello('tom')(3)改写use_func.py,实现导入特定的函数,代码如下:frommy_funcimportget_detailget_detail('animals','cat','dog','rat')在上述代码中,在导入函数模块时,使用了“from模块名import函数名”的方式导入了模块中的函数,在使用函数时就无须指定该函数的模块,直接使用函数名完成函数的调用(4)可以使用as来对模块起别名,如使用语句“import模块名as别名”来实现。例如重写use_func.py,代码如下:importmy_funcasff.get_detail('animals','bird','fish','lion')f.say_hello('tom')学生活动:学生在观看教师演示的时候,需要自己动手去实操方能掌握这种函数模块调用方式,这种模式在python数据分析中将会经常用到。[步骤八]结合循环模拟银行存取款操作教师活动:给学生布置存取款的任务需求说明,并展示运行效果。需求说明:模拟银行账户存取款及查看余额功能,分别定义函数实现银行账户存款、取款及查看余额功能。可以使用参数和返回值进行数据传递。初步设定账户的余额为10000元教师在该案例上扮演的角色是引导者,与学生一起探讨解决的实现思路。给出其中一种解决思路的方案(1)将账户信息(用户名和余额)保存在一个字典的对象中。(2)定义3个函数,分别用于实现存款、取款及查看余额的功能该案例的实现代码如下所示'''

4.2节综合实训:银行存取款

'''

defwithDrawal(account):

money=int(input("请输入取款的金额:"))

ifaccount['balance']<money:

print("余额不足,取款失败")

else:

account['balance']=account['balance']-money

print("取款成功

温馨提示

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

评论

0/150

提交评论