python自动化测试

python自动化测试 第 3 章.程序控制流程与程序的异常处理

2021-11-03  本文已影响0人  失忆的蝴蝶

python程序流程控制是指python的代码执行顺序,流程。

程序结构

顺序结构是计算机程序的基础,

三种基本结构:

1. 顺序结构

从上往下依次执行

2.分支结构

程序根据条件判断结构而选择不同的代码向前执行的一种方式,条件分支。

  1. 单分支
  2. 二分支
  3. 多分支

2.1 单分支

if 条件表达式:
    语句块
image.png
案例:判断成绩是否及格

需求1:用户输入成绩,判断是否合格

  1. 接收用户的输入
  2. 判断成绩
  3. 做出反应
input函数

接受用户输入的文本信息,以字符串的形式返回,它接受字符串参数作为提示信息输出。
特别注意:输入的文本信息,是以字符串的形式返回的,所以如果输入的数字要获取数值形式,要进行数据类型转换

score = input('请输入分数:') # 此时的score是字符串
score = int(score) # 把score从字符串转换成数值类型
if score >= 60:
    print('成绩合格')

2.2 二分支

if 条件:
    代码块1
else:
    代码块2
image.png
score = input('请输入分数:')
score = int(score)
if score >= 60:
    print('成绩合格')
else:
    print('成绩不合格')

2.3 多分支

if 条件1:
    代码块1
elif 条件2:
    代码块2
....
else:
    代码块n

可以没有else 语句
需求2:成绩评价

score = input('请输入分数:')
score = int(score)
if score < 40:
    print('E')
elif 40 <= score < 60:
    print('D')
elif 60 <= score < 75:
    print('C')
elif 75 <= score < 85:
    print('B')
else:
    print('A')

3.循环结构

  1. 条件循环,while循环
  2. 遍历循环,for循环,迭代循环

3.1 条件循环

while 条件:
    代码块
image.png

条件恒为True,称为无限循环,死循环

# 从0依次打印小于n的整数 n是一个大于0的整数
num = int(input('输入一个大于0的整数:'))
i = 0
while i < num:
    print(i)
    i += 1

3.2 for循环(又叫遍历循环)

for 循环变量 in 遍历结构:
   代码块

定义:for循环会依次取出遍历结构中的元素,然后赋值给循环变量,每次遍历都会执行代码块,直到取出所有的元素为止。

迭代器(iterator)

一个可以记住遍历位置的对象,for循环的本质就是通过迭代器来实现的。
通过内建函数iter可以创建迭代器。

print(iter('abc'))  # 输出 <str_iterator object at 0x000002BCBCE654A8>
print(iter([1, 2, 3]))  # 输出 <list_iterator object at 0x000002BCBCE654A8>
print(iter(1))  # 出现报错,是不可迭代对象

可迭代对象,凡是可以通过iter创建迭代器的对象,成为可迭代对象,反之就是不可迭代对象。
序列类型,散列类型,都是可迭代对象

range函数

内建函数range可以创建输出整数序列的迭代器,与切片的使用方法一样。

range(start=0, stop, step=1) 

range(i,j) 生成 i,i+1, i+2,。。。j-1,

for i in range(1,10):
    print(i)

常与for循环一起使用,定义循环次数

# 定义循环次数
for i in range(3):
    print(i)
# 输出100以内的偶数
for i in range(0, 100, 2):
    print(i)
# 输出-1到-10
for i in range(-1, -11, -1):
    print(i)

3.3 循环控制关键字

ls = [60,59,78,80,56,55]
# ls里存放的是所有学生的成绩
# 判断是否有童靴不及格
for score in ls:
    if score < 60:
        print('有同学不及格')
输出:
有同学不及格
有同学不及格
有同学不及格

break 关键字

break 跳出当前循环体,代码继续往后执行
如果您使用嵌套循环,break语句将停止执行最深层的循环,并开始执行下一行代码。

ls = [60,59,78,80,56,55]
# ls里存放的是所有学生的成绩
# 判断是否有童靴不及格
for score in ls:
    if score < 60:
        print('有同学不及格')
        break
输出:
有同学不及格

continue关键字

continue 用来跳出当次循环,继续执行下一次循环,(代码块中continue后的代码不执行,直接跳转到for语句)

#  'Python'字符串中输出h以外的字母
for letter in 'Python':     
    if letter == 'h':
        continue
    print('当前字母 :', letter)
输出:
当前字母 : P
当前字母 : y
当前字母 : t
当前字母 : o
当前字母 : n

for ... else 语句( while... else 同理)

在 python 中,for … else 表示这样的意思,for 中的语句和普通的没有区别,else 中的语句会在循环正常执行完(即 for 不是通过 break 跳出而中断的)的情况下执行,也就是所有元素都遍历了,while … else 也是一样。

for i in range(10):
    if i % 2 != 0:
        break
    print(i)
else:
    print('循环正常结束')

双重循环

# 输出乘法口诀
for i in range(1, 10):
    for j in range(1, i+1):
        print('{}*{}={}'.format(j, i, j*i), end='\t')
    print()
'''
1. 编写程序实现,在程序中预设一个0~9之间的整数,让用户通过键盘输入所猜的数,如果大于预设的数,显示“遗憾,太大了”,
小于预设的数,显示“遗憾,太小了”,如此循环,直至猜中该数,显示“预测N次,你猜中了!”,其中N是用户输入数字的次数。
'''
k = 6
N = 0
while True:
    num = int(input('请输出一个0-9之间的整数:'))
    N += 1
    if num > k:
        print('遗憾,太大了')
    elif num < k:
        print('遗憾,太小了')
    elif num == k:
        print('预测{}次,你猜中了!'.format(N))
        break

"""
2.编写程序实现,用户从键盘输入一行字符,编写一个程序,统计并输出其中英文字符,数字,空格和其他字符的个数。
"""
sp_num = 0
dig_num = 0
al_num = 0
oth_num = 0
msg = input('请从键盘输入一行字符:')
for i in msg:
    if i.isspace():
        sp_num += 1
    elif i.isdigit():
        dig_num += 1
    elif i.isalpha():
        al_num += 1
    else:
        oth_num += 1
print('空格字符数量为:{},数字字符数量为:{},英文字符数量为:{},其它字符数量为:{}'.format(sp_num, dig_num, al_num, oth_num))


"""
3.使用print函数和循环结构输出如下由*组成的金字塔(可以尝试根据层数动态输出)
    *
   ***
  *****
 *******
"""
n = int(input('输入金字塔层数:'))
for i in range(1, n+1):
    print(' '*(n-i) + '*' * (2*i-1))

'''
4.使用print函数和循环结构输出如下由*组成的空心的金字塔图形
   *
  * *
 *   *
*******
'''
n = int(input('输入空心金字塔层数:'))
for i in range(1, n+1):
    if i == 1:
        print(' ' * (n - i) + '*')
    elif i == n:
        print(' ' * (n - i) + '*' * (2 * i - 1))
    else:
        print(' '*(n-i) + '*' + ' '*(2*i-3) + '*')

'''
5.使用print函数和循环结构输出如下由*组成的菱形
   *
  ***
 *****
*******
 *****
  ***
   *
'''
n = 4
for i in range(1, n+1):
    print(' '*(n-i) + '*' * (2*i-1))
for i in range(n-1):
    print(' ' * (i+1) + '*'*(n+1-2*i))
6、打印乘法口诀
for i in range(1, 10):
    for j in range(1, i+1):
        print('{}*{}={}'.format(j, i, j*i), end='\t')
    print()

程序异常处理

程序中的错误,语法错误。

运行时错误,runtime error,逻辑有问题,业务发生改变

作用:

语法使用一

try:
  代码块0
except 异常类型1:
  语句块1
except 异常类型2:
  语句块2

执行代码块0,如果出现异常类型1就执行语块1,如果出现异常类型2就执行语块2,以此类推
import builtins
print(dir(builtins))
输出的内容中以大写字母开头的都是异常类型

语法使用二(最常用)

try:
   代码块1
except Exception as e:
   代码块2

Exception:表示是所有的异常,如果是写ValueError就只会捕捉ValueError的异常类型,出现其他异常照样会报错;
as e:给Exception取别名
print(e)即可把异常类型打印出来,这样就可以看到报错的原因了

语法使用三

try:
   代码块1
except:
   代码块2

此方法实际上是与语法使用二中的简化,也会捕捉所有异常,但是此方法即无法获取异常的类型,没有方法二中的实用

语法使用四

终极版的try

try:
  语句块0
except 异常类型1:
  语句块1
except 异常类型2:
  语句块2
except 异常类型3:
  语句块3
else:
  语句块4
finally:
  语句块5
image.png

尝试去执行语句块0,出现对应的异常类型就执行对应的语句块,否则就执行else的语句块,最终执行finally语句块
没有发生异常,就会执行else后面的代码块,不管发生异常与否,finally语句后的代码块一定要执行
例子:

while True:
    score = input('请输入你的成绩>>>:')

    try:
        # 转换类型
        score = float(score)
        # 判断
        if score < 40:
            print('等级:E')
        elif 40 <= score < 60:
            print('等级:D')
        elif 60 <= score < 75:
            print('等级:C')
        elif 75 <= score < 85:
            print('等级:B')
        else:
            print('等级:A')
    except Exception as e:
        print(e)
        print('请输入正确分数')
    if score == '退出':
        break
上一篇下一篇

猜你喜欢

热点阅读