3.10
今日内容
- 循环之for循环
- 基本使用
- 循环套用
- break
- continue
- else
- 基本数据类型及内置方法
- 数字
- 字符串
- 列表
- 总结
- 存几个值
- 有序/无序
- 可变/不可变
昨日回顾
-
浅拷贝:只拷贝列表的第一层内存地址,不加区分。拷贝得到的新列表,无论读或写都关联在一起
-
深拷贝:列表中可能还嵌套列表,把所有的列表进行拷贝。区分可变类型/不可变类型,对不可变类型直接取原内存地址,对可变类型创造新地址。在读层面上仍在一起,在改操作上完全独立开
-
流程控制 while循环 :案例,登陆接口
break,continue下面的同级代码不会执行
正课
for循环
为何要有for循环:理论上for循环能做的事情,while循环都可以做,之所以要有for循环,是因为for循环在循环取值(遍历)上比while更简洁
语法:
for 变量名 in 可迭代对象:
代码1
代码2
可迭代对象:列表,字典,字符串,元组,集合,可循环取值,range
使用案例
-
案例1 列表循环取值
for x in ['a','b',111]: print(x)
从列表中一个个取出值,直到取到最后一个值结束,循环次数取决于迭代对象的长度
-
案例2 字典循环取值
dic = {'k1':111,'k2':222,'k3':333} for x in dic: print(x,dic[x]) # 默认取出字典的 key,再利用dic[x] 取出value
-
案例3 字符串循环取值
msg = 'deimos' for x in msg: print(x) # 把字符串中每一个字符赋值给x,依次输出每一个字符
-
break,else,continue的使用与while循环一模一样
while与for的异同
- 都是循环,for可以干的事情,while也可以干
- while循环多少次取决于条件,for循环多少次取决于可迭代对象的长度
- for相当于while循环使用count做条件
- 终止for循环只有break一种方式
for循环嵌套
外层循环循环一次,需要内层循环全部执行完毕
-
打印九九乘法表
for i in range(1,10): for j in range(1,10): print(f'{i}*{j}={i*j}')
range()
需求:不用for来循环取值,只用for来让一段代码循环几次
使用range() 函数来创造一个可迭代对象
range(start,end,step)
#默认步长为1,起始点为0,要头不要尾
使用规则:
-
range(3):[0,1,2]
print(list(range(0,3))) # 输出[0, 1, 2],从0开始,不输出3
-
如果步长大于元素个数,则只输出第一个元素
print(list(range(0,3,5))) # 输出[0]
-
如果只输入一个参数,默认为end,两个参数,默认为start,end;输入三个参数,为start,end,step
print(list(range(5,0))) # 5为start,0为end,输出空列表 []
-
步长可以取 -1
-
len(list)
函数,返回列表的长度
python3与python2中的range
- python3:能下鸡蛋的鸡:在内存中只占一个内存地址
- python2:一筐鸡蛋:在内存中真的产生一个带有值的列表
print的一些方法
print(str,str)
用逗号分隔多个变量,输出的时候用一个空格分开end = ''
以什么字符结尾,默认以换行符结尾,填空字符串代表不用任何字符结尾
基本数据类型
int整型
-
定义:age = 10 背后实际上是 age = int(10)
变量 = 名字(参数)
触发一个功能的运行,会返回一个值,可以使用一个变量接着这个返回值,即将返回值赋值给变量
可能有返回值,也可能没有返回值:int() 功能返回一个整型,print() 功能没有返回值
-
类型转化
int()
对于纯数字的字符串,可以将其转换为int类型十进制,二进制。。。十六进制:
- 十六进制中 10,11,12,13,14,15分别用a,b,c,d,e,f表示
- 转换方法
python提供的进制转换功能(了解)
-
bin(int)
10转2进制0b
开头代表二进制 -
oct()
10转8进制0o
代表八进制 -
hex()
10转16进制0xb
表示16进制 -
int('特殊进制数字',2)
,将二进制转为10进制
-
使用
整型和浮点型没有内置方法
float浮点型
-
定义:salary = 1.1 ==> salary = float(1.1)
-
类型转换:float
sala = 10 print(float(sala)) # 输出 10.0
-
python中还可以表示复数(complex)
str字符串类型
-
定义:name = ’deimos’,调用 str() 功能
-
类型转换:
str(...)
把任意类型转成字符串 -
使用方法
-
按索引取值
str[index]
python对于有序的类型都有索引的概念
正向,索引从0开始,负向取从-1开始1
只能读,不能改:str是不可变类型
-
切片:
str[start:end:step]
从一个大字符串中拷贝出一个子字符串:原字符串没改(不可变)
使用规则:要头不要尾,步长
name = 'deimos_chen' res = name[0:8:2] #从0号索引开始:d,步长为2,取到第8号索引前面 print(res) #输出 dio_
步长可以取负数,表示从后往前取值,要配合起点索引>终点索引来使用
name = 'deimos_chen' res = name[10:0:-2] print(res) #输出 nh_oi
如果不填参数
str[::] #默认从起点取到终点,步长为1
-
成员运算 in / not in
判断一个字字符串是否存在一个大字符串中
-
移除指定字符串左右两侧字符 strip()
字符串不可变,所以不会改变原str,而是产生一个新的str
-
不传入参数,则默认去除两侧空格
-
传入str,则去除左右两侧特定的字符
从str左边出发,依次比对其与传入参数的字符串是否有相等的字符,有则去除,遇到不在入参内的字符则停止。同样对右边执行依次
name = '/*-++-9*-deimos_chen//*1/*++**' print(name.strip('/*-+')) #输出 9*-deimos_chen//*1
-
应用:登陆接口
-
-
切分 str.split(str)
把一个字符串按照某种分隔符进行切分,得到的子字符串存进一个列表
-
默认分隔符是空格
-
指定分割符
name = 'deimos:aaa:bbbb' print(name.split(':')) #输出 ['deimos', 'aaa', 'bbbb'
-
指定分割次数,后面的分隔符不管
name = 'deimos:aaa:bbbb' print(name.split(':',1)) #['deimos', 'aaa:bbbb']
-
-
upper(),lower()
-
str.upper()
返回一个新str,将str的小写字母全换成大写 -
str.lower()
返回一个新str,将str的大写字母全换成小写name = 'deimos' print(name.upper()) # 输出 DEIMOS
-
-
str.startswith(),endswith()
判断字符串是否以指定字符串开始或结尾,返回布尔值。注意starts,有s,英语语法
-
str.format()
字符串格式化输出
-
str.join(list)
以str作为分隔符,把元素全为字符串的列表拼接成一个大字符串,返回新的字符串,相当于
list[0]+'str'+list[1]+'str'+list[2]
-
.replace()
str.replace(原字符串,要改变的字符串,改变次数)
name = 'aabbccdd' print(name.replace('a','f',1))
如果不加最后的次数,默认替换所有字符串
-
str.isdigit()
判断字符串是否是纯数字,返回布尔值
-
了解即可的操作
str1.find(str2) #查找子字符串在大字符串中的位置,返回子字符串在大字符串中的索引,找不到则返回-1 str1.index(str2) #与find类似,但是找不到则报错 str.center(最终打印的宽度,符号) #str居中显示,不够的宽度以符号填充 str.ljust(最终打印的宽度,符号) #居左显示 str.rjust(最终打印的宽度,符号) #居右显示 str.zfill(显示宽度) #右补零 str.title() #每个单词首字母大写
is系列
str.islower() #是否全为小写 str.isupper() #是否全为大写 str.istitle() #是否首字母大写 str.isalnum() #是否字母+数字组成 str.isalpha() #是否全为字母 str.isspace() #是否全为空格
数字系列
str.isdigit() str.isnumberic() str.isdecimal() #只能识别普通数字(Unicode)
-
-
有序 or 无序