2.25
上午
今日内容:for循环,基本数据类型相关操作(int,float,str,tuple,str,dict,set)
上节课回顾
赋值运算符
-
交叉赋值
x,y = y,x
-
链式赋值
c = b = a = 10
快捷键 光标在中间的时候
shift + enter
光标直接跳到下一行 -
解压赋值
x, y, *_ , z = [1,2,3,4,5,6]
*:没有对应上的值存成一个列表
逻辑运算
-
优先级:() > not > and > or
方法:先计算not,再把and两边紧连的条件用括号括起来,只剩下or,也就是顺序运算
-
短路运算
偷懒原则:and 和 or 会在确定计算结果的时候返回,
and 最终返回的值是当前运算的值
10 and 12
返回 120 and 11
返回0 -
可以当作条件使用的有三种
- 明确的布尔值:True,False
- 运算结果可以当作布尔值: == ,!= ,< ...
- 使用数据类型隐藏的布尔值
- 0,None,空 都表示False,其余都为True
- 了解:条件中 放 1 比 True 效率高,一点点
while循环
-
基本语法
while 条件: 子代码块 子代码块
-
死循环:永远不会结束的循环
i/o操作不会让计算机死机:执行一次后会有一点时间停顿
-
结束循环的方式
- break:立即终止本层循环
- 把条件改成假:进入下一次循环的时候判断条件为假,停止循环
-
while + continue
结束本次循环,直接进入下一次循环
continue后面的同级代码不会执行
-
while + else
else 的子代码块会在while 循环结束后,并且是在没有被break终止的情况下才会执行
新课
for 循环
针对循环取值操作,while循环并不擅长,于是python提供了一个专门循环取值操作:for 循环
students = ['deimos','aaa','bbb']
for x in students
print(x)
for 循环字典,默认取出来的是字典的key,要取value,要操作dic[x]
for 循环字符串,拆解,一个个取出每一个字符
for 循环的次数取决于对象的长度
总结
- 重复执行某段代码,通常使用 while 循环
- 针对循环取值操作,通常使用 for 循环
range()
生成一个数字列表,从0开始,顾头不够尾
range(5)
:从0开始,生成一个5个长度的列表 [0,1,2,3,4]
指定开头
range(1,5)
:从1 开始,到 5 为止生成一个要头不要尾的列表: [1,2,3,4]
指定步长
range(2,9,3)
:从1 开始,到 8 为止,以3为步长,生成一个要头不要尾的列表 :[2,5,8]
用range来模拟 for 循环次数
len()
统计列表,元组,字典,集合的长度
总结
while于for不同之处
- while通常用来循环执行代码,for通常用来取值
- while的循环次数取决于条件什么时候为假,for的循环次数取决于 in 后的数据类型所包含的值的个数
for 跟range() 连用:
- range用来产生一个数字序列,数字序列对应的是列表的索引,所以可以for + range() 可以按照索引编列列表,但是有更方便的
in
操作
for + break
同 while 循环中的 break,直接跳出当层循环
for + else
同 while 循环中的 else ,循环结束时,没有被break结束,才运行
for + continue
结束当次循环,进入下一次循环
基本数据类型的常用操作
数字类型:int,float
操作
- 比较运算:int 与 float 之间可以比较大小
- 数学运算:
+ - * /
int 和 float之间也可也进行数学运算- 不同的数据类型不能进行这些操作,除了int 与float (数字与列表,列表与字典......)
字符串:str
字符串是由多个字符按照次序组成的
操作
-
按索引取值
name = 'deimos' print(name[0]) # 输出 d
字符串只能取值,不能赋值
-
切片(步长,要头不要尾)
取出其中一段字符串,成为一个新字符串,并不会真的修改原字符串
只要有索引的数据类型都可以进行切片
使用冒号
起始索引:结束索引
name = 'deimos' print(name[1:3]) # 输出 eim
name[0:10:2]
:隔一步做切割,步长为2,跟range 类似如果
name[::]
:默认起始位置0,一直到结尾,步长为1 -
获取长度 len()
只要包含多个元素的,用
len()
获取对象长度 -
其他操作
-
.upper()
全部大写a = 'deimos' print(a.upper()) # 输出 DEIMOS
-
.lower()
全部小写 -
.find()
在字符串中查找指定字符串,返回字符串索引位置,找不到则返回-1
a = 'deimos' print(a.find('s')) # 输出 5
-
.index()
同上,找不到会报错 -
.count()
统计指定字符串出现的次数- find,count,index方法也适用于列表
-
下午
需求,判断input是否为空:
- 空的布尔值为False,判断
if not input
若input为空,则条件为真 - 输入字符串的长度
len(input) == 0
成员运算 in
判断一个字字符串是否存在一个大字符串中
'deimos' in 'deimoschen'
# 结果为True
not in:判断是否不在里面
移除字符串左右两侧的字符 strip
' adc '.strip() # 输出 abc
如果 strip()
中不放参数,则默认去除左右两侧空格,如果放人参数,则去掉相应的字符,参数可以指定多个。
程序从左出发,遇到第一个不属于要去除的参数,则停止;再从右边出发,遇到第一个不属于要去除的参数,停止
print('*-=<abc*/-?'.strip('*=/-?')) #输出 <abc
切分字符串 split
以某个分隔符(或字符串)为切分符号,把字符串切换成列表
用于有明确分割符号的字符串,如 'aaa,male,21,201632000112'
print('aaa,male,21,201632000112'.split(','))
# 输出 ['aaa', 'male', '21', '201632000112']
如果没有匹配的字符串,则把整个字符串作为列表中的一个元素,返回
列表 list
于字符串非常类似,不同点在于可以进行赋值
按照索引取值:list[0:4]
成员运算: in / not in
切片:从一个大列表中复制出一个字列表,要头不要尾
长度 :len()
追加 .append()
向列表的末尾添加一个元素
不能向不存在的索引赋值,要向列表里面加值,必须用 append
插入 .insert
往列表指定的位置之前插入一个值
l = ['aaa','bbb','ccc']
l.insert(1,'ddd')
# 得到 ['aaa','ddd','bbb','ccc']
万用删除 del
只要是可变的值,都可以用del进行操作
列表删除
.remove()
移除元素,必须指定删除的元素
l = ['aaa','bbb','ccc']
l.remove('aaa')
列表的remove操作返回 None
,不返回任何值
字典
用key可以存取值
dic = {'aaa':111,'bbb':222,'ccc':333}
对字典来说,key存在则修改对应的value ,key不存在则新添加一个 key:value
取值 :dic[key]
长度 len(dic)
返回键值的对数
成员运算
在用字典成员运算 in
时,判断的时key,不是value
删除操作 dic.pop
dic.pop(key)
指定元素进行删除,pop返回被删除元素的value
v
res = dic.pop('aaa')
print(res) # 输出结果为 111
获取键、值
dic.keys()
dic.values()
dic.items()
在python2中得到列表,相当于拿到一筐鸡蛋
在python3中不得到列表,相当于拿到一只能下单的鸡,是对于py2的优化,比py2节省空间。py3中可以用在 for 循环里使用
遍历字典的value
for k in dic.values():
print(k)
一步到位,循环字典里的key和value
dic = {'aaa':111,'bbb':222,'ccc':333}
for key,values in dic.items():
print(key,values)
输出结果
aaa 111
bbb 222
ccc 333