python进阶之路8 字典、元组、集合内置方法 编码理论
内容回顾
- 作业讲解 - 1.前期不熟练的情况下一定要先写注释
 2.一定要仔细思考每一行代码的含义
 3.自己不会的代码或者不熟练的代码一定要多敲多练
 - 数据类型内置方法简介- 所有的数据类型基本上都自带了一些操作以及通过点的方式调用自带的方法
 - 整型相关操作- 类型转换
 int()
 十进制转其他进制
 bin()
 oct()
 hex()
 其他进制转十进制
 int()
 
- 浮点型相关操作 - 类型转换
 float()
 """
 python对数字不敏感
 """
 
- 字符串相关操作 - 类型准换
 str()
 字符串必须要掌握的操作
 1.索引取值
 2.切片操作
 3.间隔、方向、步长
 4.统计字符串中字符的个数 len()
 5.移除字符串首尾指定的字符 strip() lstrip() rstrip()
 6.按照指定的字符切割字符串
 7.字符串格式化输出 format() f'{变量名}'
 字符串必须要了解的操作
 1.大小写相关
 upper() lower() isupper() islower()
 2.判断字符串中是否是纯数字
 isdigit()
 3.判断字符串的开头或者结尾
 startwith() endwith()
 4.统计字符串中字符出现的次数
 count()
 5.替换字符串中指定的字符
 replace()
 6.字符串拼接
 join() +
 7.索引相关操作
 index() find()
 8.补充操作
 title() swapcase()
 
- 列表相关操作 - 类型转换
 list()
 必须要掌握的操作
 1.索引取值
 2.切片操作
 3.间隔 方向 步长
 4.统计列表中数据值的个数 len()
 5.索引修改数据值 l1[0] = 值
 6.列表添加数据值 append() insert() extend() +
 7.列表删除数据值 del l1[0] remove() pop()
 8.排序 sort()
 9.翻转 reverse()
 10.统计列表中数据值出现的次数 count()
 
- 可变与不可变类型 - 可变类型
 值改变 内存地址不变
 不可变类型
 值改变 内存地址肯定变
 
内容概要
- 作业讲解
- 字典相关操作
- 元组相关操作
- 集合相关操作
- 字符编码(理论)
内容详细
作业讲解
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('很抱歉 暂时没有您想要执行的功能编号')
字典相关操作
1.类型转换
	dict()
    字典的转换一般不使用关键字  而是自己动手转
2.字典必须要掌握的操作
        # print(dict([('name','pwd'),('jason',123)]))  # {'name': 'pwd', 'jason': 123}
    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('age','没有呦  嘿嘿嘿'))  #  没有呦  嘿嘿嘿   键不存在的情况下第二个值
    # 3.修改值数据
    # user_dict['username'] = 'tony'
    # print(user_dict)   # {'username': 'tony', 'password': 123, 'hobby': ['read', 'music', 'run']}
    # print(id(user_dict))
    # print(user_dict)
    # 4.新增键值对
    # user_dict['age'] = 18  # 键不存在则新增键值对
    # print(user_dict)
    # 5.删除数据
    # del user_dict['username']
    # print(user_dict)   # {'password': 123, 'hobby': ['read', 'music', 'run']}
    # res = user_dict.pop('password')
    # print(user_dict)  # {'username': 'jason', 'hobby': ['read', 'music', 'run']}
    # 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 k,v in user_dict.items():
    #     print(k,v)
    # username jason
    # password 123
    # hobby ['read', 'music', 'run']
    # 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)   # {'name': ['jason', 123, 'study'], 'pwd': ['jason', 123, 'study'], 'hobby': ['jason', 123, 'study']}
    '''
    当第二个公共值是可变类型 的时候一定要注意 通过任何一个键修改都会影响所有
    '''
    # user_dict.setdefault('username','tony')
    # print(user_dict)  # 键存在则不修改 结果是键对应的值
    # res = user_dict.setdefault('age',123)
    # print(user_dict,res)  # 键不存在则新增键值对结果是新增的值
    # user_dict.popitem()  # 弹出键值对   后进先出
    # print(user_dict)
元组相关操作
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.元组不能新增或删除数据

集合相关操作
1.类型转换
	set()
   集合内数据必须是不可变类型(整型 浮点型 字符串 元组)
	集合内数据也是无序的 没有索引的概念
2.集合需要掌握的方法
	去重
	关系运算
ps:只有遇到上述两种需求的时候才应该考虑使用集合
3.去重
	s1 = {11,22,33,4,4,55,5,566,7,44,4,4,44,4,4,}
	print(s1)
	 l1 = [11,22,33,22,33,22,11,11,22,33,22,22,11,11]
    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)  # {'oscar', 'jerry'}
    # # 3.求两个人所有的好友
    # print(f1 | f2)   # {'tony', 'oscar', 'tom', 'jerry', 'jason', 'jack'}
    # 4. 求两个人各自独有的好友
    # print(f1 ^ f2)  # {'oscar', 'tom', 'jerry', 'jack'}
    # 5.父集 子集
    # print(f1 > f2)  # False
    # print(f2 < f1)  # False
字符编码理论
该知识点理论特别多 但是结论很少 代码使用也很短
1.字符编码只针对文本数据
2.会议计算机内部存储数据的本质
3.既然计算机内部只认识01 为什么我们却可以敲出人类各式各样的字符
	肯定存在一个数字跟字符的对应关系 存储该关系的地方称为>>>:字符编码本
4.字符编码发展史
	4.1一家独大
    	计算机是由美国人发明的,为了能够让计算机识别英文
       需要发明一个数字跟英文字母的对应关系
    	ASCII码:记录了英文字母跟数字的对应关系
           用8bit(字节)来表示一个英文字符
   	4.2群雄割据
    中国人
    GBK码:记录了英文、中文与数字的对应关系
       用至少16bit(2字节)来表示一个中文字符
    		很多生僻字还需要使用更多的字节
     英文还是用8bit(1字节)来表示
    日本人
    	shift_JIS码:记录了英文、日文与数字的对应关系
     韩国人
    	Euc_kr码:记录了英文、韩文与数字的对应关系
"""
每个国家的计算机使用的都是字节定制的编码本
	不同的国家的文本数据无法直接交互 会出现"乱码"
"""
	4.3天下一统
     unicode 万国码
        兼容所有国家语言字符
        起步就是两个字节来表示字符
	utf系列 :utf8 utf16 ...
        专门用于优化unicode存储问题
        英文还采用一个字节  中文三个字节
字符编码实操
1.针对乱码不要慌 切换编码慢慢试即可
2.编码与解码
	编码:将人类的字符按照指定的编码编码成计算机能够读懂的数据
  		字符串.encode()
   	解码: 将计算机能够读懂的数据按照指定的编码编码成人能够读懂
        bytes类型数据.decode()
3.python2与python3差异
	python2默认的编码ASCII
    	1.文件头
        # encoding:utf8
       2.字符串前面加u
    		u'你好啊'
   python3默认的编码是utf系列(unicode)
python进阶之路8 字典、元组、集合内置方法 编码理论的更多相关文章
- python之字符串,列表,字典,元组,集合内置方法总结
		目录 数字类型的内置方法 整型/浮点型 字符串类型的内置方法 列表的内置方法 字典的内置方法 元组的内置方法 集合类型内置方法 布尔类型 数据类型总结 数字类型的内置方法 整型/浮点型 加 + 减 - ... 
- 元组/字典/集合内置方法+简单哈希表(day07整理)
		目录 二十三.元组内置方法 二十四.字典数据类型 二十五 集合内置方法 二十五.数据类型总结 二十六.深浅拷贝 补充:散列表(哈希表) 二十三.元组内置方法 什么是元组:只可取,不可更改的列表 作用: ... 
- Python基础部分:10、数据类型的内置方法和字符编码
		目录 一.数据类型内置方法 1.字典dict内置方法 1.1.类型转换 2.字典必须要掌握的方法 2.1.取值方式 2.2.修改内部数据值 2.3.删除数据 2.4.统计字典中键值对个数 2.5.字典 ... 
- python 入门基础21  --面向对象_多态、内置方法、反射
		内容: 1.接口思想 2.抽象类思想 3.多态 4.内置方法 5.反射 1.接口思想 建立关联的桥梁,方便管理代码 接口类:用来定义功能的类,位继承它的子类提供功能 该类的功能方法一般不需要实现体,实 ... 
- python day21 ——面向对像-反射 getattr,内置方法
		一.反射:用字符串数据类型的变量名来访问这个变量的值 上代码^_^ # class Student: # ROLE = 'STUDENT' # @classmethod # def check_cou ... 
- Python面向对象 --- 类的设计和常见的内置方法
		面向对象:一种基于面向过程的新的编程思想.也就是说面向对象是将功能等通过对象来实现,将功能封装进对象之中,让对象去实现具体的细节:这种思想是将数据作为第一位,而方法或者说是算法作为其次,这是对数据一种 ... 
- 小白基础Python重要的字符串详解String的内置方法
		String的内置方法: st='hello world {name} is {age}' {} 特殊内容需要识别format print(st.count('1')) 统计元素个数 print ... 
- python字典操作和内置方法
		一 字典基本介绍 python中只有字典是映射结构,通过key取值,并且key是不可变数据类型,而value可以是任意数据类型. 字典通过一个花括号,里面存放key:value的数据结构来定义.理论上 ... 
- python中的集合内置方法小结
		#!/usr/local/bin/python3 # -*- coding:utf-8 -*- #集合性质:需要传入一个list,且不含重复的元素,无序 list_1=[1,2,1,4,5,8,3,4 ... 
- 列表&元组的内置方法
		标红为元组可以使用 
随机推荐
- 创建SpringMVC工程
			引入依赖 <dependencies> <!-- SpringMVC --> <dependency> <groupId>org.springframe ... 
- lombok下载和安装
			lombok是什么 第三方的组件:使用注解来简化类的编写,注解替换set/get/构造 注解: @setter @getter @NoArgsConstructor @AllArgsConstruct ... 
- 作用域通信对象:session用户在登录时通过`void setAttribute(String name,Object value)`方法设置用户名和密码。点击登录按钮后,跳转到另外一个页面显示用户
			作用域通信对象:session session对象基于会话,不同用户拥有不同的会话.同一个用户共享session对象的所有属性.作用域开始客户连接到应用程序的某个页面,结束与服务器断开连接.sessi ... 
- sql语法巧用之not取反
			数据库的重要性和通用性都不用说了,什么sql的通用性,sql优化之类的也不必说了,咱们今天来聊聊另一个有意思的话题:如何取一个筛选的反面案例. 1. 举几个正反案例的例子 为了让大家理解我们的假设场景 ... 
- 一篇文章带你了解NoSql数据库——Redis简单入门
			一篇文章带你了解NoSql数据库--Redis简单入门 Redis是一个基于内存的key-value结构数据库 我们会利用其内存存储速度快,读写性能高的特点去完成企业中的一些热门数据的储存信息 在本篇 ... 
- DelCrLfSpace V0.9
			开发界面 Option Explicit 'SourceTextBox 是上面的源框 'ResultTextBox 是下面的处理预览框 'Form KeyPreview = True Private ... 
- mybatis-获取参数值的方式
			MyBatis获取参数值的两种方式(重点) MyBatis获取参数值的两种方式:${}和#{} ${}的本质就是字符串拼接,#{}的本质就是占位符赋值 ${}使用字符串拼接的方式拼接sql,若为字符串 ... 
- ubuntu 安装anaconda3
			ubuntu 安装anaconda3 官网:https://www.anaconda.com/ 下载:https://www.anaconda.com/products/individual#Down ... 
- 从BeanFactory源码看Bean的生命周期
			下图是我搜索"Spring Bean生命周期"找到的图片,来自文章--Spring Bean的生命周期 下面,我们从AbstractAutowireCapableBeanFacto ... 
- webpack4--按需加载
			在做单页面应用的过程中,通常利用webpack打包文件,将依赖的外部问价单独打一个vendor.js.这样就会有个问题,这个文件会随着你引用的包的增多,体积会越来越大.在路由中利用import 引用文 ... 
