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

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

image.png

扩展

将上面的金子倒立过来。

def f(n):
    # range(10,0,-1) -1表示倒序
    for i in range(n,0,-1):
        star = (2 * i - 1) * "*"
        blank = (n - i) * " "
        # 所以每行显示  空格+ *
        print(blank + star)

if __name__ == '__main__':
    f(10)

image.png

for 循环 list 列表中的内容

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

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

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

nums = [100,50,90,88,101,45,32,0]
# 将nums 中所有大于 60的值提取出来
gt_60 = []  # 定义空的列表
# 循环列表中的每个元素, x表示列表中的每个元素
for x in nums:
    # 找到大于60的值
    if x>60:
        gt_60.append(x)  # x追加到列表中

# for 循环执行完之后
print(f"所有的大于60的值:{gt_60}")

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

# 循环元组
nums = (100,50,90,88,101,45,32,10)

for num in nums:
    print(num)
# 循环集合
nums = {100,50,90,88,101,45,32,10}

for num in nums:
    print(num)

for 循环 字典

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

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

image.png

for循环练习

goods = [
    {"g_id":1000,"price":5000},
    {"g_id":1001,"price":4000},
    {"g_id":1002,"price":5000},
    {"g_id":1003,"price":6000},
    {"g_id":1004,"price":5000}
]

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

for g in goods:
    print(g)

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

goods = [
    {"g_id":1000,"price":5000},
    {"g_id":1001,"price":4000},
    {"g_id":1002,"price":5000},
    {"g_id":1003,"price":6000},
    {"g_id":1004,"price":5000}
]
# 定义空的列表 存放所有符合条件的id
gids = []
# 循环列表 拿到列表中的每个字典,将字典的值给变量g
for g in goods:
    #print(g) # g 表示里面每一个字典
    # 针对每一个字典进行循环
    for k,v in g.items():
        # 添加条件 当 price的值为5000的时候
        if k=="price" and v==5000:
            # 将 g["g_id"]对应的值放在 列表中
            gids.append(g["g_id"])

# 当所有的条件都循环完
print(f'所有价格等于5000的商品id为:{gids}')

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

while循环

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

基本使用

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

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

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

image.png

if 条件判断

基本语法

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

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

# 导入python中的 random 随机模块
import random
# 生成一个 0-1之间随机值
n = random.random()
print(n)
if n >0.5:
    print('A')
else: # 如果上面条件不成立
    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
其他值 输出 很遗憾

# 导入python中的 random 随机模块
import random
# 生成一个 0-1之间随机值
n = random.random()
print(n)
if n>0 and n<0.1:
    print('中奖1000w')
elif n>=0.1 and n<0.2:
    print('中奖500w')
elif n>=0.2 and n<0.5:
    print('中奖1w')
elif n>=0.5 and n<0.8:
    print('中奖100')
else:
    print('很遗憾')

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

视频