python-9

内置函数

# 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之间的数字')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值