for 循环

for … in range(n) 指定循环次数

基本使用,用来指定循环次数

  1. # 指定循环次数 循环10次, 每次循环的时候将值赋给 x
  2. for x in range(10):
  3. print(f'开始循环{x}')

在做接口压测的时候,需要生成批量的数据。 请大家使用for 循环生成1000个测试用户名,用户名以 testuser 开头,生成对应的数据: testuser1 ,,,, testuser1000

  1. for x in range(1000):
  2. print(f'testuser{x+1}')

也可以是

  1. for x in range(1,1001):
  2. print(f'testuser{x}')

嵌套循环

可以在循环体中嵌套循环。

  1. for x in range(3):
  2. for y in range(5):
  3. print(f"{x} {y}")

上面的循环 共执行15次。

实现九九乘法表

image.png
乘法表 循环 9次。从1-9。 range(1,10) 生成1-9

  1. # 循环9次 1 -- 9
  2. for x in range(1,10):
  3. print(x)

分析 99 乘法表
当x的值为1 的时候,分别需要 与 1-9 进行乘法运算
当x的值为2 的时候,分别需要 与 1-9 进行乘法运算
….
当x的值为9 的时候,分别需要 与 1-9 进行乘法运算
所以 使用嵌套循环。

  1. # 循环9次 1 -- 9
  2. for x in range(1,10):
  3. for y in range(1,10):
  4. print(f'{x}*{y}={x*y}')

image.png
上面的程序实现了运算,但是显示的结果的样式不太和谐。 通过修改换行。

  1. # 循环9次 1 -- 9
  2. for x in range(1,10):
  3. for y in range(1,10):
  4. # 默认打印完成会换行, end='\t' 表示不换行 有个tab 缩进
  5. print(f'{x}*{y}={x*y}',end='\t')
  6. #执行完程y循环 再进行换行
  7. print() # 换行操作

image.png
另外一种乘法表
image.png
分析
当x=1 ,y = 1
当x=2, y = (1,2)
当x=3, y = (1,2,3)
….
当x=9,y = (1,2,3,4,5,6,7,8,9)

  1. # 循环9次 1 -- 9
  2. for x in range(1,10):
  3. for y in range(1,x+1): # y的取值为动态的,根据x的值来定
  4. # 默认打印完成会换行, end='\t' 表示不换行 有个tab 缩进
  5. print(f'{x}*{y}={x*y}',end='\t')
  6. #执行完程y循环 再进行换行
  7. print() # 换行操作

image.png

实现金子塔

image.png
首先,看到这个金子塔, 每层都有不同的 , 计算每行的 的个数。
通过仔细观察,可以看到每一层的 的个数 公式
当 i = 1 时,
的个数为 1
当 i = 2 时, 的个数为 3
当 i = 3 时,
的个数为 5
….
当 i = 10 时, 的个数为 210-1 = 19
找到每层的个数公式为 2i -1。

  1. for i in range(1,11):
  2. # 计算每一行的 * 个数 2*i -1
  3. star = (2*i-1) * "*"
  4. print(star)

image.png
的个数现在已经可以了,但是 显示格式不对。
每行
前面都有空格。 通过仔细观察。
当i=10 的时候, 左边的空格为 0
当i=9 的时候, 左边的空格为 1
当i=8 的时候, 左边的空格为 2
….
当i=1 的时候, 左边的空格为 9
发现规律 左边的空格数为 10-i

  1. for i in range(1,11):
  2. # 计算每一行的 * 个数 2*i -1
  3. star = (2*i-1) * "*"
  4. # 计算每行的 左边栏空格数
  5. blank = (10-i) * " "
  6. # 所以每行显示 空格+ *
  7. print(blank+star)

image.png

扩展

将上面的金子倒立过来。

  1. def f(n):
  2. # range(10,0,-1) -1表示倒序
  3. for i in range(n,0,-1):
  4. star = (2 * i - 1) * "*"
  5. blank = (n - i) * " "
  6. # 所以每行显示 空格+ *
  7. print(blank + star)
  8. if __name__ == '__main__':
  9. f(10)

image.png

for 循环 list 列表中的内容

使用 for 循环可以将 列表中的数据 全部循环一遍。 基本语法 for x in 列表

  1. nums = [100,50,90,88,101,45,32,0]
  2. # 循环列表中的每个元素, x表示列表中的每个元素
  3. for x in nums:
  4. print(f"nums的元素值:{x}")

image.png
在循环的时候,可以填加数据的判断。

  1. nums = [100,50,90,88,101,45,32,0]
  2. # 将nums 中所有大于 60的值提取出来
  3. gt_60 = [] # 定义空的列表
  4. # 循环列表中的每个元素, x表示列表中的每个元素
  5. for x in nums:
  6. # 找到大于60的值
  7. if x>60:
  8. gt_60.append(x) # x追加到列表中
  9. # for 循环执行完之后
  10. print(f"所有的大于60的值:{gt_60}")

for 循环 也可以循环 元组,集合中的内容,循环方式与上面一样。

  1. # 循环元组
  2. nums = (100,50,90,88,101,45,32,10)
  3. for num in nums:
  4. print(num)
  1. # 循环集合
  2. nums = {100,50,90,88,101,45,32,10}
  3. for num in nums:
  4. print(num)

for 循环 字典

循环字典中的内容,与循环列表有所不同,字典中的数据,是由 key, value 两部分组成。

  1. user = {
  2. "name":"tom",
  3. "age":20,
  4. "sex":"man"
  5. }
  6. # k表示 key, v表示对应的value值
  7. for k,v in user.items():
  8. print(f'user 的key 为 {k}, 对应的值为 {v}')

image.png

for循环练习

  1. goods = [
  2. {"g_id":1000,"price":5000},
  3. {"g_id":1001,"price":4000},
  4. {"g_id":1002,"price":5000},
  5. {"g_id":1003,"price":6000},
  6. {"g_id":1004,"price":5000}
  7. ]

找到所有 price 为5000的 g_id;
分析: 需要使用到嵌套循环。
首先,goods 作为一个列表。 先对列表进行循环。

  1. for g in goods:
  2. print(g)

循环每个列表中的每个字典,根据条件添加对应的值。

  1. goods = [
  2. {"g_id":1000,"price":5000},
  3. {"g_id":1001,"price":4000},
  4. {"g_id":1002,"price":5000},
  5. {"g_id":1003,"price":6000},
  6. {"g_id":1004,"price":5000}
  7. ]
  8. # 定义空的列表 存放所有符合条件的id
  9. gids = []
  10. # 循环列表 拿到列表中的每个字典,将字典的值给变量g
  11. for g in goods:
  12. #print(g) # g 表示里面每一个字典
  13. # 针对每一个字典进行循环
  14. for k,v in g.items():
  15. # 添加条件 当 price的值为5000的时候
  16. if k=="price" and v==5000:
  17. # 将 g["g_id"]对应的值放在 列表中
  18. gids.append(g["g_id"])
  19. # 当所有的条件都循环完
  20. print(f'所有价格等于5000的商品id为:{gids}')

在后面做接口自动化测试,复杂参数提取会使用到这种方式。
pytest 断言

while循环

for循环是 比较明确的,可以指定循环的次数。 那么while循环可以无限循环。

基本使用

  1. # 定一个无限循环
  2. while True:
  3. print("hello world")

上面的循环 会一直打印 helloworld, 只能手动点击 停止 按钮进行停止。
image.png
循环的时候,一般需要添加条件,让循环停止。比如循环10次。

  1. # 定义变量
  2. count=0
  3. # 设置执行条件
  4. while count<10:
  5. print(count)
  6. # 每次循环 增加count的值
  7. count = count+1 # 让count的值递增1

image.png

if 条件判断

基本语法

  1. if 条件: # 条件为True的时候,执行下面的代码
  2. 执行代码
  1. # 导入python中的 random 随机模块
  2. import random
  3. # 生成一个 0-1之间随机值
  4. n = random.random()
  5. print(n)
  6. if n >0.5:
  7. print(f'n的值大于 0.5, {n}')

如果两个条件。
n的值大于0.5 打印 A
否则 打印 B

  1. # 导入python中的 random 随机模块
  2. import random
  3. # 生成一个 0-1之间随机值
  4. n = random.random()
  5. print(n)
  6. if n >0.5:
  7. print('A')
  8. else: # 如果上面条件不成立
  9. print('B')

多个条件

通过使用 elif 添加多个条件

模拟抽奖
n的值在 (0-0.1) 之间 输出 中奖1000w
n的值在 [0.1-0.2) 之间 输出 中奖500w
n的值在 [0.2-0.5) 之间 输出 中奖1w
n的值在 [0.5-0.8) 之间 输出 中奖100
其他值 输出 很遗憾

  1. # 导入python中的 random 随机模块
  2. import random
  3. # 生成一个 0-1之间随机值
  4. n = random.random()
  5. print(n)
  6. if n>0 and n<0.1:
  7. print('中奖1000w')
  8. elif n>=0.1 and n<0.2:
  9. print('中奖500w')
  10. elif n>=0.2 and n<0.5:
  11. print('中奖1w')
  12. elif n>=0.5 and n<0.8:
  13. print('中奖100')
  14. else:
  15. print('很遗憾')

在后期接口自动化生成测试数据的时候,使用for 循环+ if 判断语句。
pytest 参数化

视频