新手学习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————回寝室好好休息,明天早点过来学习!!!

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值