上集回顾

  • 数据类型内置方法简介
    所有的数据类型基本上都自带了一些操作以及通过点的方式调用自带的方法
  • 整型相关操作
    类型转换
    int()
    十进制转其他进制
    bin()
    oct()
    hex()
    其他进制转十进制
    int()
  • 浮点型相关操作
    类型转换
    float()
    python对数字不敏感
  • 字符串相关操作
    类型转换
    str()
    字符串必须要掌握的操作
    1.索引取值
    2.切片操作
    3.间隔、方向、步长
    4.统计字符串中字符的个数 len()
    5.移除字符串首尾指定的字符 strip()lstrip()左rstrip()右
    6.安装知道的字符切割字符串 split()rsplit()默认从左往右
    7字符串格式化输出 format() f‘{变量名}’
    字符串必须要了解的操作
    1.带小写相关
    upper() lower() isupper() islower()
    2.判断字符串中是否是纯数字
    isdigit()
    3.判断字符串的开头或者结尾
    startswith() endswith()
    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 = 'ZGL|123' # 一个用户数据
获取用户用户名和密码 将上述数据拆分校验用户信息是否正确 # 定义用户真实数据
data_source = 'ZGL|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.基于列表充当数据库完成zgl用户登录 # 多个用户数据
data_source = ['|123', 'kevin|321','oscar|222']
data_source = ['zgl|123', 'kevin|321', 'oscar|222']
# 1.先获取用户输入的用户名和密码
username = input('username>>>:').strip()
password = input('password>>>>:').strip()
# 2.循环获取列表中每一个真实数据
for data in data_source: # 'zgl|123' 'kevin|321'
real_name, real_pwd = data.split('|') # zgl 123
if username == real_name and password == real_pwd:
print('登录成功')
break
else:
print('用户名或密码错误') data_source = ['zgl|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.字典必须要掌握的操作
user_dict = {
'username': 'zgl',
'password': 123,
'hobby': ['read', 'music', 'run']
}
# 1.按k取值(不推荐使用)
print(user_dict['username']) # zgl
print(user_dict['phone']) # k不存在会直接报错
# 2.按内置方法get取值(推荐使用)
print(user_dict.get('username')) # zgl
print(user_dict.get('age')) # None
print(user_dict.get('username', '没有')) # zgl 键存在的情况下获取对应的值
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', 'zgl'), ('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() # 弹出键值对 后进先出

元组相关操作

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, 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)

字符编码理论

该知识点理论特别多 但是结论很少 代码使用也很短
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存储问题
英文还是采用一个字节 中文三个字节

字符编码实操

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

最新文章

  1. 如何在程序中给word文档加上标和下标
  2. TCP/IP详解系列 --- 概念总结02
  3. [Cocoa设计模式] 动态创建
  4. C#/net 使用Protocol Buffers入门
  5. 芯航线FPGA学习套件之4*4矩阵键盘模块测试手册
  6. windows bat 文件
  7. 练习-libev和pyev示例
  8. Ubuntu 12.04 安装搜狗输入法
  9. Android用户界面UI组件--AdapterView及其子类(三) ExpandableListView
  10. C++ Placement New
  11. LeetCode My Solution: Minimum Depth of Binary Tree
  12. 关于WIN32.EXE变态木马下载器的解决办法
  13. iOS tableViewCell plane格式下,接近section边缘不显示分割线却被复用解决办法
  14. shell脚本中$参数的介绍
  15. 第十四章:Python の Web开发基础(一) HTML与CSS
  16. Bootstrap3级联多选下拉框
  17. EntityFramework Core笔记:查询数据(3)
  18. spark rdd df dataset
  19. scrapy之基础概念与用法
  20. UE4 二维相关

热门文章

  1. 多态的好处和instanceof关键字
  2. Arm32进行远程调试
  3. python 上下文管理(with、contextmanager)
  4. 配置Webpack Dev Server 实战操作方法步骤
  5. 【原创】Python 二手车之家车辆档案数据爬虫
  6. Pulsar Summit Asia 2020 中文专场议题出炉!
  7. 拥挤的奶牛题解---队列优化DP---DD(XYX)​​​​​​​的博客
  8. 简易的AutoPlayCarousel 轮播控件
  9. Spring 源码学习笔记11——Spring事务
  10. KingbaseES 转义字符