《python数据分析与应用》 课件 第6章 函数和类_第1页
《python数据分析与应用》 课件 第6章 函数和类_第2页
《python数据分析与应用》 课件 第6章 函数和类_第3页
《python数据分析与应用》 课件 第6章 函数和类_第4页
《python数据分析与应用》 课件 第6章 函数和类_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

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

文档简介

第6章函数与类Python数据分析与应用CONTENTS6.1函数6.2递归6.3异常处理6.4类与对象目录6.5代码补全和知识拓展6.6实训任务6.7延伸高级任务6.8课后习题函数1知识准备2内置函数3自定义函数1函数的概念4参数的传递与范围函数的概念右图中sum就类似函数名,B2,C2是传递给sum函数的参数,无论是Excel中的SUM公式还是Python中的sum函数都用于执行求和操作。函数是代码的一个基本单位,即带名字的代码块,其功能是通过调用自身来完成特定的任务;我们可以对比excel中的公式,来理解函数;内置函数左图为部分Python中常见的内置函数及其功能。内置函数,顾名思义是指Python给我们提供的,可以拿来直接用的函数。自定义函数自定义函数,顾名思义就是根据用户自己的需求做一个DIY,通过DIY的函数解决特定场景下的问题。图中我们自定义简单函数:打印问候语。思考:图中自定义函数用了哪些关键词?它们的作用是什么呢?自定义函数01020304defdef为创建自定义函数的关键字,告诉Python,我们要准备构造函数了func_namefunc_name是函数的名称,最好做到见名知意;print("hello,python")print("hello,python")是函数实体,即需要这个函数实现什么功能func_name()func_name()此处是调用函数,让python执行函数代码。实践:结合前面学的循环,尝试自定义函数,求解等差数列an=2+4n的前10项、前20项、前50项和前100项的和。参数的传递与范围关键字参数A默认参数B可变参数C参数的传递与范围必选参数,顾名思义就是我们在调用一个自定义函数时,必须给函数中的这个参数赋值,必选参数必须以正确的顺序传入函数。调用时的数量必须和声明时的一样,否则程序就会报错。参数的传递与范围默认参数,默认参数也叫参数的默认值,即在定义函数时,直接指定行参的默认值。调用函数时,如果没有传递参数,则会使用默认参数。参数的传递与范围可变参数,可变参数也叫不定长参数,它可以接受任意多个数值。我们只需在形参前面加上*,则表示实参为可变参数。自定义函数总结:函数语法:函数名(参数)语法理解:首先先给函数命名,然后紧接着给英文小括号里放入指定的参数辅助理解:我们从仓库中拿出一把一个老式收音机(函数),我们需要安装五号电池(参数类型),两个电池(参数个数),正极朝里(参数顺序),如此就能实现我们的需要:收音机接收广播。递归2知识准备2递归的三大定律33递归的应用1递归的定义4案例递归的定义2递归就像查词典,词典本身就是递归,为了解释一个词,需要使用更多的词。1递归,在计算机科学中是指一种通过重复将问题分解为同类的子问题而解决问题的方法。递归的三大定律在想要使用递归解决问题的时候,需要考虑是否满足这三个条件:①递归的基本结束条件(即最小规模问题)②递归算法必须满足朝着规模减小的方向改变状态,即向基本结束条件演进③递归算法必须调用自身思考:上图例子中递归执行过程是怎么样的?递去和回归defpeach(day):ifday==10:return1return(peach(day+1)+1)*2print("总共有{}只桃子".format(peach(1)))1.递归:猴子吃桃问题。猴子第1天摘下若干个桃子,当即吃了⼀半,还不过瘾,又多吃了⼀个。第2天早上⼜将剩下的桃子吃掉⼀半,又多吃了⼀个。以后每天早上都吃了前⼀天剩下的⼀半再多吃⼀个。到第10天早上想再吃时,就只剩⼀个桃子了。求第1天共摘多少个桃子。递归的应用deffib(n):ifn==1orn==2:return1else:returnfib(n-1)+fib(n-2)n=int(input())ifn<=20:foriinrange(1,n+1):print(fib(i),end='')else:print('为防止递归过度消耗系统资源,n最大为20')2.递归:著名的菲波拉契(Fibonacci)数列其第一项为0,第二项为1,从第三项开始,其每一项都是前两项的和。编程求出该数列前N项数据。为防止递归过度消耗系统资源,n最大为20。递归的应用def

fact(n):

if

n==1:

return

1

else:

return

fact(n-1)*na=

int(input('请输入一个正整数:'))print(a,'的阶乘结果为:',fact(a))3.递归:计算n的阶乘n的阶乘可以表示为f(n)=1*2*3…*(n-1)*n,从而可得f(n)=f(n-1)*n。递归的应用异常处理3知识准备异常的定义01异常的处理02异常的定义Python有两种错误很容易辨认:语法错误和异常语法错误被称之为解析错,语法分析器指出了出错的一行,并且在最先找到的错误的位置标记了一个小小的箭头。异常是指即便Python程序的语法是正确的,在运行它的时候,也有可能发生错误。运行期检测到的错误被称为异常。常见的异常defdivide_numbers(a,b):try:result=a/bprint("计算结果:",result)finally:print("执行finally块")#测试divide_numbers(10,2)divide_numbers(10,0)1.try-finally语句。异常的处理defcheck_age(age):ifage<18:raiseValueError("年龄必须大于或等于18岁!")else:print("年龄合法")#测试try:check_age(21)#年龄合法check_age(16)#这里会抛出异常exceptValueErrorasex:print("捕获到异常:",ex)2.raise语句。异常的处理类与对象4知识准备类的概念01类的定义02类的实例化和使用03类的继承04类的概念类是包含特定属性可以发挥特定功能的对象。类比到神话故事中,神创造一个新的物种,首先需要做一个模板,这个模板就是类,为了满足新物种的生存,神需要考虑,它是陆生、水生还是两栖,有几条腿,这些就是类的属性。除此之外,神还需要教会它一些生存技能,游泳/生火/爬树/,这些技能就是类方法,按照这个模板创造的新生命实体是类的实例(又称对象),这样这个新的生命就可以实现生存的功能。类的定义在Python中,我们通过使用class关键字来进行类的定义。定义类的语法格式如下所示:class类名:成员变量成员函数类的实例化和使用在Python中,用赋值的方式创建类的实例,一般格式为:对象名=类名(参数列表)创建对象后,可以使用“.”运算符,通过实例对象来访问这个类的属性和方法(函数),一般格式为:对象名.属性名对象名.函数名()例如,我们需要创建Person类的实例,则可以表示为:a=Person()此时,我们就可以用来调用类的name属性。classAverage:m=100#定义属性n=200#定义属性p=300#定义属性defprint_average(self):#定义方法print((self.m+self.n+self.p)/3)b=Average()#创建实例对象bb.m=666#调用属性xb.print_average()#调用方法show1.求三个数的平均数。知识准备类的继承面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过继承机制。继承用于指定一个类将从其父类获取其大部分或全部功能。classPerson(object):def__init__(self,name,gender):=nameself.gender=genderprint("Person类__ini()__。","姓名:",)classStudent(Person):def__init__(self,name,gender,age):super(Student,self).__init__(name,gender)self.age=ageprint("Student类__ini__()。","姓名:",)#“__main__”等于当前执行文件的名称if__name__=="__main__":person=Person("小明","男")student=Student("小红","女",10)2.面向对象之继承示例知识准备代码补全和知识拓展5_____col(x):ifint(x)!=x:print("X不是整数,程序退出")elifx//2!=x/2:returnTrue_______:return_______print(col(5))print(col(9))print(col(7.9))1.编写函数col(x),若x不是整数,给出提示后退出程序;如果x为奇数,返回Ture;如果x为偶数,返回False。请补全该程序代码。代码补全和知识拓展______Class_one:#一个简单的类实例a=12345def______(self):return'金融科技应用'm=______()#访问类的属性和方法print("Class_one类的属性i为:",m.a)print("Class_one类的方法f输出为:",m.show())2.定义一个类名为Class_one,输出属性i和输出“金融科技应用”。请补全该程序代码。代码补全和知识拓展defmax(m,n):#定义max函数ifm>n:#如果条件成立,返回a的值returnmelse:#否则返回b的值returnnx=int(input("输入一个数:"))#显示提示语并接收x的值y=int(input("再输入一个数:"))#显示提示语并接收y的值a=max(x,y)#调用函数,将较大值赋给zprint("较大的数为:",a)#输出较大值3.使用max()函数,求两个数中值较大的数。代码补全和知识拓展实训任务6classA:deffm(self):print("fromA")deftest(self):self.fm()classB(A):deffm(self):print("fromB")b=B()b.test()1.函数和类的联合。实训任务某景区全年访客量详情如表所示:月份

1月

2月

3月

4月

5月

6月

7月

8月

9月

10月

11月

12月访客人数300

398

789

321

234

342

345

234

456

345

123

234使用函数计算start月—end月的月平均访客量,求1月到9月的平均访客量,6月到12月的平均访客量。输出结果如下:

1月到9月的平均访客量人数为:402.33

6月到12月的平均访客量人数为:309.86代码补全和知识拓展defholiday(start,end):#景区每月的访客数据使用列表保存data=[300,398,789,321,234,342,345,234,456,345,123,234]sum=0#使用for循环累加计算总访客量formonthinrange(start-1,end):sum+=data[month]avg=sum/(end-start+1)print("%d月到%d月的平均访客量人数为:%.2f"%(start,end,avg))holiday(1,9)holiday(6,12)代码补全和知识拓展延伸高级任务7defget_holiday(X):ifX<5:return1elifX<10:return5else:return7X=7days=get_holiday(X)print("工作年龄为%d年的员工的年假天数为:%d天"%(X,days))1.某公司根据员工在本公司的工龄决定其可享受的年假的天数,如表所示。工龄

年假天数小于5年

1天5年—10年 5天10年以上 7天定义函数,传入员工工龄返回其可享有的年假天数并打印。输出结果如下:工作年龄为9年员工的年假天数为:5天延伸高级任务importtypesclassPerson(object):def__init__(self,name='',age=20,sex='man'):self.setName(name)self.setAge(age)self.setSex(sex)defsetName(self,name):ifnotisinstance(name,str):print('namemustbestring.')returnself.__name=namedefsetAge(self,age):ifnotisinstance(age,int):print('agemustbeinteger.')returnself.__age=age2.继承Person类生成Student类,编写新的函数用来设置学生专业,然后生成该类对象并显示信息。延伸高级任务defsetSex(self,sex):ifsex!='man'andsex!='woman':print('sexmustbe"man"or"woman"')returnself.__sex=sexdefshow(self):print(self.__name)print(self.__age)print(self.__sex)classStudent(Person):def__init__(self,name='',age=30,sex='man',major='Computer'):#调用基类构造方法初始化基类的私有数据成员super(Student,self).__init__(name,age,sex)self.setMajor(major)#初始化派生类的数据成员defsetMajor(self,major):ifnotisinstance(major,str):print('majormustbeastring.')returnself.__major=major延伸高级任务defsetSex(self,sex):ifsex!='man'andsex!='woman':print('sexmustbe"man"or"woman"')returnself.__sex=sexdefshow(self):print(self.__name)print(self.__age)print(self.__sex)classStudent(Person):def__init__(self,name='',age=30,sex='man',major='Computer'):#调用基类构造方法初始化基类的私有数据成员super(Student,self).__init__(name,age,sex)self.setMajor(major)#初始化派生类的数据成员defset

温馨提示

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

评论

0/150

提交评论