笔记
1.读操作有哪四种
1.f.read()
2.f.readline()
3.f.readlines()
4.with open(‘b.txt’,‘r’)
2.with的用法
with open('b.txt','r') as f:
3.w,wb+,ab+
w,只写操作
wb+二进制读写
ab+二进制追加
import os
os.rename()#重命名
os.remove()#移除
os.mkdir()#创建目录
os.makedirs()#z创建多级目录
os.rmdir()#删除目录
os.removedirs()#删除多级目录
os.getcwd()#获取当前目录
os.listdir()#获取当前目录列表
os.chdir()#切换目录
os.path.exists()#判断是否存在
os.path.isfile()#判断是否是文件
os.path.isdir()#判断是否是目录
os.path.abspath()#获取绝对路径
os.path.isabs()#判断是否为绝对路径
os.path.basename()#获取路径的最后部分
os.path.dirname()#获取路径中的路径部分
eg:
with open('b.txt','r') as f:
contents=f.readlines()
dzd={}
for line in contents:
if line[-1]=='\n':#\n
a=line[:-1].split(',')#如果遇到\n,那么删除,然后用','进行划分
else:
a=line.split(',')#否则直接用‘,’进行划分
#此时得到a的值['num':001,'name':'张三']
zd={}
for x in a:#循环对a再操作
lb=x.split(':')
if lb[0]=='num':
dzd[lb[1]]=zd
else:
zd[lb[0]]=lb[1]
print(dzd)
with open('c.txt','w') as f:
for k,v in dzd.items():
if v['age']>=18:
f.write('num:'+k+',')
for k1,v1 in v.items():
f.write(k1+':'+str(v1))
if k1=='age':
f.write('\n')
else:
f.write(',')
异常
try:
print(1/0)
except ZeroDivisionError as e:
print('出错了')
print(e)##出错提示
print('结束')
eg:
while True:
try:
a=input('请输入a')
b=int(input('请输入b'))
c=a>b##类型错误,字符串和数字不能比较大小,输出应该是typeerror
print(c)
except TypeError as f:
print('有异常',f)
eg:
while True:
try:
a=int(input('请输入a'))#输入浮点型
b=int(input('请输入b'))
c=a+b##类型错误,字符串和数字不能比较大小,输出应该是typeerror
print(c)
except ValueError as f:
print('有异常',f)
eg:
try:
a=eval(input('请输入表达式'))
print(a)
except ZeroDivisionError as e:
print(e)
eg:
try:
a=eval(input('请输入表达式'))
print(a)
b=[1,2]
print(b[2])
except ZeroDivisionError as e:##异常不对应时,不能捕获异常
print(e)
eg:
try:
a=eval(input('请输入表达式'))
print(a)
b=[1,2]
print(b[2])
except ZeroDivisionError as e:##异常不对应时,不能捕获异常
print(e,'34343')
eg:
try:
b=[1,2]
print(b[2])
except IndexError as e:
print('索引异常',e)
同一组合,只捕捉一个异常
try:
a=eval(input('请输入表达式'))
print(a)
b=[1,2]
print(b[2])
except (ZeroDivisionError,IndexError)as e:##异常不对应时,不能捕获异常
print(e)
eg:
try:
a=eval(input('请输入表达式'))
print(a)
except:##能捕捉到所有异常,只是不知道是什么异常
print('我能捕捉到所有异常')
else:#没有异常时执行
print('我没有异常')
finally:#不管有没有异常都要执行
print('========')
eg:
try:
a=open('a.txt','r')
a.write('gaga')
except IOError as e:##写入错误
print(e)
finally:###当程序,一定执行完时,例如文件的关闭,使用finally
a.close()
eg:
name=input('请输入')
try:
if len(name):
raise Exception('你好呀,你的名字错了')
except Exception as f:
print(f)
eg:
try:
a=[1,2,3]
raise IndexError('索引超出范围')#不需要写错误语句,raise
except IndexError as f:
print(f)
eg:
class MyEexcption(Exception):
def __init__(self,msg,hehe):
self.msg=msg
self.gaga=hehe
def __str__(self):
return self.msg+str(self.gaga)
try:
raise MyEexcption('哈哈',19)
except MyEexcption as hehe:
print(hehe)
eg:
dog=input('请输入名字')
try:
if dog=='藏獒':
raise Exception('请重新输入')
else:
print(dog)
except Exception as e:
print(e)
eg:
class MMM(Exception):
def __init__(self,length,atleast):
self.length=length
self.atleast=atleast
def __str__(self):
return '请输入的长度是{},最少长度是{}'.format(self.length,self.atleast)
msg=input('请输入:')
try:
if len(msg)<=20:
raise MMM(len(msg),20)
except MMM as f:
print(f)
#单例模式
class Sun():
_instance=None
def __new__(cls, *args, **kwargs):
if not cls._instance:
cls._instance=object.__new__(cls)
return cls._instance
else:
return cls._instance
def __init__(self,name):
self.name=name
sun=Sun('张三')
yue=Sun('李四')
print(sun.name)
print(sun==yue)
print(sun is yue)
#优化代码
class Sun():
_intance=None
def __new__(cls, *args, **kwargs):
if not cls._intance:
cls._intance=object.__new__(cls)
return cls._intance
def __init__(self,name):
self.name=name
a=Sun('张三')
b=Sun('李四')
print(a.name)
print(a==b)
print(a is b)
eg:
class BMW():
def run(self):
print('宝马跑')
def stop(self):
print('宝马停')
class Audi():
def run(self):
print('奥迪跑')
def stop(self):
print('奥迪停')
class Mbahe():
def run(self):
print('迈巴赫跑')
def stop(self):
print('迈巴赫停')
class CarFacory():
@classmethod
def makeCar(cls,name):
if name=='宝马':
return BMW()
elif name=='奥迪':
return Audi()
elif name=='迈巴赫':
return Mbahe()
a=CarFacory.makeCar('宝马')
b=CarFacory.makeCar('奥迪')
c=CarFacory.makeCar('迈巴赫')
a.run()
a.stop()
b.run()
b.stop()
c.run()
c.stop()
#观察者模式
class Boss():
def __init__(self):
self.status=''
self.observers=[]
def append(self,oberser):
self.observers.append(oberser)
def update(self):
for obj in self.observers:
obj.update()
class YeWuEmployee():
def __init__(self,name,boss):
self.name=name
self.boss=boss
def update(self):
print('业务组:{}别玩了,{}'.format(self.name,self.boss.status))
class Caiwu():
def __init__(self,name,boss):
self.name=name
self.boss=boss
def update(self):
print('财务组:{}今天到广州最好的饭店吃饭,{}'.format(self.name,self.boss.status))
eg:
if __name__ == '__main__':
ljc=Boss()
cc=YeWuEmployee('陈成',ljc)
wx=YeWuEmployee('伍鑫',ljc)
hj=Caiwu('黄俊',ljc)
ljc.status='回国了'
ljc.append(cc)
ljc.append(wx)
ljc.append(hj)
ljc.update()
eg:
class Boss():
def __init__(self):
self.status=''
self.observers=[]
def append(self,oberser):
self.observers.append(oberser)
def update(self):
for obj in self.observers:
obj.update()
class Message():
def __init__(self, name, boss):
self.name = name
self.boss = boss
class YeWuEmployee(Message):
def update(self):
print('业务组:{}别玩了,{}'.format(self.name,self.boss.status))
class Caiwu(Message):
def update(self):
print('财务组:{}今天到广州最好的饭店吃饭,{}'.format(self.name,self.boss.status))
if __name__ == '__main__':
ljc=Boss()
cc=YeWuEmployee('陈成',ljc)
wx=YeWuEmployee('伍鑫',ljc)
hj=Caiwu('黄俊',ljc)
ljc.status='回国了'
ljc.append(cc)
ljc.append(wx)
ljc.append(hj)
ljc.update()
eg:
class CashNormal():
def __init__(self):
pass
def getMoney(self,money):
return money
class CashRate():
def __init__(self,rate):
self.rate=rate
def getMoney(self,money):
return self.rate*money
class CashReturn():
def __init__(self,condition,ret):
self.condition=condition
self.ret=ret
def getMoney(self,money):
return money-(money//self.condition)*self.ret
class Celue():
def __init__(self,obj):
self.obj=obj
def getMoney(self,money):
return self.obj.getMoney(money)
if __name__ == '__main__':
zd={}
money=float(input('请输入钱'))
zd[0]=Celue(CashNormal())
zd[1]=Celue(CashRate(0.8))
zd[2]=Celue(CashReturn(300,50))
ce=int(input('请输入消费策略'))
if ce not in zd:
ce=0
fuqian=zd[ce].getMoney(money)
print(fuqian)
eg:
import pygame
from aaa import *
print(_a)##*不能输出带下划线的
from aaa import a,_a
print(a)
print(_a)
eg:
def hanshu(a,b):
print(a+b)
hanshu(c=5,d=6)#报错,位置参数,不能再用其他变量赋值
eg:
def hanshu(a=[]):
a.append(6)
print(a)
hanshu()#[6]
hanshu()#[6,6]
eg:
def hanshu():
a=[]
for i in range(3):
x=lambda d:d*i
a.append(x)
return a
y=hanshu()
for x in y:
print(x(5))
##函数的顺序,LEGB
L,Local函数的内部,局部作用域
E,Enclosing,嵌套函数的外层函数内部,嵌套作用域
Global,全局作用域
Built-in ,内建函数,内建作用域
a=1
b=4
c=6
def hanshuw():
a=2
b=5
def hanshun():
a=3
print(a)
print(b)
print(c)
print(max,__name__)
hanshun()
hanshuw()
作业
1、定义一个函数func(filename) filename:文件的路径,
函数功能:打开文件,并且返回文件内容,最后关闭,用异常来处理可能发生的错误。
“”"
import os
def func(filename):
try:
f=open(filename)
except Exception as e:
print(e)
else:
print(f.read())
f.close()
2.、编写一个计算减法的方法,当第一个数小于第二个数时,抛出“被减数不能小于减数"的异常
def hanshu(a,b):
if a < b:
raise BaseException('被减数不能小于减数')
else:
return a-b
print(hanshu(1,3))
3、定义一个函数func(listinfo) listinfo:为列表,listinfo = [133, 88, 24, 33, 232, 44, 11, 44],
返回列表小于100,且为偶数的数
listinfo = [133, 88, 24, 33, 232, 44, 11, 44]
def func(listinfo):
for x in listinfo:
try:
if x<100 and x%2==0:
print(x)
except Exception as a :
return a
else:
return None
print(func(listinfo))