功能测试--Day07--Python编程基础

一、数据序列

计算机操作数据的本质

  • 是否直接可以在内存中对数据进行修改:

    • 可以被修改的为可变数据类型【列表、字典、集合】

    • 不可以被修改的为不可变数据类型【其他剩余数据类型】

  • 从程序运行原理来说可变类型能修改数据的本质:存放该数据的内存地址保持不变

序列类型也叫非数字(常见文本信息)类型,要使用不同数据类型,一般需要先定义后使用

  • 定义数据类型

  • 使用数据类型

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(字符串)

案例:字符串基础操作

需求:

  1. str1 = 'abcdefg'

  2. 打印字符串中第一个位置的字符

  3. 打印 字符串中最后一个位置的字符

  4. 打印字符串长度

  5. 分别使用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

案例:字符串查找

需求:

  1. 现有字符串数据: 'itcast@qq.com'

  2. 请设计程序, 实现判断 "@" 符号是否存在于数据中

  3. 要求如果数据存在, 则输出数据所在位置否则打印输出"邮箱格式错误"

python 复制代码
email = input("请输入你的邮箱:")
if email.find("@") != -1:
    print(email.find("@"))
else:
    print("邮箱格式错误")

1.1.2、字符串切片

字符串开始位置下标:结束位置下标:步长

说明:

1、通过切片操作,可以获取字符串中指定部分的字符。

2、结束下标位置对应的字符不会被截取到

3、步长用于设置截取间隔,默认步长为1

案例:字符串切片操作

需求:

  1. 定义字符串str1 = 'abcdefg'

  2. 使用切片打印输出'cde'

  3. 使用切片打印输出'abcde'

  4. 使用切片打印输出'bcdefg'

  5. 使用切片打印输出'abcdefg'

  6. 使用切片打印输出'aceg'

  7. 使用切片打印输出'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嘛? 如何使用代码来自动进行校验?

案例:字符串去除空白字符

需求:

  1. 现有字符串数据: ' 15000000000 '

  2. 请设计程序, 去除字符串两端的空白字符

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(分割符)

**说明:**按照指定字符来分割字符串

注意:

  1. 方法执行完成后返回的数据类型为列表(list)

  2. 不传入分割符时,默认以空白字符进行拆分

案例:字符串大小写转换

需求:

  1. 数据常见操作: 增(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;

  1. 请设计程序实现:

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("非查询")

案例:练习一

需求:

  1. 现有字符串数据: 'hello Python and itcast and itheima'

  2. 请设计程序:

①将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

案例:练习二

需求:

  1. 判断输入的数据是否为数字

  2. 如果是数字,打印"你太棒了"

  3. 如果不是数字,打印"你到底能不能行"

python 复制代码
str = input("请输入字符串:")
print(str.isdigit())  
# 1234 True   asdc Fale

案例:登录

需求:

  1. 用户输入手机号、密码、验证码

  2. 对于输入的手机号、密码、验证码去除两端空格

  3. 手机号为空时,提示"手机号不能为空"

  4. 密码为空时,提示"密码不能为空"

  5. 验证码为空时,提示"验证码不能为空"

  6. 手机号格式不正确时,提示"手机号格式错误,请输入11位数字"

  7. 验证码统一转换为小写进行判断,正确验证码为"8888",验证码错误、提示"验证码与图片内容不 一致"

  8. 正确手机号为"13488888888",手机号错误时,提示"手机号不存在"

  9. 正确密码为"123456",密码错误时,提示"密码与账号不匹配"

  10. 手机号为"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、案例:登录案例优化

需求:

  1. 定义列表存储测试账号

  2. 遍历列表数据进行测试账号校验

  3. 当手机号为"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("用户名或密码错误")

需求:

  1. 定义元组存储测试账号

  2. 遍历元组数据进行测试账号校验

  3. 当手机号为"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)

==元组和列表区别==

面试题:请问列表和元组的区别?

  • 表示形式不同,元组用小括号,列表用中括号;

  • 表示单个元组元素时,元素后必须加,

  • 操作数据本质不同,元组是不可变数据类型,列表是可变数据类型

二、今日总结

相关推荐
zx1154501 小时前
大模型工具调用次数限制
人工智能·python
fengci.1 小时前
Microweber CMS 未授权路径穿越漏洞(CVE-2026-65694)
android·开发语言·前端·学习·php
MC皮蛋侠客1 小时前
SQLAlchemy 系列(八):AsyncIO、并发与 Web 生命周期——让每个并发任务持有自己的 Session
数据库·python
程序员zgh2 小时前
C++ 拷贝赋值运算符 详解
c语言·开发语言·c++
念何架构之路2 小时前
restartmanager-重启管理子系统
java·开发语言
SomeB1oody3 小时前
【RustyML入门】2.0. 经典机器学习
开发语言·后端·机器学习·rust·教程
大数据魔法师3 小时前
Python 网络请求库 curl_cffi:从入门到实战,如何规避网站指纹检测
python·数据分析
中电华星3 小时前
专业的工业电源公司
网络·python
databook3 小时前
用统计检验来确定“重要特征”
python·机器学习·scikit-learn