字典、元祖、集合字符编码、相关操作

今日内容概要

  • 1、作业讲解

  • 2、字典相关操作

  • 3、元祖相关操作

  • 4、集合相关操作

  • 5、字符编码(理论)

今日内容详细

1、作业讲解

1.基于字符串充当数据库完成用户登录(基础练习)
   data_source = 'jason|123'  # 一个用户数据
   获取用户用户名和密码 将上述数据拆分校验用户信息是否正确
    # 定义用户真实数据
    data_source = 'jason|123'
    # 1.获取用户名和密码
    username = input('username>>>:').strip()
    password = input('password>>>>:').strip()
    # 2.切割字符串 获取真实用户名和密码
    real_name, real_pwd = data_source.split('|')
    # 3.校验用户名和密码是否正确
    if username == real_name and password == real_pwd:
        print('登录成功')
    else:
        print('用户名或密码错误')
        
        
        
2.基于列表充当数据库完成用户登录(拔高练习)  # 多个用户数据
   data_source = ['jason|123', 'kevin|321','oscar|222']
	data_source = ['jason|123', 'kevin|321', 'oscar|222']
    # 1.先获取用户输入的用户名和密码
    username = input('username>>>:').strip()
    password = input('password>>>>:').strip()
    # 2.循环获取列表中每一个真实数据
    for data in data_source:  # 'jason|123'   'kevin|321'
        real_name, real_pwd = data.split('|')  # jason  123
        if username == real_name and password == real_pwd:
            print('登录成功')
            break
    else:
        print('用户名或密码错误')
    
    data_source = ['jason|123', 'kevin|321', 'oscar|222']
    username = input('username>>>:').strip()
    password = input('password>>>:').strip()
    user_data = f'{username}|{password}'  # username + '|' + password
    if user_data in data_source:
        print('登录成功')
    else:
        print('用户名或密码错误')

3.利用列表编写一个员工姓名管理系统
    输入1执行添加用户名功能
    输入2执行查看所有用户名功能
    输入3执行删除指定用户名功能
    '''分析 用户输入的不同 可以执行不同的代码'''
    ps: 思考如何让程序循环起来并且可以根据不同指令执行不同操作
    提示: 循环结构 + 分支结构
 		  # 1.先定义一个专门存储用户名的列表
        data_list = []
        # 2.添加循环结构
        while True:
            # 3.先打印项目功能 供用户选择
            print("""
            1.添加用户
            2.查看用户
            3.删除用户    
            """)
            # 4.获取用户想要执行的功能编号
            choice_num = input('请输入您想要执行的功能编号>>>:').strip()
            # 5.根据不同的功能编号执行不同的分支代码
            if choice_num == '1':
                # 6.获取用户输入的用户名
                username = input('请输入您的用户名>>>:').strip()
                # 7.判断当前用户名是否已存在
                if username in data_list:
                    print('用户名已存在')
                else:
                    # 8.列表添加用户名
                    data_list.append(username)
                    print(f'用户名{username}添加成功')
            elif choice_num == '2':
                # 9.循环打印每一个用户数据
                for name in data_list:
                    print(
                    f"""
                    ------------user info---------
                    用户名:{name}
                    ------------------------------
                    """)
            elif choice_num == '3':
                # 10.获取用户想要删除的用户名
                delete_username = input('请输入您想要删除的用户名>>>:').strip()
                # 11.先判断用户名是否存在
                if delete_username in data_list:
                    data_list.remove(delete_username)
                    print(f'用户名{delete_username}删除成功')
                else:
                    print('你个傻帽 用户名不存在 删毛线啊!!!')
            else:
                print('很抱歉 暂时没有您想要执行的功能编号')

2、字典相关操作

1.类型转换
	dict()
	字典的转换一般不使用关键字 而是自己动手转
2.字典必须要掌握的操作
	user_dict = {
    'username': 'jason',
    'password': 123,
    'hobby': ['read', 'music', 'run']
    }
    # 1.按k取值(不推荐使用)
    # print(user_dict['username'])  # jason
    # print(user_dict['phone'])  # k不存在会直接报错
    # 2.按内置方法get取值(推荐使用)
    # print(user_dict.get('username'))  # jason
    # print(user_dict.get('age'))  # None
    # print(user_dict.get('username', '没有哟 嘿嘿嘿'))  # jason   键存在的情况下获取对应的值
    # print(user_dict.get('phone', '没有哟 嘿嘿嘿'))  # 键不存在默认返回None 可以通过第二个参数自定义
    # 3.修改值数据
    # print(id(user_dict))
    # user_dict['username'] = 'tony'  # 键存在则修改对应的值
    # print(id(user_dict))
    # print(user_dict)
    # 4.新增键值对
    # user_dict['age'] = 18  # 键不存在则新增键值对
    # print(user_dict)
    # 5.删除数据
    # del user_dict['username']
    # print(user_dict)
    # res = user_dict.pop('password')
    # print(user_dict)
    # print(res)  # 123
    # 6.统计字典中键值对的个数
    # print(len(user_dict))  # 3
    # 7.字典三剑客
    # print(user_dict.keys())  # 一次性获取字典所有的键 dict_keys(['username', 'password', 'hobby'])
    # print(user_dict.values())  # 一次性获取字典所有的值 dict_values(['jason', 123, ['read', 'music', 'run']])
    # print(user_dict.items())  # 一次性获取字典的键值对数据  dict_items([('username', 'jason'), ('password', 123), ('hobby', ['read', 'music', 'run'])])
    # for i in user_dict.items():
    #     k, v = i
    #     print(k, v)
    # 8.补充说明
    # print(dict.fromkeys(['name', 'pwd', 'hobby'], 123))  # 快速生成值相同的字典
    # res = dict.fromkeys(['name', 'pwd', 'hobby'], [])
    # print(res)  # {'name': [], 'pwd': [], 'hobby': []}
    # res['name'].append('jason')
    # res['pwd'].append(123)
    # res['hobby'].append('study')
    # print(res)
    '''当第二个公共值是可变类型的时候 一定要注意 通过任何一个键修改都会影响所有'''
    # res = user_dict.setdefault('username','tony')
    # print(user_dict, res)  # 键存在则不修改 结果是键对应的值
    # res = user_dict.setdefault('age',123)
    # print(user_dict, res)  # 存不存在则新增键值对 结果是新增的值
    user_dict.popitem()  # 弹出键值对 后进先出

3、元祖相关操作

1.类型转换
	tuple()
 	ps:支持for循环的数据类型都可以转成元组
2.元组必须掌握的方法
	 t1 = (11, 22, 33, 44, 55, 66)
    # 1.索引取值
    # 2.切片操作
    # 3.间隔、方向
    # 4.统计元组内数据值的个数
    # print(len(t1))  # 6
    # 5.统计元组内某个数据值出现的次数
    # print(t1.count(11))
    # 6.统计元组内指定数据值的索引值
    # print(t1.index(22))
    # 7.元组内如果只有一个数据值那么逗号不能少
    # 8.元组内索引绑定的内存地址不能被修改(注意区分 可变与不可变)
    # 9.元组不能新增或删除数据

4、集合相关操作

1.类型转换
	set()
	集合内数据必须是不可变类型(整型 浮点型 字符串 元组)
 	集合内数据也是无序的 没有索引的概念
2.集合需要掌握的方法
	去重
 	关系运算
	ps:只有遇到上述两种需求的时候才应该考虑使用集合
3.去重
	 s1 = {11, 22, 11, 22, 22, 11, 222, 11, 22, 33, 22}
 	 l1 = [11, 22, 33, 22, 11, 22, 33, 22, 11, 22, 33, 22]
    s1 = set(l1)
    l1 = list(s1)
    print(l1)
 	'''集合的去重无法保留原先数据的排列顺序'''
4.关系运算
	群体之间做差异化校验
 	eg: 两个微信账户之间 有不同的好友 有相同的好友
 	 f1 = {'jason', 'tony', 'jerry', 'oscar'}  # 用户1的好友列表
    f2 = {'jack', 'jason', 'tom', 'tony'}  # 用户2的好友列表
    # 1.求两个人的共同好友
    # print(f1 & f2)  # {'jason', 'tony'}
    # 2.求用户1独有的好友
    # print(f1 - f2)  # {'jerry', 'oscar'}
    # 3.求两个人所有的好友
    # print(f1 | f2)  # {'jason', 'jack', 'tom', 'tony', 'oscar', 'jerry'}
    # 4.求两个人各自独有的好友
    # print(f1 ^ f2)  # {'oscar', 'tom', 'jack', 'jerry'}
    # 5.父集 子集
    print(f1 > f2)
    print(f1 < f2)

5、字符编码理论

该知识点理论特别多 但是结论很少 代码使用也很短
1.字符编码只针对文本数据
2.回忆计算机内部存储数据的本质
3.既然计算机内部只认识01 为什么我们却可以敲出人类各式各样的字符
	肯定存在一个数字跟字符的对应关系 存储该关系的地方称为>>>:字符编码本
4.字符编码发展史
	4.1.一家独大
    	计算机是由美国人发明的 为了能够让计算机识别英文
    	需要发明一个数字跟英文字母的对应关系
		ASCII码:记录了英文字母跟数字的对应关系
        	用8bit(1字节)来表示一个英文字符
            
 	4.2.群雄割据
    	中国人
        GBK码:记录了英文、中文与数字的对应关系
       	 	用至少16bit(2字节)来表示一个中文字符
            	很多生僻字还需要使用更多的字节
           英文还是用8bit(1字节)来表示
       日本人
    	  shift_JIS码:记录了英文、日文与数字的对应关系
    	韩国人
         Euc_kr码:记录了英文、韩文与数字的对应关系
  		"""
  		每个国家的计算机使用的都是自己定制的编码本		
  			不同国家的文本数据无法直接交互 会出现"乱码"
  		"""
  	4.3.天下一统
    	unicode万国码
        	 兼容所有国家语言字符
  			  起步就是两个字节来表示字符 
  		utf系列:utf8 utf16 ...
            专门用于优化unocide存储问题
            英文还是采用一个字节 中文三个字节

6、字符编码实操

1.针对乱码不要慌 切换编码慢慢试即可
2.编码与解码
	编码:将人类的字符按照指定的编码编码成计算机能够读懂的数据
        字符串.encode()
 	解码:将计算机能够读懂的数据按照指定的编码解码成人能够读懂
        bytes类型数据.decode()
3.python2与python3差异
	python2默认的编码是ASCII
		1.文件头
        	# encoding:utf8
    	2.字符串前面加u
        	u'你好啊'
 	python3默认的编码是utf系列(unicode)

7、作业

posted @ 2022-09-30 17:19  虾仁猪心排骨汤  阅读(68)  评论(0编辑  收藏  举报