周内容回顾
基本数据类型
| 数据名 |
特点/用法/定义 |
代码形式 |
| 整型int |
表达整数形式的数据 |
age=19 |
| 浮点型float |
值带有小数数据的数据 |
height=1.80 |
| 字符串str |
使用引号引起来的文本 |
name=‘xiaochen’ |
| 字典dict |
能够准确的表达数据的含义 使用k v键值对 |
dict= |
| 列表list |
能偶储存多种数据类型 使用中括号括起来 数据与数据之间使用逗号隔开 |
list=[‘aaa’,’‘bbb’] |
| 布尔值bool |
判断事物是否正确 |
0 None '' [] {} 以上都是false其他均为true |
| 元组tuple |
可以储存多种数据类型 使用小括号括起来 数据与数据之间使用逗号隔开 |
t1 = (11, 22, 'xiaochen') |
| 集合set |
使用大括号括起来 内部可以储存多种数据类型 数据与数据之间逗号隔开 |
s1 = |
与用户交互
1.使用 input 获取用户输入
eg:name = input('请输入你的姓名>>>:')
#获取到的用户数据均会处理成字符串
2.print自带换行符
换行符有: \n \r\n
3.结束换行符
print(数据,end="默认是\n")
格式化输出
1.使用占位符
占位符有:%s %d
info = '%s你好'
print('info % 'xiaochen'') # xiaochen你好
需要注意的是在使用多个占位符时需要等同与占位符数量的数据值
%s 与 %d 的区别在于 %d 只支持数据类型
2.字符串的格式化输出(推荐使用)
运算符的写法
1.常见的运算符
+ - * /
% #除剩的余数
// #整除
** #幂
2.简化写法
n +=1 # n = n+1
n **=1 # n = n**1
常用赋值符
1.链式赋值
name = 'xiaochen'
name1 = name
name = name1 = 'xiaochen'
2.交叉赋值
方式一 中间赋值法
t = m
n = 1
m = 2
m = n
n = t
方式二 一步到位
n,m=m,n
3.解压赋值
name = ['tt','jj','cc']
name1,name2,name3 = name
要准备和数据值个数相等的变量名
#不准备使用的数据可使用下划线来代替
a,_,b = name
#解压多个数据值时可用*来接收多余的数据
a,*b = name
print(b) # ['jj','cc']
逻辑运算符
1.and
and 用于连接多个条件 如果一个条件不成立则所有条件为false
2.or
or 连接的条件只要有一个成立 则其余条件全为true
3.not
否定条件的结果若为true 则会变成false
'''
三者的混合使用有优先级之分
not > and > or
可以使用括号来确定优先级 (先看括号里的)
'''
成员运算符
判断个体是否在群体中
in
not in
n = ['1','2','3']
print('1' in n) # true
'''
1.字符串的最小单位是单个字符(包括空格)
2.列表中的最小单位是数据值
3.字典在参与成员运算的时候只有键的参加
'''
身份运算符
== 用于判断数值是否相等
is 用于判断内存地址是否相等
使用 id 可查看数据的内存地址
l1 = ('1')
print(id l1) # 所得到的数字就是数据存储的内存地址
小整数池
在数据值比较少 数据会将数据存到一个地址
'''
值相等 内存地址不一定相等
内存地址相等 值一定相等
'''
垃圾回收机制
1.引用计数
当数据值所被引用的次数为0时 系统将自动清除此类数据
# 存在循环引用
2.标记清除
主要针对循环引用问题
当内存占用到临界值时 系统会停止运行 扫描所有数据并给所有的循环使用的数据打上标记一起清除
3.分代回收
垃圾的回收机制频繁的运行会损耗各项资源
为节省资源 数据的使用频率会被归纳
新生代 青春代 老年代 (越往下的数据使用频率越高 检测频率越低)
流程循环结构
从上至下的运行代码
1.if 分支
if 条件满足就会开始执行 if下的子代码
2.if else 分支
else 当 if 的条件不满足时就会执行 else下的子代码
3.if elif else 分支
当 if 条件不满足时则会判断是否满足 elif后的条件如果都不满足则会执行 else的子代码
# if elif 和else 三个只能执行其中之一 不存在三个同时执行
1.while 循环
先判断条件是否成立
成立则会执行循环体代码
按照循环会一直执行直到条件不满足为止
# 两个特殊指令
break 可直接结束本次的循环
continue 可结束本次循环 直接进行下一次的循环
# while 与 else的连用
while
条件满足后执行循环体代码
else
当循环体代码没有被强制结束 结束完循环体代码后就会执行else下的子代码
# 死循环
死循环的执行会使cpu功耗急剧上升 直到采取保护措施
尽量不要让cpu长时间的进行运算
# 循环嵌套位
当在我们编写代码时 可能会需要写到多个 break
为了更加方便我们的编写 可以将多段代码视为一个整体
2.for 循环
for 循环的特点:
可以遍历取值
当遍历完则会自动结束
常见的遍历的数据类型有 (字符串,列表,字典,元组,集合,)
# 字符串的遍历只有单个字符
# 字典的遍历只有键
for 变量名 in 待遍历的数据:
for 循环体代码
else:
for循环体代码没有被break强制结束所执行
# for循环依然可以用break和continue用法与while循环一致
range的用法
可以理解为产生一个内部含有多个数字的数据
for i range(100) # 默认从0 到 99
for i range(0,100) # 第一个为起始位置 第二个为终止位置
for i range(0,100,2) # 第三个为等差的公差(步长)默认为1
数据类型的内置方法
1.类型转换
int(其他数据类型)
# 浮点型可以直接转 字符串必须是纯数字才行
2.进制数的转化
十进制的转换
print(bin(100)) #0b1100100 二进制
print(oct(100)) #0o144 八进制
print(hex(100)) #0x64 十六进制
其他机制数转变为十进制
print(int(0b1100100))
print(int("0b1100100", 2)) # 需要加上进制数来提供识别
3.python对数字并不敏感(精确度低)
1.类型转换
float(其他数据类型)
字符串的数据只能有一个小数点,其他必须是纯数字
1.类型转换
str(加上数据类型) # 任意数据类型加上引号都行
2.必须掌握的方法
# 索引取值(从0开始 超出范围报错 支持使用负数)
# 切片操作
print(l1[1:5]) # 从1至5 从左至右
print(l1[1:5:2]) # 间隔取值 默认为1
print(l1[:]) # 不写数字就全要
print(l1[2:]) # 从2开始后面全要
print(l1[:5]) # 从0开始到5
# 统计字符串的个数
print(len(l1)) # 空格也会被计算到个数中
# 移除字符串首尾指定的字符
print(l1.strip()) # 不写就是去除空格
# 切割字符串中指定的字符
res = jason|19|1.80
print(res.strip('|')) # 所得到的数据类型为一个列表
print(res.strip('|',maxstrip=1)) # 最大的切割数 .rstrip可以从右往左
# 字符串的格式输出
format玩法1
rex = my name is {}.format('xiaochen')
format玩法2
可以被所引反复使用
rex = my name is {0} my age is {0}{1}.format('xiaochen',19)
format玩法3 '''实用性较高'''
name = input('请输入你的姓名>>>')
age = input('请输入你的年龄>>>')
res = f'my name is {name} my age is {age}'
# 大小写相关
.upper() # 全转为大写
.lower() # 全转为小写
# 判断字符串中是否为纯数字
.isdight()
# 替换字符串中的指定内容
.replace('待替换的','替换的内容','替换的个数 默认全部')
# 字符串的拼接
print(字符串1+字段串2)
print(字符串1*数量)
print('|'.join(['jj','bb'])) # 拼接的必须是字符串
# 判断字符串的指定字符出现的次数
.count('')
# 判断字符串的开头和结尾
.startswich('内容')
.endswich('内容')
# 其他用法补充
.title() # 将所有的开头大写
.capitalize() # 只将第一个开头大写
.swapcase() # 反转大小写
.index()
.find()
'''
两个都是查找,但是find找不到会返回内容 内容可以被定义 index查找未找到会直接报错
'''
1.类型转换
list(数据类型)
可被for循环的数据类型均可转换为列表
2.需要掌握的方法
# 索引取值
# 切片操作 (与字符串一致)
# 间隔 方向(与字符串一致)
# 统计列表中数据值的个数
.len()
# 数据值的修改
l1[1]=数据值
# 列表添加数据值
方式一
.append() 在列表的末端加入
方式二
.insert(插入位置,'插入的数据值')
方式三
列表一.expand(列表二) # for 循环加append
# 删除列表数据
方式一
del 数据[所需删除数据的索引值]
方式二
列表.remove(数据名)
方式三
.pop() # 默认弹出尾部数据值
弹出不是删除 弹出的数据可被承接
# 排序
.sort() # 默认是升序
.sort(reverse=ture) # 改为降序
# 统计数据出现次数
.count()
# 颠倒列表的顺序
.reverse()
1.类型转换
dict(数据类型)
但字典的数据类型转换一般手打
2.必须会的操作
# 按k取值 (不推荐使用)
# 按内置方法取值get取值 (推荐使用)
k 与 get的区别在于 如果k不存在会报错 但get不会报错 默认返回none可自定义
# 修改数据值
字典名[键]=修改的数据内容(如果键存在则会修改)
# 新增键值对
字典名[键]=数据值(键不存在直接添加)
# 删除数据
del pop
# 统计字典的键的个数
.len
# 字典三剑客
.key() 获取所有键
.values() 获取所有的值
.items() 获取所有键与值
# 补充
print(kk(['name','age'],[])) 可获得数据值相同的字典
1.类型转换
tuple(数据类型)
支持for循环的数据类型均可
2.元组必须会的操作
# 索引取值
# 切片操作
# 间隔 方向
# 统计元组内数据值的个数
# 统计元组内某一数据出现的次数
.count()
# 统计元组内指定数据的索引值
.index
# 元组内如果只有一个数据值时逗号不可被省略
# 元组内所绑定的数据值无法修改内存地址
# 元组内不可添加和删除数据
1.类型转换
set(数据类型)
集合必须是不可变类型
集合是无序的
2.集合主要作用
去重
关系运算
# 去重
集合内元素是唯一的所以会自动去重
# 关系运算
& 两个集合共同的
a-b a中特有
a^b ab中特有的
a|b ab集合的所有元素
可变类型与不可变类型
1.可变类型
值修改 但内存地址不变
集合 字典 布尔值 列表
2.不可变类型
值修改 内存地址也会变
整型 浮点型 字符串 元组
字符编码论
计算机只能识别二进制
通过字符编码将我们的语言来转化为二进制让计算机了解
# 编码与解码
编码:将人类的字符转变为二进制的过程
字符串.encode()
解码:将计算机能够读懂的数据按照指定的编码解码成人类能看懂的语言
bytes类型数据.decode()