新手学习Python第八天——学习笔记
今天08:10才到实验室,昨天晚上感冒了又没睡好所以就来晚了。
师弟送了我一袋感冒灵,希望尽快好。
开始复习昨天的内容 08:29
刚刚弄完建模大赛的报名和校内举办的游园会 一看10:00
1. 递归函数:
1.1 这里举个使用递归函数计算阶乘的例子:
def fac(n): if n==1: return 1 else: 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 8 elif n==2: return 1 else: return fac(n-1)+fac(n-2) 前一项和前两项的和 print(fac(6))
输出这个数列的前6位上的数字
def fac(n):
if n==1:
return 1
elif n==2:
return 1
else:
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: 遍历列表给自定义量item a=item['actor'] item中的actor给了a for s in a: 再遍历给s if 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/b print(result) except ZeroDivisionError: print('对不起,程序有误') print('程序结束')
但是我不输入数的时候,就会出现错误,也异常但没有异常代码来解释
所以就有多个except结构,try...except Exception1....except Exception2..except BaseException.. 先子类后父类
所以我来举个例子:
try: a= int(input('请输入第一个整数')) b = int(input('请输入第二个整数')) result = a/b print(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 = age def eat(self): print('学生在吃饭') @staticmethod def method(): print('我使用了staticmethod进行修饰,所以我是静态方法') @classmethod def 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————回寝室好好休息,明天早点过来学习!!!
原文地址:https://blog.csdn.net/2302_81479776/article/details/142197340
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!