那么本期就让我们一起来学习一下python中的流程控制。
首先,python中的流程控制主要分为以下三种:
- 顺序结构
- 选择结构
- 循环结构
所谓顺序结构就是让代码按照从头到尾的顺序被执行,不重复任何代码,也不跳过任何代码
选择结构也被称为分支结构,可以让程序通过条件判断的结果选择性地执行代码
循环结构就是让程序不断重复同一行代码
下面,我们一起来对其进行更加详细地学习。
一、分支结构
首先我们需要知道,分支结构可以分为三种类型,即单向分支(if语句)、双向分支(if...else语句)以及多项分支(if...elif...else语句),接下来让我们一起来对其进行一一的认识
1.1 单项分支(if语句)
语法:
if 判断语句:
判断语句成立时需要执行的代码
例:判断两个数字的大小,并输出较大的数字
a = 5
b = 10
if b > a:
print(b)
#输出结果
10
在这个例子中我们可以看出 b 明显大于 a ,因此打印结果为10,那么这里就会有小伙伴有疑问了,你这里是提前知道了两个数的大小,那如果不知道两个数的大小又该如何处理呢?哎,那就让我们接着学习下一个分支结构。
1.2 双向分支(if...else语句)
首先来学习一下其语法:
if 判断语句1:
判断语句1成立时需要执行的代码块1
else:
判断语句1不成立时需要执行的代码块2
好,继续沿用上一个例子,只不过我们来对其稍加修改
例:判断任意两个数字的大小,并输出较大的数字
A = int(input("Number1 "))
B = int(input("Number2 "))
if A > B:
print(A)
else:
print(B)
#执行结果
Number1 20
Number2 45
45
在这个例子中作者本人使用了类型转换语句和输入语句以及赋值语句,不知道这三个语句的小伙伴也别急,这些在下一期都会讲到,好,我们先来分析一下这个例子,首先从执行结果可以看出A作为数字一被赋值20,而B被赋值45,先看判断语句1,因为A=20,B=45,显然语句1不成立,因此print(A) 这行代码不被执行,相反,print(B) 这行代码就被执行了,因此最终打印结果为45,到这里,细心的小伙伴可能就会发现,为什么else后面没有判断语句2,其实在双向分支中,如果语句1为真,那么语句2就为假,反之亦然,因此判断语句2可以省略不写。明白为什么后我们接着来学习最后一个分支结构。
1.3 多向分支(if...elif...else语句)
语法:
if 表达式1:
代码块1
elif 表达式2:
代码块2
else:
代码块3
注意:elif语句 可以是多个也可以是0个,另外,如果有一个elif语句满足,则程序就只执行其对应的哪一行代码块,剩下的代码块都不执行
例:使用多向分支语句编写一个简单的成绩查询程序,要求:成绩位于90-100为优秀;80-90为良好;70-80为中等;60-70为及格;<60为不及格
score = int(input('请输入成绩:'))
if 90 <= score <100:
print('优秀')
elif 80 <= score < 90:
print('良好')
elif 70 <= score < 80:
print('中等')
elif 60 <= score < 70:
print('及格')
else:
print('不及格')
#执行结果1
请输入成绩:85
良好
#结果2
请输入成绩:95
优秀
#执行结果3
请输入成绩:59
不及格
好,我们来分析一下这个例子,首先看执行结果1,当输入的结果为85时,由于85为与80-90之间,因此打印结果为良好,其他两个同理,可以看出,只要有一个elif语句成立,程序就会结束运行,这点各位小伙伴记得注意,到这里,可能又有小伙伴有疑问了,如果我输入的成绩不在0-100这个区间,程序又该如何运行?这里就需要讲一下循环的嵌套了。
1.4 分支结构的嵌套
语法:
if 表达式1:
if 表达式2:
代码块2
else:
代码块3
else:
语句块1
还是上一个例子,只不过我们用循环嵌套来对其进行完善
例:使用多向分支语句编写一个简单的成绩查询程序,要求:成绩位于90-100为优秀;80-90为良好;70-80为中等;60-70为及格;<60为不及格。当输入的成绩不位于0-100时,输出“成绩输入有误,请重新输入”
score = int(input('请输入成绩:'))
if 0<= score <= 100:
if 90 <= score <=100:
print('优秀')
elif 80 <= score < 90:
print('良好')
elif 70 <= score < 80:
print('中等')
elif 60 <= score < 70:
print('及格')
else:
print('不及格')
else:
print('输入的成绩有误,请重新输入')
#执行结果1
请输入成绩:120
输入的成绩有误,请重新输入
#执行结果2
请输入成绩:-1
输入的成绩有误,请重新输入
可以看出,由于120和-1都不位于0-100内,因此程序执行的结果都为“输入的成绩有误,请重新输入”。另外,给各位小伙伴讲解一下pass关键字的使用。
1.5 pass关键字的使用
pass 就相当于占位,其在程序中其实并无什么实际的作用
例:
A = 10
B = 5
if A > B:
pass
#输出结果
可以看出,虽然A>B成立,但由于使用了关键字pass,导致程序找不到可以执行的语句,因此输出结果为空,即什么也没有。在这里只做简单介绍,感兴趣的小伙伴可以自己查找pass关键字的更多运用。
学完了分支结构,下面我们来学习循环结构
二 循环结构
首先,循环结构可分为两种类型:while循环(死循环)和 for循环,其次,所谓的循环就是不断重复一行或一段代码,直到循环结束程序停止,下面,我们来一起学习这两种循环结构
2.1 while循环(死循环)
语法:
while 条件表达式:
代码块(也可称为循环体)
例:
A = 0
while A < 5:
print(A)
#输出结果
0
0
0
0
0
0
0
0
0
0
0
...
可以看出,由于A < 5始终成立,因此该循环会一直执行下去,因此,while循环也可称为死循环,那么有没有什么方法可以避免死循环呢?答案是肯定的,我们可以手动添加条件使得循环终止,
例:
A = 0
while A < 5:
print(A)
A += 1 # 程序每执行一次,A+1
#输出结果
0
1
2
3
4
可以看出这次程序只执行了5次就结束了,因此,我们可以通过手动添加条件是循环终止,当然,也可通过关键字跳出循环,这种方法介绍完循环会给大家做简单的讲解。
介绍完了while循环,下面接着讲解一下for循环
2.2 for 循环
语法:
一般形式:
for 变量名 in range(n):
循环体
根本形式:
for 变量名 in 可迭代对象:
循环体
先看其一般形式,首先介绍 range() ,其可以生成一段左闭右开的整数范围,看过前面几期中列表生成式的小伙伴应该会对其有印象,其有自己的语法:range(start,stop,step)
- start 指计数起始值,默认为0
- stop 指计数结束值,但不包括其自身
- step 是步长,默认为1,可修改,但不可为0
注意:range() 接收的参数必须是整数,可以是负数,但不能是浮点数等其他类型,其是不可变的序列类型,可以进行判断元素,查找元素,切片等操作,但是不能修改元素,同时其也是可迭代对象,但却不是迭代器
再看其根本形式,后面跟的是一个可迭代对象,目前已经学习过的可迭代对象有序列类型和散列类型,至于什么是可迭代对象以及迭代器,会在后面几期中讲解
现在来看一个例子:
例:用for循环打印出1-5的数
for i in range(1,6): # 左闭右开
print(i)
#输出结果
1
2
3
4
5
可以看出,不同于while循环,for循环无需手动添加条件即可自动停止循环,因此,使用for循环会更加便捷一些。再来看下面这个例子
例:打印出0-10的所有偶数
for i in range(0,11,2): # 左闭右开,步长取2
print(i)
#输出结果
0
2
4
6
8
10
那么,接下来我们尝试使用for循环计算1-100的累加和
sum1 = 0 # 容器,用来保存最后的结果
for i in range(1,101): # 左闭右开
sum1 += i # 每循环一次,sum1 和 i 相加
print(sum1) # 打印最终结果
#输出结果
5050
仿照for循环,各位小伙伴可以尝试使用while循环计算1-100的累加和,下面我们直接看代码
a = 1
sum1 = 0
while a < 101:
sum1 += a
a += 1
print(sum1)
#输出结果
5050
可以看出两种方法打印的结果是一致的。
接下来,让我们来学习一下循环的嵌套
三、循环嵌套
语法:
for 变量名1 in range(n):
循环体1
for 变量名2 in range(m):
循环体2
例:现有里外两层,使用循环嵌套,使得每一个外层下存在三个里层
for i in range(2):
print("外层")
for j in range(3):
print("里层")
#打印结果
外层
里层
里层
里层
外层
里层
里层
里层
打印结果如上,可以看出,每一个外层下存在三个里层
了解完循环嵌套,我们接着来学习最后一个内容,使用关键字跳出循环
四、break和continue
首先,二者都可提前结束循环,不过方式略有差别,break是退出整个循环,而continue则是退出本次循环,继续执行下一次循环
例:关键字break
for i in range(1,5): # 左闭右开
if i == 3:
print("循环提前结束")
break # 结束整个循环
print(i)
#输出结果
1
2
循环提前结束
可以看出,当 i = 3 ,即循环执行第三次时,由于遇到了关键字break,使得整个循环提前结束
例:关键字continue
for i in range(1,5): # 左闭右开
if i == 3:
print("本次循环提前结束")
continue # 结束本次循环
print(i)
#输出结果
1
2
本次循环提前结束
4
可以看出,当 i = 3 ,即循环执行第三次时,由于遇到了关键字continue,使得第三次循环提前结束而执行第四次循环,因此出现以上的打印结果,当然,这两个关键字在此也只是作简单的介绍,有需要的小伙伴可以自己查找相关资料。
五、总结
相比于while循环,我更推荐大家使用for循环,容错率更低,对基础较差的小伙伴更加的友好,同时,各位一定记住range() 是左闭右开区间,起始值默认从0开始,这点切记!!!
好了,以上就是python中流程控制的所有内容,如果有讲的不好的地方以及需要修改的地方欢迎各位指出,下一期将为大家带来运算符、类型转换以及用户交互的相关内容,喜欢的小伙伴别错过哦~下期见