生成随机的手机号码

手机号的组成
前三位 特定的,
后八位 随机。

random 随机模块

random是Python中内置的随机模块,可以用来生成一些随机值。

random.randint 随机指定区间数字

random.choice 随机从列表中选择元素

  1. # 导入Python内置的random 模块
  2. import random
  3. # 生成随机数字 0-9
  4. n = random.randint(100,999) # 从指定的数字区间中生成随机值
  5. print(n) # 648
  6. # 随机从列表中选择一个值
  7. nums = ["132","130","131","133","134","135","136","137","138","139",
  8. "155","157","159"]
  9. # 随机从列表中选择一个元素
  10. num = random.choice(nums)
  11. print(num)

首3位可以从列表中随机抽取,后8位通过 循环 依次生成8个数字,将数字转换字符串进行拼接。

  1. # 导入Python内置的random 模块
  2. import random
  3. # 随机从列表中选择一个值
  4. nums = ["132","130","131","133","134","135","136","137","138","139",
  5. "155","157","159"]
  6. # 随机从列表中选择一个元素 作为手机号的前3位。
  7. num = random.choice(nums)
  8. print(num)
  9. # 定义空的字符串
  10. p8 = ""
  11. # 生成8个随机数字
  12. for i in range(8):
  13. # 每次循环都生成一个随机数字
  14. n = random.randint(0,9)
  15. # 将数字n p8 进行拼接 因为是n是数字,将n转换位字符串进行拼接
  16. p8 = p8+str(n)
  17. print(p8)
  18. # 手机号
  19. print(num+p8) # 13122336524
  • random 随机值
  • for 循环
  • 类型转换, 将数字转换 字符串
  • 字符串拼接

计算1-100之和

  1. # 初始值位0
  2. s = 0
  3. # 循环100次。i的值 0 - 100
  4. for i in range(101):
  5. # 循环1次,将上次运算的结果进行递增。
  6. s = s + i
  7. print(s)

嵌套循环-不同测试数据组合

设计异常场景的测试数据的时候,比如登录接口,有用户名,密码
python 开发测试辅助工具 - 图1
上面的用户名和密码都是异常场景数据,请根据提供的数据将 所有可能用户米密码组合 场景 输出。

  1. names = ["****&&&&","1110",""]
  2. passwords ["abc12","abcabcabcabcbabc1231231231",""]

使用嵌套循环

  1. names = ["****&&&&","1110",""]
  2. passwords = ["abc12","abcabcabcabcbabc1231231231",""]
  3. for name in names:
  4. for passwd in passwords:
  5. print(f"使用用户名 {name}, 密码 {passwd} 进行登录")

while 循环

在不确定循环次数的时候,可以使用while 循环。

  1. import random
  2. # 设置手机随机初始密码
  3. password = random.randint(0,999999)
  4. # 随机破解密码 使用while 循环
  5. print(f"生成原始密码:{password}")
  6. random_pass = 0 # 设置初始值
  7. print("开始随机破解密码")
  8. while random_pass != password:
  9. # 每次生成随机数 进行破解
  10. random_pass = random.randint(0,999999)
  11. print(f"使用密码{random_pass} 进行破解")
  12. # while 循环结束
  13. print("破解成功")

if 判断

  1. import random
  2. score = random.randint(-10,120)
  3. print(f'分数为 {score},评价',end=" ")
  4. if score >=0 and score < 60:
  5. print("不及格")
  6. elif score >= 60 and score < 80:
  7. print("良")
  8. elif score >=80 and score <=100:
  9. print("优秀")
  10. else:
  11. print("输入分数有误!")

break 中断循环

在for循环体中 ,执行循环100次 for循环就会执行100次。比如使用for循环来破解密码的时候,正常来讲, 如果破解成功,后面的密码就不需要再尝试了。 可以 for 循环中添加 break 来中断。

中断for 循环

  1. import random
  2. # 生成原始密码
  3. password = random.randint(0,9999)
  4. print(f"原始密码为: {password}")
  5. # 使用for 循环来进行破解,0-9999 依次来试试
  6. for i in range(10000):
  7. print(f"使用 {i}进行破解")
  8. if i == password:
  9. print("-----破解成功------")
  10. # 后面的值就不再运行了
  11. break

中断while循环

还是 破解密码的例子,也可以使用while 循环 依次取值来进行破解。

  1. import random
  2. # 生成原始密码
  3. password = random.randint(0,9999)
  4. print(f"原始密码为: {password}")
  5. start = 0
  6. while True:
  7. print(f"使用 {start} 进行破解")
  8. if start == password:
  9. print("破解成功!")
  10. break
  11. # 每次破解完成之后 更新 start的值
  12. start = start + 1

使用 for 循环, while 循环很多时候都可以,只不过 for 循环的结构看起来更加清晰,所以大家在使用的时候,根据自己掌握的熟练程度使用即可。

嵌套循环体中 break 只能中断当前循环体

如果在嵌套循环中 添加break, break 只能中断当前所在的循环中。

  1. import random
  2. a = random.randint(0,10)
  3. print(f'a={a}')
  4. for x in range(10):
  5. print(f"x的值{x}")
  6. for y in range(20):
  7. print(f"y的值 {y}")
  8. if y==a:
  9. print("-----中断y循环-----")
  10. break
  11. if x == a:
  12. print("-----中断x 外层循环,----")
  13. break

所以在使用多层嵌套循环,如果要中断整个循环,将break 写在最外层的循环体中。 (后面做自动化的时候用不到这个,但是作为一个知识点需要了解。)

continue

在循环体中,使用break 可以中断循环, continue 不会中断所有的循环,只是中断当次循环。

for x in range(10):
    print(f"x 的值 {x}")
    if x == 3:
        break
    print("完成当次循环")

执行结果
image.png
使用continue


for x in range(10):
    print(f"x 的值 {x}")
    if x == 3:
        continue
    print("完成当次循环")

image.png

文件操作

open 文件操作

python中内置函数,可以对文件进行读写。
主要的文件操作权限

  • r (read) 读取文件
  • w (write) 写文件。 会将原来的内容覆盖掉
  • a (append) 追加内容到文件, 不会覆盖原来的内容。

    open 写入文件

    ```python

with open(file=”data.txt”,mode=’w’,encoding=’utf8’) as f:

# 写入内容
f.write("helloworld")

- with open()  as  f:   f 类似变量, 可以任意命名
   - file = “data.txt”     file 是固定的  data.txt 是文件名,可以自己命名
   - mode = "w"   mode 是固定的   w 表示写入权限 
      - r 读取
      - w 写入
      - a 追加
   - encoding = "utf8"  固定的,表示字符集使用 utf8 格式。

执行代码,可以看到在项目目录下生成文件<br />![image.png](https://cdn.nlark.com/yuque/0/2022/png/87080/1653898193709-551792ad-c9c7-40ac-a2b7-49162c349ee3.png#clientId=u7adc6751-9933-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=395&id=uce86b840&margin=%5Bobject%20Object%5D&name=image.png&originHeight=494&originWidth=1210&originalType=binary&ratio=1&rotation=0&showTitle=false&size=33548&status=done&style=none&taskId=ueb355829-6ae0-44ca-b6a6-b24bb7681a1&title=&width=968)
<a name="aZrbI"></a>
### 扩展

1. 扩展上面代码 使用for循环 往文件中写入10行helloworld
```python

with open(file="data.txt",mode='w',encoding='utf8') as f:
    # 写入内容
    for i in range(10):
        f.write(f"{i+1} helloworld\n")
  1. 使用python在自己电脑的桌面上创建一个 data.txt 的文件,文件中写入 hello world

使用绝对路径


with open(file=r"C:\Users\zengy\Desktop\data.txt",mode='w',encoding='utf8') as f:
    # 写入内容
    for i in range(10):
        f.write(f"{i+1} helloworld\n")

open 读取文件内容

使用 read 方法读取文件的内容

with open(file="data.txt",mode='r',encoding='utf8') as file:
    data = file.read()
    print(data)

可以将数据都读取出来。
image.png

csv 文件读写

处理csv 文件需要使用到csv模块, csv模块的使用方式 跟 random 模块的使用方式类似,可以通过import 导入。

写入到csv文件

# 导入 csv 模块
import csv
# 打开文件
with open(file="data.csv",mode='w',encoding='utf8',newline="") as f:
    # 使用csv模块中自带的方法进行写入
    # 1. 创建写入对象
    cw = csv.writer(f)
    # 2. 写入数据 csv文件写入需要传入 列表格式
    cw.writerow(["用户名","密码"])
    # 写入10行数据
    for i in range(10):
        cw.writerow([f"test{i}","123456"])
  • with open(file=”data.csv”,mode=’w’,encoding=’utf8’,newline=””) as f: 固定用法
    • newline=”“ 注意这里是”“ 空字符串,表示写入csv文件时不要多空行
  • cw = csv.writer(f) 创建csv的写入对象, csv.writer(f) 固定,写入文件之前必须先创建一个对象。cw作为变量名,可以任意命名。
  • cw.writerow([“用户名”,”密码”]) 写入一行内容。写入的数据格式为 列表。 也就是必须传入一个列表。

写入完成之后,可以看到执行的效果。
image.png

将生成不同用户名,密码写入到csv数据文件中。

# 导入 csv 模块
import csv
names = ["****&&&&","1110",""]
passwords = ["abc12","abcabcabcabcbabc1231231231",""]
# 打开文件
with open(file="data.csv",mode='w',encoding='utf8',newline="") as f:
    # 使用csv模块中自带的方法进行写入
    # 1. 创建写入对象
    cw = csv.writer(f)
    # 2. 写入数据 csv文件写入需要传入 列表格式
    cw.writerow(["用户名","密码"])
    # 写入10行数据
    for name in names:
        for passwd in passwords:
            cw.writerow([name,passwd])

读取csv文件

使用csv模块中的方法 可以读取csv文件的内容, 将内容读取出来之后,可以对这些内容进行操作。

# 导入 csv 模块
import csv
with open(file='data.csv',mode='r',encoding='utf8') as f:
    # 使用csv模块中的方法来读取内容
    # 1. 创建读取内容的对象
    cr = csv.reader(f)
    # 2. for循环取cr中内容
    for x in cr:
        print(x)
  • with open(file=’data.csv’,mode=’r’,encoding=’utf8’) as f: 使用 read 权限读取文件,因为不再往文件中写入内容,所以不需加 newline
  • cr = csv.reader(f) 使用csv的方式创建读取对象。 csv.reader(f) 固定写法。 cr 是变量名,可以随意命名。
  • for x in cr: 读取内容

执行可以看到,读取出来的每行数据都是以列表格式返回给我们。
image.png

扩展

下面csv文件中存储的是中国所有的地区 身份证前6位编码。
gb2260.csv
将文件下载下来 拖拽或者复制到pycharm的项目中。
image.png
gb22060.csv文件中存放的是所有的中国地区身份证号前6位。大家写段程序,能够随机从csv文件中挑选一个地区码。
使用到的技术

  • csv 读取内容
  • random.choice 随机选择。 ```python

    导入 csv 模块

    import csv import random

创建一个空的列表

all_code = []

读取 gb2260.csv 文件

with open(file=’gb2260.csv’,encoding=’utf8’,mode=’r’) as f:

# 使用csv 创建读取对象
cr = csv.reader(f)
for code in cr:
    print(code, type(code),code[0])
    # 每次获取一个code 将code值存放在 all_code 中
    all_code.append(code[0])

等文件读取完成之后 all_code中存放了所有的 code值

print(all_code)

使用random 随机从 all_code 中选择一个

cd = random.choice(all_code) print(f”随机选中地区码:{cd}”) ``` 整体思路

  1. 创建空的列表为后续存放数据做准备
  2. 每次读取csv文件中的一行内容,就存放到列表
  3. 文件读取结束,表中就有所有的数据,从数据中随机选择一个。