一、数据序列

计算机操作数据的本质
-
是否直接可以在内存中对数据进行修改:
-
可以被修改的为可变数据类型【列表、字典、集合】
-
不可以被修改的为不可变数据类型【其他剩余数据类型】
-
-
从程序运行原理来说可变类型能修改数据的本质:存放该数据的内存地址保持不变
序列类型也叫非数字(常见文本信息)类型,要使用不同数据类型,一般需要先定义后使用
-
定义数据类型
-
使用数据类型
1.1、字符串
字符串定义:
-
空:
- 用引号:
字符串变量名=""
- 用引号:
-
非空(常用)
- 用引号:
字符串变量名="元素值"
- 用引号:
定义形式:
-
单引号:值上面加单引号
-
双引号:值上面加双引号
-
三引号:值上面加三对引号(注释内容也属于字符串内容)
注意事项:
特殊字符串:
带有转义字符的字符串 ---> 转义字符字符串外面加
r字符串内信息原样输出单双引号配合的字符串 ---> 单双引号的字符串,可以通过字符串的引号交叉使用【单引号和双引号交叉】
python
# 定义变量
info1 = "D:\tools\noco"
info2 = r"D:\tools\noco"
info3 = "D:\\tools\\noco"
info4 = '张三说:"你很厉害"'
print(info1) # 字符串中有转义字符,不能原样输出
print(info2) # D:\tools\noco
print(info3) # D:\tools\noco
print(info4) # 张三说:"你很厉害"
# \n 表示换行
# \t 表示执行TAB
# 问题1:路径想原样输出,在字符串外面添加字母 r,或者在有转义字符的地方添加 \
# 问题2:字符串中本身存在单双引号的情况,需要交叉输入引号
字符串
-
字符元素查找
-
格式:
字符串变量名[下标] -
结果:存在,返回元素,不存在下标报错
-
-
字符位置查找
下标:计算机中存放字符/元素的位置,也是计算机计数一种方式,默认从0开始
-
语法格式:
字符串名.find(被查找字符) -
执行结果:
-
查找成功:返回字符所在下标(索引)
-
查找失败:返回-1
-
-
**定义:**使用引号(单引号,双引号,三引号)引起来的内容就是字符串。
**引用:**通过索引(下标)获取字符串数据。
**索引(下标) :**是数据在容器中的位置编号。对于字符串来说,就是字符在整个字符串中的位置。

说明:
1、一般情况下,使用的都是正数索引(从左到右), 从 0 开始的。
2、Python 中支持负数索引(从右到左),-1 表示容器中最后一个数据。
3、使用索引(下标) 可以获取容器中指定位置的数据,如:字符串索引。
4、获取字符串长度:len(字符串)
案例:字符串基础操作
需求:
str1 = 'abcdefg'
打印字符串中第一个位置的字符
打印 字符串中最后一个位置的字符
打印字符串长度
分别使用for 循环和while 循环对字符串进行遍历
python
str1 = 'abcdefg'
# 2. 打印字符串中第一个位置的字符
print(str1[0])
# 3. 打印字符串中最后一个位置的字符
print(str1[-1])
# 4. 打印字符串长度
print(len(str1))
# 5. 分别使用for 循环和while 循环对字符串进行遍历
for i in str1:
print(i)
i = 0
while i < len(str1):
print(str1[i])
i += 1
1.1.1、查找:find()
字符串.find(被查找字符)
**说明:**被查找字符是否存在于当前字符串中, 如果存在则返回所在的下标, 不存在则返回-1
案例演示:
python
# 1.通过位置(下标)找元素
# 定义变量
info = "abcdefg"
# 获取字母d
print(info[3]) # d
print(info[-4]) # d
# 2.通过元素找位置(下标)
# 字母e在哪个位置?
print(info.find("e")) # 4
# 字母k在哪个位置?
print(info.find("k")) # 如果找不到返回-1
案例:字符串查找
需求:
现有字符串数据: 'itcast@qq.com'
请设计程序, 实现判断 "@" 符号是否存在于数据中
要求如果数据存在, 则输出数据所在位置否则打印输出"邮箱格式错误"
python
email = input("请输入你的邮箱:")
if email.find("@") != -1:
print(email.find("@"))
else:
print("邮箱格式错误")
1.1.2、字符串切片
字符串开始位置下标:结束位置下标:步长
说明:
1、通过切片操作,可以获取字符串中指定部分的字符。
2、结束下标位置对应的字符不会被截取到
3、步长用于设置截取间隔,默认步长为1
案例:字符串切片操作
需求:
定义字符串str1 = 'abcdefg'
使用切片打印输出'cde'
使用切片打印输出'abcde'
使用切片打印输出'bcdefg'
使用切片打印输出'abcdefg'
使用切片打印输出'aceg'
使用切片打印输出'abcdef'
python
str1 = "abcdefg"
# 2. 使用切片打印输出'cde'
print(str1[2:5])
# 3. 使用切片打印输出'abcde'
print(str1[:5])
# 4. 使用切片打印输出'bcdefg'
print(str1[-6:])
# 5. 使用切片打印输出'abcdefg'
print(str1[:])
# 6. 使用切片打印输出'aceg'
print(str1[::2])
# 7. 使用切片打印输出'abcdef'
print(str1[:6])
1.1.3、字符串替换:replace
替换: 字符串.replace(被替换的子字符串, 替换的新子字符串)
**说明:**使用新的子字符串, 按规则替换旧的字符串内容
-
语法格式:
字符串名.replace(原字符串,新字符串) -
注意事项:
-
字符串属于不可变数据类型,替换不会修改原有字符串信息
-
字符串替换需要新字符串变量接收查看是否替换成功
-
-
案例演示
python
# 定义字符串
info = "金虎虎同志被称之为世界最成功的80后,金虎虎真牛!"
# 使用字符串(替换)
info1 = info.replace("金虎虎", "马赛克")
print(info1) # 马赛克同志被称之为世界最成功的80后,马赛克真牛!
print(info) # 金虎虎同志被称之为世界最成功的80后,金虎虎真牛!
# 结论:
# 字符串不可变数据类型,进行替换操作之后,原有的字符串不发生变化
1.1.4、字符串连接:join
连接: 字符串.join(一般为列表)
**说明:**一般用于将列表按指定子字符合并为字符串
-
语法格式:
连接字符.join(列表/元组/集合) -
注意事项:
- 按照指定字符串将列表/元组中的字符元素(非字符元素报错)连接为字符串
-
案例演示
python
# 定义变量
info = ['Python', 'Java', 'PHP']
num = [11, 22, 33]
# 连接
info1 = " and ".join(info)
print(info1) # Python and Java and PHP
print(type(info1)) # <class 'str'>
# print("-".join(num)) # 序列中如果不是字符元素,报错TypeError: sequence item 0: expected str instance, int found
# 结论:
# 通过连接字符将列表/元组/集合对应字符元素才能连接成字符串
1.1.5、去除两端空白字符:strip
字符串.strip()
**说明:**将字符串两端的空白字符(空格、换行\n、制表符\t)去除,返回一个新的字符串

问题:
登录成功之后,校验返回的信息为"恭喜你,登录成功"
实际操作完成之后,获取信息为" 恭喜你,登录成功 "
这是一个BUG嘛? 如何使用代码来自动进行校验?
案例:字符串去除空白字符
需求:
现有字符串数据: ' 15000000000 '
请设计程序, 去除字符串两端的空白字符
python
username = ' 15000000000 '
username = username.strip()
print(username)
1.1.6、字符串转换大小写 :lower、upper
-
字符串中字母大小写转换
-
转大写:
字符串.upper() -
转小写:
字符串.lower()
-
字符串.lower() 字符串.upper()
**说明:**将字符串转换为大写或者小写, 返回新的字符串
python
str1 = "ABCDEFG"
print(str1.lower()) #abcdefg
str2 = "abcdefg"
print(str2.upper()) # ABCDEFG
1.1.7、拆分:split()
应用场景:将字符串按照指定的字符拆分为列表,方便获取指定数据
-
语法格式:
字符串名.split(分割符) -
注意事项:
-
字符串拆分之后的结果为列表,按照指定分割符分割
-
如果不输入分割符,默认按照字符串中的空格分割
-
-
案例演示
python
# 定义SQL语句变量
sql = "SelECt * from students where id = 001;"
# 上述SQL语句按照空格把语句中的单词拆分出来
print(sql.split()) # 结果类型是列表 ['SelECt', '*', 'from', 'students', 'where', 'id', '=', '001;']
# 在上述基础上把每个单词打印出来?
for i in sql.split(): # 对应容器中元素的获取直接使用for循环即可
print(i)
# 上述SQL按照where拆分出来
print(sql.split("where")) # 括号里面的字符叫分隔符 ['SelECt * from students ', ' id = 001;']
# 总结
# 1.通过split拆分后,结果是列表类型
# 2.如果split中不输入分隔符,默认按照空格拆分
字符串.split(分割符)
**说明:**按照指定字符来分割字符串
注意:
方法执行完成后返回的数据类型为列表(list)
不传入分割符时,默认以空白字符进行拆分
案例:字符串大小写转换
需求:
- 数据常见操作: 增(insert)删(delete)改(update)查(select)
测试数据:
⚫ InSert into student values(001,"jack", 18);
⚫ delete from student where id=001;
⚫ UPDATE student set name='rose'where id=001;
⚫ Select * from student where id=001;
- 请设计程序实现:
a.用户输入字符串为查询操作时,打印"显示查询结果";
b.否则,提醒"当前进行的是是非查询操作,需要进行事务提交与回滚"。
python
# 获取用户输入的SQL语句
sql = input("请输入SQL操作语句:").strip().lower()
# 判断是否为查询操作
if sql.startswith("select"):
print("显示查询结果")
else:
print("当前进行的是非查询操作,需要进行事务提交与回滚")
1.1.8、字符串的其他常见方法
-
判断是否是字母/数字【注意:字符串中不能出现空格】
-
判断是字母:
字符串.isalpha() -
判断是数字:
字符串.isdigit()
-
**说明:**返回值为True 和False
- 判断某个字符出现的次数:
字符串.count("字符")
python
# 1.去除字符串两头的空格
phone = " 13800000001 "
print(phone)
print(phone.strip())
# 2.大小写转换
# 转大写:字符串.upper()
# 转小写:字符串.lower()
# 定义SQL语句变量
sql = "SelECt * from students where id = 001;"
# 判断是否是查询(select是否存在)
if "select" in sql.lower():
print("显示查询结果")
else:
print("非查询")
案例:练习一
需求:
现有字符串数据: 'hello Python and itcast and itheima'
请设计程序:
①将and替换为or
②显示: hello+Python+and+itcast+and+itheima
python
old_Str = 'hello Python and itcast and itheima'
new_Str = old_Str.replace('and' , 'or')
print(new_Str) # hello Python or itcast or itheima
new_Str1 = old_Str.replace(' ' , '+')
print(new_Str1) # hello+Python+and+itcast+and+itheima
案例:练习二
需求:
判断输入的数据是否为数字
如果是数字,打印"你太棒了"
如果不是数字,打印"你到底能不能行"
python
str = input("请输入字符串:")
print(str.isdigit())
# 1234 True asdc Fale
案例:登录

需求:
用户输入手机号、密码、验证码
对于输入的手机号、密码、验证码去除两端空格
手机号为空时,提示"手机号不能为空"
密码为空时,提示"密码不能为空"
验证码为空时,提示"验证码不能为空"
手机号格式不正确时,提示"手机号格式错误,请输入11位数字"
验证码统一转换为小写进行判断,正确验证码为"8888",验证码错误、提示"验证码与图片内容不 一致"
正确手机号为"13488888888",手机号错误时,提示"手机号不存在"
正确密码为"123456",密码错误时,提示"密码与账号不匹配"
手机号为"13488888888"、密码为"123456"、验证码为"8888"时,输出"登录成功"
python
# 登录相关综合案例
# 1.输入数据并去除空格
phone = input("请输入手机号码:").strip()
pwd = input("请输入密码:").strip()
code = input("请输入验证码:").strip()
# 判断输入内容是否为空
if phone == "":
print("手机号码不能为空")
elif pwd == "":
print("密码不能为空")
elif code == "":
print("验证码不能为空")
# 判断手机号格式是否正确【类型、长度】
if phone.isdigit() and len(phone) == 11:
print("手机号码格式正确")
else:
print("手机号码格式不正确")
# 判断验证码
if code.lower() == "8888":
print("验证码正确")
else:
print("验证码不正确")
# 判断手机号和密码 和验证码是否正确
if phone == "13488888888":
print("1手机号正确")
if pwd == "123456":
print("2密码正确")
if code.lower() == "8888":
print("3登录成功")
else:
print("验证码错误")
else:
print("密码错误")
else:
print("手机号错误")
1.2、列表
1.2.1、列表的定义
**说明:**列表(list)是Python 中使用最频繁的数据类型, 在其他语言中通常叫做数组, 专门用来存储一组数据
-
空列表:
在实际测试中经常需要定义空列表,存放常用的一些测试数据
-
用\[\]定义:
列表变量名 = [] -
类实例化方式定义:
列表变量名 = list()
-
-
非空列表:
列表变量名 = [元素1,元素2,...]
-
案例演示
python
# 定义空列表
info = []
info1 = list()
print(info)
print(info1)
# 定义非空列表
info2 = [11, "aaa", 1.88]
print(info2)
1.2.2、列表增加方法:append() & insert()
列表.append(新增数据)
**应用场景:**结合循环操作给指定列表中追加数据,最终得到想要数据
**说明:**在列表的末尾添加数据
注意:
1.方法执行是对原数据进行的修改,固列表是可变数据类型
2.如果增加一个列表,则此列表会被当做一个值添加到末尾
-
语法格式:
列表名.append(元素) -
注意事项:
-
列表类型属于可变类型,新增元素后,对原有数据进行了修改
-
增加元素默认会增加到列表的末尾 ,每次增加一个
-
-
案例演示
python
# 定义列表
val_list = ["Web自动化", "UI自动化", "接口自动化"]
# 添加元素(末尾添加:APP自动化)
val_list.append("APP自动化")
# 查看原来列表
print(val_list) # ['Web自动化', 'UI自动化', '接口自动化', 'APP自动化']
# 增加数字元素 注意事项:每次只能添加一个,并且只能添加到末尾
val_list.append(11)
print(val_list) # ['Web自动化', 'UI自动化', '接口自动化', 'APP自动化', 11]
# 增加一个元素:鸿蒙测试,要求添加到第二个位置
val_list.insert(1, "鸿蒙测试")
print(val_list) # ['Web自动化', '鸿蒙测试', 'UI自动化', '接口自动化', 'APP自动化', 11]
# 结论:
# 列表属于可变数据类型,增加元素后,原有的列表的值会发生变化
# 追加元素每次只能追加1个,而且每次追加的位置在列表的末尾
列表元素增加:指定位置增加元素
-
语法格式:
列表名.insert(下标,元素) -
注意事项:
- 使用不存在的索引时,会将数据插入列表的末尾
-
案例演示
python
# 定义列表
val_list = ["Web自动化", "UI自动化", "接口自动化"]
# 添加元素到第二个位置(APP自动化)
val_list.insert(1,"APP自动化")
# 查看原有列表
print(val_list) # ['Web自动化', 'APP自动化', 'UI自动化', '接口自动化']
# 在上述列表的第7个位置添加元素"java"
val_list.insert(6,"java")
print(val_list) # ['Web自动化', 'APP自动化', 'UI自动化', '接口自动化', 'java']
# 结论:
# 指定的位置如果存在,按照指定位置插入元素;如果不存在,默认添加到列表的末尾
1.2.3、列表删除方法:pop() & remove()
del_data = 列表.pop(索引)
**说明:**删除指定索引对应的数据
**注意:**使用方法时如果不传入索引值, 默认删除列表中最后一个数据
-
语法格式:
列表名.pop(索引) -
注意事项:
-
删除不传入索引时,默认删除列表最后一个数据(元素)
-
删除传入的索引不存在(超出范围)时,代码报错
-
-
案例演示
python
# 定义列表
val_list = ['Web自动化', 'APP自动化', 'UI自动化', '接口自动化', 'java']
# 删除下标为2对应元素
val_list.pop(2)
# 查看原有列表
print(val_list)
# 下标为空删除
val_list.pop()
print(val_list)
# 删除下标为7的元素
# val_list.pop(7) # IndexError: pop index out of range
# print(val_list)
# 结论:
# 1.下标存在直接按照指定下标删除;如果下标不存在,直接报错
# 2.如果下标不写,默认删除最后一个元素
列表元素删除:指定数据删除
-
语法格式:
列表名.remove(元素) -
注意事项:
-
列表中存在多个该元素使,删除第一个匹配到的
-
如果删除的元素在列表不存在,代码会报错
-
-
案例演示
python
# 定义列表
val_list = ['Web自动化', 'APP自动化', 'java', 'UI自动化', '接口自动化', 'java']
# 删除:"APP自动化"
val_list.remove('APP自动化')
# 查看原有列表
print(val_list) # ['Web自动化', 'java', 'UI自动化', '接口自动化', 'java']
# 删除:java
val_list.remove('java')
print(val_list) # ['Web自动化', 'UI自动化', '接口自动化', 'java']
# 删除:python
# val_list.remove("python") # 报错:ValueError: list.remove(x): x not in list
# 总结:
# 1. 如果元素存在直接删除,如果存在多个元素默认删除第一个匹配到的
# 2. 如果元素不不存在直接删除,报错
1.2.4、列表修改方法:索引
列表索引 = 新数据
应用场景:对于列表中某个数据进行更新时使用
**说明:**通过指定索引修改对应数据
**注意:**使用不存在的索引, 代码执行会报错!
-
语法格式:
列表名[索引]=新数据 -
注意事项:
- 指定索引存在,则该位置的元素被修改,如果不存在,则代码报错
-
案例演示:
python
# 定义列表
val_list = ["Web自动化", "UI自动化", "接口自动化", "APP自动化"]
# 把UI自动化修改为性能自动化
val_list[1] = "性能自动化"
# 查看原有列表
print(val_list)
# 指定下标为5的数据修改为:python
# val_list[5] = "python" # IndexError: list assignment index out of range
# 结论
# 1.下标存在直接修改对应位置的元素;下标不存在直接报错
1.2.5、列表查询方法:索引
item = 列表索引
**应用场景:**查看列表中某个位置的元素,方便获取
**说明:**索引就是数据在列表中的位置编号, 索引又被称为下标, 默认从0开始
**注意:**使用不存在的索引 , 代码执行会报错!
-
语法格式:
列表名[索引] -
注意事项:
-
结果返回的是索引(也叫下标)对应列表元素,索引默认从0开始
-
如果查询的索引不存在,则代码会报错
-
-
案例演示
python
# 定义非空列表
val_list = ["Web自动化", "UI自动化", "接口自动化"]
# 查询列表中第二个元素:变量名[下标]
print(val_list[1]) # UI自动化
# 把第二个元素修改为:App自动化 --> 变量名[下标] = 新值
val_list[1] = "App自动化"
print(val_list) # ['Web自动化', 'App自动化', '接口自动化']
# 异常:如果输入下标不存在,代码会报错
# print(val_list[3])
# 列表元素查询:必须下标存在,否则会报错
# 列表元素查询
# 定义列表
name_list = ['张三', '李四', '王五']
# 按照索引查元素
# 查询李四
print(name_list[0]) # 张三
print(name_list[1]) # 李四
# 查询不存在的索引
# print(name_list[4])
# 总结:如果查询的下标(索引)不存在,则代码报错【索引超出了范围】
# IndexError: list index out of range
# 根据元素查索引
print(name_list.index("王五")) # 下标是 2
1.2.6、列表反转方法:reverse()
列表.reverse()
**说明:**反转列表, 将列表中的元素倒序
**注意:**方法执行是对原 数据进行的修改
-
语法格式:
列表名.reverse() -
注意事项:
- 对列表数据进行倒置排列
-
案例演示
python
# 定义列表
info = [8, 100, 30, 10, 40, 2]
# 反转
info.reverse()
# 查看原有列表
print(info) # [2, 40, 10, 30, 100, 8]
1.2.7、列表排序方法:sort()
列表.sort(reverse=False)
**应用场景:**针对部分面试题会出现
**说明:**将列表按指定规则进行数据排序, 默认为升序
**注意:**reverse 表示排序规则, 默认是False表示升序,设置为 True表示降序
-
语法格式:
列表名.sort(reverse=False) -
注意事项:
-
对列表元素默认从小到大排序,即reverse=False
-
对列表元素从大到小排序,需要修改reverse=True
-
-
案例演示
python
val_list = [8, 100, 30, 10, 40, 2]
val_list.sort(reverse=True)
print(val_list) # [100, 40, 30, 10, 8, 2]
# 定义列表
info = [8, 100, 30, 10, 40, 2]
# 从小到大排序
info.sort()
info.sort(reverse=False)
# 查看原有列表
print(info)
# 从大到小排序
info.sort(reverse=True)
print(info)
# 结论:
# 1.sort内部有常见两个参数,
key:表示按照哪个指标排序(key的值必须是一个函数),
reverse:表示排序规则(升序/降序)
# 2.reverse=False表示升序(默认可以不写);如果reverse=True表示降序
1.2.8、列表统计方法:count()
num = 列表.count(目标数据)
**场景:**结合列表元素去重使用
**说明:**统计被测试值出现的次数
**注意:**如果目标数据不存 在则返回0
-
语法格式:
列表名.count(元素) -
注意事项:
- 统计某元素出现的次数,如果元素不存在,返回0
-
案例演示
python
# 统计列表中某个元素出现的次数?
info = [11, 22, 11, 22, 11, 33, 44]
# 统计11出现次数
print(info.count(11)) # 3
print(info.count(55)) # 0
# 计算列表长度?
print(len(info)) # 7
# 定义列表
data_list = ['python', 'java', 'python', 'php']
# 统计python出现的次数
num = data_list.count("python")
print(num) # 次数:2
# 统计java出现次数
print(data_list.count("java")) # 次数:1
print(data_list.count("C++")) # 次数:0
# 结论:
# 统计列表元素出现的次数
# 元素不存在统计结果为0
1.2.9、列表的合并
-
语法格式1:
列表名1.extend(列表名2) -
语法格式2:
列表1 + 列表2 -
注意事项:
-
传入的数据是列表,直接将列表每个元素追加到第一个列表中
-
传入的数据是字符串,会将字符串中每个字符追加到第一个列表中
-
-
案例演示:
python
# 列表的合并
list1 = [11, 22, 33]
list2 = [44, 55, 66]
# 将list2中数据合并到list1中 --> 列表变量名.extend(另一个列表)
print(list1 + list2) # 相当于得到新列表 # [11, 22, 33, 44, 55, 66]
list3 = list1 + list2
print(list3) # [11, 22, 33, 44, 55, 66]
list1.extend(list2) # 还是原来的列表
print(list1) # [11, 22, 33, 44, 55, 66]
print(list2) # [44, 55, 66]
list1.extend("aaa")
print(list1) # [11, 22, 33, 44, 55, 66, 'a', 'a', 'a']
1.2.10、列表的嵌套元素获取:列表中的元素还是列表
应用场景:针对于多层列表中指定元素获取时使用
-
注意事项:
- 列表元素本身也可以是列表,列表嵌套依旧可以用下标查询元素
-
案例演示
python
# 定义列表
# 列表中的元素还是列表:列表嵌套
student_list = [["张三", "18", "功能测试"], ["李四", "20", "自动化测试"], ["王五", "22", ["python", "java"]]]
# 获取指定的元素
# 查找元素18,如何查找?
print(student_list[0])
aa = student_list[0] # ['张三', '18', '功能测试']
print(aa[1]) # 18
# 合并起来
print(student_list[0][1]) # 18
# 查找李四
print(student_list[1][0]) # 李四
# 查找java
print(student_list[2][2][1]) # java
# 列表的嵌套
list2 = [["张三", "18", "功能测试"], ["李四", "20", "自动化测试"], ["王五", "22", ["python", "java"]]]
# print(len(list2))
# 获取:自动化测试
a = list2[1]
print(a)
print(a[2])
# 一步完成
print(list2[1][2])
# 获取:python
print(list2[2][2][0])
1.2.11、案例:登录案例优化
需求:
定义列表存储测试账号
遍历列表数据进行测试账号校验
当手机号为"13488888888",输出"账号正确";否则"账号错误"。
python
listPh = ["13411111111","12311111111","13488888888"]
for ph in listPh:
if ph == "13488888888":
print("账号正确")
else:
print("账号错误")
# 列表的嵌套:列表中的元素还是列表
# 登录页面为例
# 需求:分别使用不同的数据(包括手机号、密码、验证码)进行登录验证
# 结果:账号或密码错误;验证码错误;登录成功
# 定义非空列表(把每种测试结果的数据放在一起)
login_data = [
["13488888888", "123456", "8888"],
["13488888888", "666666", "8888"],
["13488888880", "123456", "8888"],
["13488888888", "123456", "0000"]
]
# 遍历
for i in login_data:
# print(i) # 每一个中括号的数据 ,i = ["13488888888", "123456", "8888"]
# 判断手机号和密码
if i[0] == "13488888888" and i[1] == "123456":
# 判断验证码
if i[2] == "8888":
print("登录成功")
else:
print("验证码错误")
else:
print("用户名或密码错误")

需求:
定义元组存储测试账号
遍历元组数据进行测试账号校验
当手机号为"13488888888",输出"账号成功";否则"账号错误"。
python
# 1. 定义元组存储测试手机号
phone_tuple = ("13488888888", "13566666666", "13699999999")
# 2. 遍历元组并校验
for phone in phone_tuple:
if phone == "13488888888":
print("账号成功")
else:
print("账号错误")
二、今日总结
1.3、元组
1.3.1、元组的定义
-
空元组:
-
用()定义:
元组变量名 = () -
类实例化方式定义:
元组变量名 = tuple()
-
-
非空元组:
-
元组变量名 = (元素1,元素2,...) -
元组变量名 = 元素1,元素2,...
-
-
注意事项
-
元组的元素有多个时,小括号可以不写
-
元组只有一个元素时,写小括号,且元素后面加逗号 :
(元素,)
-
-
案例演示
python
# 定义空元组
info = ()
info1 = tuple()
print(info)
print(info1)
# 非空
info2 = (11, 22, 33, 44)
print(info2)
# 单个元素
# info3 = ("55") # 不加逗号此时为:<class 'str'>
info3 = ("55",)
print(type(info3)) # <class 'tuple'>
# 不写括号
info4 = 1, 2, 3, 4
print(type(info4)) # <class 'tuple'>
# 结论:
# 1. 元组的括号可以省略
# 2. 元组是一个元素值时,需要在元素后面加逗号
说明: 元组和列表一样,都可用于存储多个数据,不同之处在于元组的元素不能修改

**注意:**元组中只包含一个元素时,需要在元素后面添加逗号 data = (1,)
定义非空的元组时,最外层的 () 可以不写
1.3.2、元组常用方法
元组查询方法: 索引 item = 元组索引
元组元素查询:索引
-
语法格式:
元组名[索引] -
注意事项:
-
结果返回的元组元素的索引(也叫下标),默认从0开始
-
如果查询的索引不存在,则代码会报错
-
-
案例演示
**注意:**使用不存在的索引 , 代码执行会报错!
python
tuple1 = (1, 2, 3)
print(tuple1[1]) # 2
# 定义元组
info = (11, "aaa", 1.88)
# 查看下标为2对应元素
print(info[2]) # 1.88
# 查看下标为4对应元素
print(info[4]) # IndexError: tuple index out of range
# 总结:
# 1.如果下标存在,直接查询对应位置的元素;下标不存在直接报错
元组查询方法: count() num = 元组.count(目标数据)
**说明:**统计被测试值出现的次数
**注意:**如果目标数据不存 在则返回0
-
语法格式:
元组名.count(元素) -
注意事项:
- 统计某元素出现的次数,如果元素不存在,返回0
-
案例演示:
python
# 定义元组
info = (1, 2, 3, 2)
# 统计元素2出现的次数
print(info.count(2)) # 出现2次
print(info.count(3)) # 出现1次
print(info.count(4)) # 出现0次
元组的特殊用法:交换两个变量的值【面试题】
说明:
•在 Python 中可以使用对应数据个数的变量, 获取对应元组数据中的每一个元素
•在 Python 中定义多个元素的元组数据时, 小括号可以省略
•借助以上两个特性, 可以通过元组快速实现交换两个变量的值
python
num1 = 100
num2 = 200
# 交换两个变量的值
num2, num1 = num1, num2
print(num1) # 200
print(num2) # 100
应用场景:常常用做两组数据的直接互换
-
可以直接交互原因
-
Python定义多个元素的元组数据时,小括号可以省略
-
Python对应元素变量可以获取元组中每个元素的值
-

python
# 定义变量
num1 = 100
num2 = 200
# 交换两个数据
# 方式1:找第三个变量,进行互换
# tmp = num1
# num1 = num2
# num2 = tmp
# print("此时num1的值:", num1)
# print("此时num2的值:", num2)
# 方式2:直接借助于python元组类型的数据直接替换
# aa = 200 # 相当于把200给aa
# bb = 100 # 相当于把100给bb
# num1 = aa
# num2 = bb
# 合并结果 # num1, num2 = 200, 100
num1, num2 = num2, num1 # 元组元素的外层小括号可以省略
print("此时num1的值:", num1)
print("此时num2的值:", num2)
==元组和列表区别==
面试题:请问列表和元组的区别?
-
表示形式不同,元组用小括号,列表用中括号;
-
表示单个元组元素时,元素后必须加
, -
操作数据本质不同,元组是不可变数据类型,列表是可变数据类型
二、今日总结

