NO1 很重要的函数
#函数就是一个功能,一个方法,简化代码
#函数必须得调用才会执行
#在函数里面的变量全都是局部变量,它只能在函数里面用,函数执行结束那么没有这个变量
#不带参数
def say(): #函数名 print('哈哈哈') #函数体 say() #函数调用
#带一个参数
1 def say(name): #形参 2 print('%s说:哈哈哈哈!'%name) 3 4 say('周继蓉') #实参
#带多个参数
def say(name,sex) print('%s 哈哈 性别%s '%(name,sex)) x='zhoujirong' say(x,‘女’)
#默认值参数
1 def say(name,sex='男'): 2 # 必填参数,未知 #默认值参数,非必填 3 print('%s 哈哈哈 性别%s'%(name,sex)) 4 x='zjr' 5 say(x) 6 say(x,'女') 7 8 #结果: 9 # zjr 哈哈哈 性别男 10 # zjr 哈哈哈 性别女
#返回值
#如果需要用到函数的处理结果的话需要写return,不需要就不需要写
#函数里面如果碰到return,函数立即结束
1 def calc(a,b): 2 res = a*b 3 return res 4 cur_money = 8000 5 nx=calc(1000,13) 6 print(nx+cur_money)
1 def my(): 2 for i in range(100): 3 print(i) 4 if i==2: 5 return 6 print(my()) 7 #结果 8 #0 9 #1 10 #2 11 #none
1 #1.写一个校验输入的字符串是否是小数的程序 2 # 0.12 -0.13 3 #1.只有一个小数点,count 4 #2.正小数的情况,小数点左边和右边都是整数的话,才合法 0.12 [0,12] 5 #3.负小数的情况下,小数点右边是整数,左边必须以负号开头,只有一个负号 6 # -5.4 7 #[-5,4] 8 #[1:] 从第二位开始到最后都是整数 9 10 def check_float(s): 11 s = str(s)#转成字符串 12 if s.count('.')==1: 13 s_list=s.split('.') 14 left=s_list[0]#小数点左边 15 right=s_list[1]#小数点右边 16 if left.isdigit() and right.isdigit(): 17 return True 18 if left.startswith('-') and left.count('-')==1: 19 if left[1:].isdigit() and right.isdigit(): 20 return True 21 22 return False 23 24 print(check_float(-5.2)) 25 print(check_float(-.6)) 26 print(check_float('--.6')) 27 print(check_float('-dd.6'))
1 def my_file(name,content=None): 2 with open(name,'a+') as f: 3 f.seek(0) 4 if content: 5 f.write(content) 6 else: 7 return f.read()
NO2 json模块使用
1 # json是一个字符串,只不过是长得像字典 2 # json只能用双引号
3 import json 4 5 user_info = ''' 6 7 {"nhy":"123456","zjr":"111111"} 8 9 ''' 10 user_dic=json.loads(user_info)#把json(字符串)装换成字典 11 print(user_dic) 12 print('user_dic',type(user_dic)) 13 print('user_info',type(user_info))
#结果:
#{‘nhy’:'123456','zjr':'111111'}
#user_dic<class'dict'>
#user_info<class'str'>
将字典转换成json串
1 stu_info = {'laowang':{'cars':['bmw','Ben-z']}} 2 stu_str = json.dumps(stu_info)#把字典转成json(字符串) 3 print('json',type(stu_str)) 4 print(stu_str)
结果:
#dump 将字典直接成json写进文件
1 stu_info = {'laowang':{'cars':['bmw','Ben-z']}} 2 fw=open('users.json','w',encoding='utf-8') 3 json.dump(stu_info,fw,indent=4)#不需要咱们自己再write,人家会自动写入文件,indent加缩进,4 就够用 4 5 # load 和loads 不带s直接读文件,带s读字符串,同dumps和dump
结果:
1 f=open('users.json') 2 res=json.load(f) #将json文件读成字典 3 print(res)
结果:
用json写注册程序:
1 import json 2 f = open('users','a+',encoding='utf-8') #文件句柄,文件对象 3 f.seek(0) 4 all_users = json.load(f) #把json(字符串)转换成字典 5 for i in range(3): 6 u = input('user:').strip() 7 p = input('p:').strip() 8 cp = input('cp:').strip() 9 if not u or not p: 10 print('账号、密码不能为空') 11 elif u in all_users: 12 print('该用户已经被注册!') 13 elif u not in all_users and cp==p: 14 all_users[u]=p 15 break 16 f.seek(0) 17 f.truncate()#清空原来的内容 18 json.dump(all_users,f,indent=4) #字典转json 19 f.close()
NO3 高效读取文件
速度顺序: CPU>内存>磁盘
存用户名、密码进文件,写登录和注册
1 all_users = {} 2 f = open('users.txt','a+',encoding='utf-8') #文件句柄,文件对象 3 f.seek(0) 4 for line in f: #直接循环文件对象,每次循环的时候就是取的每一行数据 5 line = line.strip() 6 line_list = line.split(',') # [nhy,123456] 7 username = line_list[0] 8 passwd = line_list[1] 9 all_users[username] = passwd 10 u = input('user:').strip() 11 p = input('p:').strip() 12 cp = input('cp:').strip() 13 for i in range(3): 14 if not u or not p: 15 print('账号、密码不能为空') 16 elif u not in all_users: 17 print('用户不存在!') 18 elif p!=all_users.get(u): 19 print('密码错误!') 20 else: 21 print('登录成功') 22 break 23 24 for i in range(3): 25 if not u or not p: 26 print('账号、密码不能为空') 27 elif u in all_users: 28 print('该用户已经被注册!') 29 elif u not in all_users and cp==p: 30 info = '%s,%s '%(u,p) 31 f.write(info) 32 break 33 f.close()
缓存区:内存和磁盘中间存数据的地方,缓存区存满会写入磁盘
fw = open('zjr','w') fw.write('dddd','w') fw.flush()#把缓冲区里面的数据立即写到磁盘上 fw.close()
with写打开文件,会自己关闭文件
1 with open('zjr','w') as fw,open('tzy','w') as fw2: #打开多个文件,用逗号隔开 2 fw.read() 3 fw.write()
NO4 文件修改
方法一:
1 #文件修改 2 方法1#1.简单粗暴直接 文件小可以,文件大会崩溃 3 1.先获取到文件里的所有内容 4 2.然后修改内容 5 3.清空原来文件里面的内容 6 4.重新写入 7 8 f = open('test','a+') 9 f.seek(0) 10 all_data=f.read() 11 new_data=all_data.replace('123','python') 12 f.seek(0) 13 f.truncate()#清空文件内容 14 f.write(new_data) 15 f.flush() 16 f.close()
方法二:
1 #方法2 高效的处理文件方式 2 # words words_new 3 #1.先打开原来的文件,再打开一个空文件 4 #2.循环处理原来文件里面的每一行数据,处理完之后,写到新文件里面 5 #3.把原来的文件删掉,把新的文件的名字改为原来文件的名字 6 import os #引入os模块删除 7 with open('words',encoding='utf-8') as fr,open('.words','w',encoding='utf-8') as fw: 8 for line in fr: 9 line=line.lstrip()#去左边空格 10 if line:#判断这一行是否有数据 非空即真,真就处理,假就不处理,继续循环 11 line = line.replace('你','you')#替换数据 12 fw.write(line)#写到新文件里面 13 os.remove('words')#删除原来文件 14 os.rename('.words','words')#把新文件的名字改成原来文件的名字
练习修改文件
#邮箱
1 import os #引入os模块删除 2 import string 3 with open('eamil.txt',encoding='utf-8') as fr,open('.words','w',encoding='utf-8') as fw: 4 for line in fr: 5 if not line[0] in string.digits: 6 line=line.rstrip() 7 line = line+'@163.com '#替换数据 8 fw.write(line)#写到新文件里面 9 os.remove('eamil.txt')#删除原来文件 10 os.rename('.words','eamil.txt')#把新文件的名字改成原来文件的名字
监控日志
1 #1.监控日志 2 # 1.如果一分钟之内某个ip访问超过100次 3 # 2.就把ip找出来 4 5 6 #集合 天生去重 7 #1.打开日志文件 8 #2.获取每行数据 9 #3.split,取第一个元素 10 #4.找出所有ip,统计次数 11 #5. 判断每个ip次数大于100,就发邮件 12 #6. 记录文件指针,给下一次读的时候用 13 #7. 等待60a,重新读取文件 14 15 import time 16 point = 0 #存放的是文件初始的位置 17 while True: 18 with open('access.log',encoding='utf-8') as f: 19 f.seek(point) 20 ip_info={}#定义字典存放ip和它出现的次数 21 for line in f: 22 ip=line.split()[0]#列表按空格切分,第一个就是ip 23 if ip in ip_info: 24 ip_info[ip]+=1 25 else: 26 ip_info[ip]=1 27 point = f.tell()#获取当前文件指针的位置 28 for k in ip_info: 29 if ip_info.get(k)>=100: 30 print('该ip正在攻击你:%s'%k) 31 time.sleep(60)#等待60s再统计
NO5 集合
1.天生去重,循环
2.关系测试 - 交集、差集、并集、反向差集、对称差集
集合:天生去重
1 nums = [1,1,1,2,3,4,4] 2 nums_set = set(nums) 3 nums2 = {1,2,3,4,1,1,1} 4 print(nums2) 5 6 null_set=set()#空集合定义
1 #转集合 2 list = [1,2,3,4,5,6] 3 list_2 = [2,5,4,7] 4 list=set(list) 5 list_2=set(list_2) 6 print(list.intersection(list_2))#交集 取出重复数据 7 print(list.union(list_2))#并集 去重 统一展示 8 print(list.difference(list_2))#差集 list中有,list_2没有 9 10 list_3 = set([1,3,6]) 11 print(list_3.issubset(list))#子集 12 print(list.issuperset(list_3))#父集 13 print(list.symmetric_difference(list_2))#对称差集,并集-交集 14 15 # & 交集 |并集 - 差集 ^对称差集 16 print(list & list_2) 17 print(list | list_2) 18 print(list - list_2) 19 print(list ^ list_2) 20 21 #集合操作 22 #添加 23 list.add(555)#一次只能添加一个 24 list.update(666,777)#同时添加多个 25 #删除 26 # list.remove(5)#指定删除,删除一个不存在的会报错 27 list.pop()#随机删除 28 list.discard(666)#删除一个不存在的不会报错
集合练习-密码
1 pwd = input('请输入你的密码:').strip() 2 pwd = set(pwd) 3 #大写字母、小写字母、数字、特殊字符 4 import string 5 nums=set(string.digits) 6 ascii_lowercase = 'abcdefghijklmnopqrstuvwxyz' 7 lower=set(ascii_lowercase) 8 ascii_uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 9 upper =set(ascii_uppercase) 10 punctuation = r"""!"#$%&'()*+,-./:;<=>?@[]^_`{|}~""" 11 zifu=set(punctuation) 12 if pwd & nums & lower & upper & zifu: 13 print('合法!') 14 else: 15 print('大写字母、小写字母、数字、特殊字符都要有!')