今天08:10才到实验室,昨天晚上感冒了又没睡好所以就来晚了。
师弟送了我一袋感冒灵,希望尽快好。
开始复习昨天的内容 08:29
刚刚弄完建模大赛的报名和校内举办的游园会 一看10:00
1. 递归函数:
1.1 这里举个使用递归函数计算阶乘的例子:
def fac(n):if n==1:return 1else:return n*fac(n-1) n项*n-1那项s=fac(6) print(s)
1.2使用递归函数计算斐波那契数列
def fac(n):if n==1:return 1 1 1 2 3 5 8elif n==2:return 1 else:return fac(n-1)+fac(n-2) 前一项和前两项的和print(fac(6))
输出这个数列的前6位上的数字
def fac(n):if n==1:return 1elif n==2:return 1else:return fac(n-1)+fac(n-2)print(fac(6))
for i in range(1,7):d=fac(i)print(d)
标红色的是 显示前6位 使用for .. in ...循环来做
总结:递归函数的核心思想就是 if ...else... 终止和调用
2.BUG
BUG常见的类型
2.1 粗心大意类型
2.1.1 在if 中要做比较运算符。==
2.1.2 中文括号
2.1.3数据类型
2.1.4whlie无限循环
2.1.5 冒号 If语句 循环语句 else语句
2.1.6 缩进错误
2.1.7 字符串和数字拼接在一起
2.2 逻辑清晰问题:
lst=[{'rating':[9.7,2062397],'id':'1292052','type':['犯罪','剧情'],'title':'救赎','actor':['钢铁侠','美国队长']}, {'rating':[9.7,20627897],'id':'1230052','type':['爱情','剧情'],'title':'我会用智能手机','actor':['馒头','豆包']}, {'rating':[9.7,2069997],'id':'1299052','type':['乡村','剧情'],'title':'好玩','actor':['花卷','油条']}] name = input('请输入您要查找的演员') 输入字符串 for item in lst: 遍历列表给自定义量itema=item['actor'] item中的actor给了afor s in a: 再遍历给sif name == s: 如果输入的name和s的Value值相同print(name,'出演了',item['title']) 那就打印出来这个演员的名字和他出演的节目
对于for...in...那一块就是我把权力给了你,你可以代替我。
2.3 被动掉坑:
举个例子:
a= int(input('请输入第一个整数')) b = int(input('请输入第二个整数')) result = a/b print(result)
但是我要是输入0,那不就是错误了吗。所以这里程序介绍一个类似于if...else..这样的程序
为try...except...
可能会出现的问题放在try里面,异常代码交给except..
try:a= int(input('请输入第一个整数'))b = int(input('请输入第二个整数'))result = a/bprint(result) except ZeroDivisionError:print('对不起,程序有误') print('程序结束')
但是我不输入数的时候,就会出现错误,也异常但没有异常代码来解释
所以就有多个except结构,try...except Exception1....except Exception2..except BaseException.. 先子类后父类
所以我来举个例子:
try:a= int(input('请输入第一个整数'))b = int(input('请输入第二个整数'))result = a/bprint(result) except ZeroDivisionError:print('对不起,程序有误') except ValueError:print('只能输入数字串')
你不输入 或者把数字输入成字符串这些异常代码程序都全了。
3.Python的异常处理机制:
3.1 try...except...else结构
意思是:如果try块中没有抛出异常,则执行else块,如果抛出异常,则执行except块
try:a=int(input('请输入第一个整数'))b=int(input('请输入第二个整数'))result= a/ b except BaseException as e:print('出错了',e) else:print(result)
try...except...else..finally..
finally无论是否发生异常,都会被执行,用来释放try块中申请的资源
try→else→finally
try→except→finally
这些块都需要+:
try:a=int(input('请输入第一个整数'))b=int(input('请输入第二个整数'))result= a/ b except BaseException as e:print('出错了',e) else:print(result) finally:print('谢谢您的使用')
总结:try...except.. try...except..except... try..except...else...
try...except..else..finally... traceback模块
3.2 常见的异常类型:
1.ZeroDivisionError:除(或取模)0(所有数据类型)、
print(10/0)
2.IndexError:序列中没有此索引(index)
lst=[1,2,3,4] print(lst[4])
3.KeyError:映射中没有这个键
dict= {'name':50,'age':60} print(dict['name']) #取得该键的值 print(dict['gender']) #没有这个键
4.NameError:未声明/初始化对象(没有属性)
print(num) #未定义变量
5.SyntaxError:Python语法错误
int a =20 #变量是没有类型的就会出现错误
6.ValueError:传入无效的参数
a=int('hello') 这个字符串是不能转换十进制整数的。
3.3.traceback模块的使用
import traceback try:print(10/0) except:traceback.print_exc()
traceback.print_exc()
是 Python 中 traceback
模块提供的一个函数,用于打印最近一次异常的堆栈跟踪信息
这个异常会被存放在日后的日志文件当中 log日志
4.Pycharm开发环境的调试
5.两大编程思想
面向过程和面向对象
面向过程:事情比较简单,可用线性思维去解决
面向对象:事情比较复杂,使用简单的线性思维无法解决。
二者相辅相成,并不是对立的关系
5.1 类与对象:
类:多个类似的事物,组成的群体的统称
100 200 520 都是int类之下包含的相似的不同个例,这个个例专业术语称为实例或对象
这些类下的具体内容就叫做对象
5.1.1创建类的语法:
class Student: Student为类的名称由一个或多个单词组成,每个单词的首字母要大写,其余小写。native_pace='吉林' 直接写在类里的变量,成为类属性def eat(self): 实例方法 self写不写都会存在print('学生在吃饭')
def _init_(self,name,age): 初始化方法 self.name=name self.name称为实体属性,进行了一个赋值操作,将局部变量的name的值赋给实体属性self.age=age
@staticmethod
def method(): 这method括号里面不允许有self 规定
print('我使用了statticmethod进行修饰,所以我是静态方法')
@classmethod def cm(cls):print('我是类方法,因为我使用了classmethod进行修饰')
def drink(): 类之外定义是函数,类之内定义是方法print('喝水')
5.2 对象的创建:
对象的创建又称为类的实例化
语法结构:实例名=类名()
# 创建 Student 类的一个实例
stu1 = Student('张三', 20)
# 打印实例的字符串表示,需要定义 __str__ 方法
print(stu1)# 打印实例的内存地址
print(id(stu1))# 打印实例的类型
print(type(stu1))
其中id与输出对象的值是十进制与十六进制之间的转换
意义是什么? stu1=Student()
意义是有了实例,就可以调用类中的内容了
# 打印实例的类型 print(type(stu1)) stu1.eat() 实例名+。+方法名() print(stu1.name) #可以调用实例对象里的对象 print(stu1.age)
Student.eat(stu1) 这个结果与stu1.eat(),代码功能相同,都是调用Student中的方法
#类名.方法名(类的对象)→实际上就是方法定义处的self
stu1.eat() →对象名.方法名()
class Student: native_place = '吉林' # 类属性,所有实例共享def __init__(self, age): # 构造函数的正确名称# 实例属性,每个实例都有自己的值self.age = agedef eat(self):print('学生在吃饭')@staticmethoddef method():print('我使用了staticmethod进行修饰,所以我是静态方法')@classmethoddef cm(cls):print('我是类方法,因为我使用了classmethod进行修饰')# 创建 Student 类的一个实例 stu1 = Student( 66)# 打印实例的字符串表示,需要定义 __str__ 方法 print(stu1)# 打印实例的内存地址 print(id(stu1))# 打印实例的类型 print(type(stu1)) stu1.eat()print(stu1.age) Student.eat(stu1)
5.2静态方法的使用方式
晚上感觉感冒又严重了,所以刚才的课程听得效果不是很好,一转头发现背后的师哥正在用Class这个类对象呢,所以重要性可想而知。再重来一遍
20:53
class Student : class +对象名: 类的名称简称类名,由一个或多个单词组成,开头必须大写,其余小写
python中一切皆对象
类的组成 类属性、实例方法、静态方法、类方法
class Student:native_place='吉林' #写在类里面得变量叫做类属性
def eat(self):print('学生在吃饭') 这里的self可以替换,但最好别换 #实例方法
在类之外定义的称之为函数,在类内定义的称为方法
@staticmethod def method(): #不允许写self的 在静态的这里print('我使用了statticmethod进行修饰,所以我是静态方法')
类方法:
def cm(cls): print('我是类方法,因为我使用了classmethod进行修饰') 需要传一个cls
还有一个初始化方法:
def __init__(self,name,age):self.name=name self.name称为实体属性,进行了一个赋值操作,将局部变量name 的值赋给实体属性self.age=age
创建Student类的对象之后,就可以调用类对象中的内容了
比如:
stu1.eat()
print(stu1.name) print(stu1.age)
stu1=Student('张三',20) stu1.eat() print(stu1.name) print(stu1.age)
这两个代码的功能相同,都是在调用类Student的eat方法
为什么这个self里面写了参数,因为eat有self要求传入student的对象 所以stu1是要求传入的对象,当然就可以传进来了。
print('我是类方法,因为我使用了classmethod进行修饰') stu1=Student('张三',20) stu1.eat() print(stu1.name) print(stu1.age) Student.eat(stu1) stu1=Student('张三',20) stu2=Student('李四',30) print(stu1.native_place) print(stu2.native_place) Student.native_place='天津' print(stu1.native_place) print(stu2.native_place)
本来今天都可以学完的,奈何事情有点多,主要自己感冒吃的药让我好困效率大打折扣,先回去了,周末加油努力,哦!对了老师明天要请我们课题组聚餐吃饭。
————21:41————回寝室好好休息,明天早点过来学习!!!