内置函数
# globals() 和 locals() # name= '班长666' # def func(): # a = 1 # b = 2 # print(globals()) # 全局变量 # print(locals()) # 这个局部空间变量 # func() # eval() 函数 # 用来执行一个字符串的表达式,并返回表达式的值,还可以实现list,dict,tuple与str之间的转换 # s = '1+2+3+4' # ret = eval(s) # print(ret) # # def func(): # print(6666) # return '太厉害了' # # ret1=eval('func()') # # print(ret1) # eval('func')() # dic = "{'key':'value'}" # print(type(dic)) # ret3=eval(dic) # print(ret3,type(ret3)) # exec() 函数,跟eval函数差不多,没有返回值 # s = '1+2+3+4' # ret = exec(s) # print(ret) # # # def func(): # print(6666) # return '太厉害了' # ret1=exec('func()') # callable() # 检测名字是否可以被调用 # a = '1' # print(callable(a)) # b=lambda :1 # print(callable(b)) # def func(): # pass # # print(callable(func)) # dir() 函数 查看一个数据可以调用哪些方法 # print(dir('123')) # print(dir(range(10))) # print(dir([])) # print() # 函数 # print(1) # print(2) # print(1,end='********') # print(2) # print(1,2,3) # print(1,2,3,sep=',') # with open('print_txt','w',encoding='utf-8')as f: # print('张三你好',file=f) # 数学类的 # ret = abs(-10) # print(ret) # ret2=divmod(10,6) # 除余函数 # print(ret2) # (1, 4) 商 1 余 4 # f= 1.23456 # ret3=round(f,2) # 可以保留几位小数 # print(ret3) # ret4=pow(2,3) # 2**3 # print(ret4) l = [1, 2, 3, -6, 5, 6] # ret5=sum(l) # sum求和 # print(ret5) # ret6=sum([i for i in l ]) # print(ret6) # dic = {"apple":50,"food":100} # ret7=sum({dic[k] for k in dic}) # print(ret7) # min() # 最小值 # ret8=min(l) # print(ret8) # # max() # 最大值 # ret9=max(l) # print(ret9) # print(ord('a')) # 编码转ASCII # print(chr(97)) # ASCII 转编码 # repr() 函数 便于区分类型 # print(repr('123')) # print(repr(123)) # # reversed(seq) # 翻转函数 # seq -- 需要转换的序列,如元组,列表,字符串,range # 返回一个反转的迭代器 # lst = [1,2,3,4,5,6] # lst.reverse() # print(lst) # ret10=reversed(lst) # print(ret10) # # print(list(ret10)) # for i in ret10: # print(i) # # filter(function, iterable) 函数 # function 函数名 # iterable 可迭代对象 # 用于过滤不符合条件的元素,返回符合条件的组成的列表,并以迭代器对象的形式返回 # 比如:过滤出列表中所有的奇数 lst = [1, 2, 3, 4, 5, 6, 7] # # def func(lst): # if lst % 2 == 1: # return True # # # ret = filter(func, lst) # print(ret) # print(list(ret)) # for i in ret: # print(i) # ret12=filter(lambda lst:lst%2 ==1,lst ) # print(ret12) # for i in ret12: # print(i) # map(func, iterable,...) 函数 # function 函数名 # iterable 可迭代对象 # 返回的结果是一个迭代器 # 作用: 把可迭代对象里面的元素作为函数的参数进行计算和判断, # 函数的返回值则被作为新的元素存储起来 # def add(x): # return x ** 2 # # lst1 = range(11) # # a=map(add,lst1) # print(a) # print(list(a)) # print(list(map(lambda x:x**2,range(11)))) # enumerate 枚举函数 给数据配上序列号 with open('print_txt',encoding='utf-8')as f: # for line in enumerate(f): # print(line) for num,line in enumerate(f,1): print(num,line) # zip() # 拉链方法 ******** # 它可以将多个序列(列表,元组,字典,集合,字符串以及range())压缩成一个zip对象 # 作用:将这些序列中对应位置的元素重新组合,生成一个个新的元组 # a = [1,2,3,4] # b = ['a','b','c','d'] # ret=zip(a,b) # print(ret) # for i in ret: # print(i) # sorted(iterable,key=None,reverse=False) # # iterable 可迭代对象 # key 用来排序的元素,可以通过函数来指定 # reverse 排序规则 ,reverse=True 降序 # l1 = [23,-66,11,22,33,88,-22] # ret=sorted(l1) # print(ret) # ret=sorted(l1,key=abs) # 绝对值升序 # print(ret) # ret=sorted(l1,key=lambda n:n%3) # print(ret) # # for i in l1: # print(i%3) lst1 =[{'age':20},{'age':18},{'age':38}] ret=sorted(lst1,key=lambda n:n['age']) print(ret)
hashlib模块
import hashlib # 加密密码不可逆,解不了密 # md5 算法 # md5 = hashlib.md5() # md5.update(b'123456') # ret = md5.hexdigest() # print(ret) # # e10adc3949ba59abbe56e057f20f883e 32位 # # '123456' 这个字符串通过md5这个算法加密之后的结果 # # # sha 算法 # sh1 = hashlib.sha1() # sh1.update(b'123456') # ret1=sh1.hexdigest() # print(ret1) # # 7c4a8d09ca3762af61e59520943dc26494f8941b 40位 # # '123456' 这个字符串通过sha1这个算法加密之后的结果 # # sh2 = hashlib.sha512() # 越长越安全,越长越复杂,计算效率会慢 # sh2.update(b'123456') # ret2=sh2.hexdigest() # print(ret2) # 以前有人把常见的密码123456通过著名算法都加密,拿到铭文,搞到你的数据库然后做对比,这种情况撞库 # 这种情况,我们要加盐 # md5 = hashlib.md5('只有我知道,别人不知道的秘密的字符串'.encode('utf-8')) # md5.update(b'123456') # ret = md5.hexdigest() # print(ret) # e10adc3949ba59abbe56e057f20f883e 32位 # afdc71bd7bc87c2c0205421d9e2b5359 # 还有更恶劣的人 # 恶意批量注册一些账户 张三|123456 李四|666666 # 拿到这些加密后密码和你的数据库对比 # 一般限制都是让用户少注册 # 动态加盐 -- 非常安全 # 每个用户的用户名是唯一的 # username=input('请输入账户') # username='只有我知道,别人不知道的秘密的字符串%s'%username # md5 = hashlib.md5(username.encode('utf-8')) # md5.update(b'123456') # ret=md5.hexdigest() # print(ret) # da43746d72f51eceb5d19c1af4f758d1 # 2ee7f4e690daf39b34bee2d125877ad3 # 整体加密 # md5=hashlib.md5() # md5.update('你好你好你好再见'.encode('utf-8')) # ret=md5.hexdigest() # print(ret) # # # 7c5368a646b1d58cecf51dc99a8ec53c # # 分段加密 # md6=hashlib.md5() # md6.update('你好你好'.encode('utf-8')) # md6.update('你'.encode('utf-8')) # md6.update('好'.encode('utf-8')) # md6.update('再见'.encode('utf-8')) # ret=md6.hexdigest() # print(ret) # 练习 # 对比两个文件是否一致 # 首先读文件 ,rb 来读 # 复制一个文件,重命名,两个文件去对比 # def get_md5(file): # md5 = hashlib.md5() # with open(file,'rb')as f: # content = f.read() # md5.update(content) # ret = md5.hexdigest() # return ret # ret=get_md5(r'D:\showCode\python\Show\GoodCode\NanJing_class_2\day9\2.内置函数.py') # ret2=get_md5(r'D:\showCode\python\Show\GoodCode\NanJing_class_2\day9\2.内置函数22.py') # print(ret == ret2)
异常捕获
# 异常处理 # try except 语句捕获异常 # try 是检测语句中的错误,从而让except语句捕获异常并处理 # try: # num = int(input('>>>')) # except ValueError: # print('请输入一个数字') # # print(222222) # lst = [1,2,3,4] # try: # num = int(input('>>>')) # print(lst[num]) # except ValueError: # print('请输入一个数字') # except IndexError: # print('请输入1-4之间的数字') lst = [1,2,3,4] # try: # num = int(input('>>>')) # print(lst[num]) # except: # # 但是你看不到报啥错 # print(11111) # try: # num = int(input('>>>')) # # print(lst[num]) # except Exception as e: # # 但是你看不到报啥错 # print('e',e) # finally: # 无论是否发生异常都将执行最后的代码 # print(2222222222)
json模块
import json # json 序列化 干嘛用的? 把一个东西变成序列 # 序列, [1,2,3,4] 有索引是序列 # 'wind' 有索引是序列 # {'a','b','c','d'} 集合 散列 # json 只能 [] {} 进行传输 # dic = { # "operate": "login", # "username": "wind", # "password": "123456" # } # # print(dic) # ret=json.dumps(dic) # 序列化转成json串 # # print(ret,type(ret)) # # # 转成字节 # byte_=ret.encode('utf-8') # print(byte_,type(byte_)) # # # # 服务端 # str_=byte_.decode('utf-8') # print(str_,type(str_)) # # ret_dic=json.loads(str_) # 反序列化的过程,把字符串反序列化成原本数据结构 # print(ret_dic,type(ret_dic)) # 字典能写到文件中嘛? # dic1={'南京':{'江宁':[],'玄武':[]}} # json_dic=json.dumps(dic1) # with open('city',mode='w',encoding='utf-8')as f: # f.write(json_dic) # # with open('city',mode='r',encoding='utf-8')as f: # str_d=f.read() # print(str_d) # dic=json.loads(str_d) # print(dic) # 解决中文乱码的问题 # dic1={'南京':{'江宁':[],'玄武':[]}} # json_dic=json.dumps(dic1,ensure_ascii=False) # with open('city',mode='w',encoding='utf-8')as f: # f.write(json_dic) # 总结: # json数据类型是一个特殊的字符串 # 在任何语言中,它的类型必须是字符串 # 还要满足一些要求: key必须是字符串,且value只是能 :字典,列表,字符串,数字,bool值 # json 是所有编程语言都公认的一种数据类型 # 如果python要给java发送信息,那么就要转为json格式进行通信
# 学生成绩管理系统 # 1.查看所有学生成绩 # 2.添加一个学生成绩,如果学员已存在,则不添加成绩,否则添加语文,数学,英语成绩 # 3 .如果学员已存在,则修改一个学生成绩 # 4。如果学员已存在,删除一个学生成绩 # 5.退出程序 # 写成函数版 students_dict = { 1001: { "name": "yuan", "scores": { "chinese": 100, "math": 89, "english": 100, } }, 1002: { "name": "rain", "scores": { "chinese": 100, "math": 100, "english": 100, } }, } while True: print('1.查看所有学生的成绩') print('2.添加一个学生的成绩') print('3.修改一个学生的成绩') print('4.删除一个学生的成绩') print('5.退出程序') content = input('请输入你的选项:') def select_student_scores(): """查看成绩""" for sid, value in students_dict.items(): print('学生姓名:%s,成绩:语文:%d,数学:%d,英语:%d' % ( value['name'], value['scores']['chinese'], value['scores']['math'], value['scores']['english'] )) def insert_student_scores(student_id,student_name,student_chinese, student_math,student_english): """添加成绩""" students_dict.setdefault(student_id,{ "name":student_name, 'scores':{ 'chinese':int(student_chinese), 'math':int(student_math), 'english':int(student_english) } }) def update_student_scores(student_id,student_chinese, student_math,student_english): """修改成绩""" dic = { 'chinese': int(student_chinese), 'math': int(student_math), 'english': int(student_english) } students_dict.get(student_id).update({'scores':dic}) def delete_student_scores(student_id): """删除成绩""" students_dict.pop(student_id) if content == '1': select_student_scores() elif content == '2': student_id = input('请输入学生的学号:') if student_id.isdigit(): student_id = int(student_id) if student_id in students_dict: print('该学员已存在,请勿重复添加!') else: student_name = input('请输入学生姓名:') student_chinese = input('请输入学生语文成绩:') student_math = input('请输入学生数学成绩:') student_english = input('请输入学生英语成绩:') insert_student_scores(student_id,student_name,student_chinese, student_math,student_english) elif content == '3': student_id = input('请输入学生的学号:') if student_id.isdigit(): student_id = int(student_id) if student_id in students_dict: student_chinese = input('请输入学生语文成绩:') student_math = input('请输入学生数学成绩:') student_english = input('请输入学生英语成绩:') update_student_scores(student_id,student_chinese, student_math,student_english) else: print('该学员不存在') else: print('输入错误,学号是纯数字') elif content == '4': student_id = input('请输入学生的学号:') if student_id.isdigit(): student_id = int(student_id) if student_id in students_dict: delete_student_scores(student_id) elif content == '5': print('退出学生成绩管理系统') break else: print('请输入1-5之间的数字')