Python 流程控制是 Python 编程中非常重要的一部分,它用于控制程序的执行流程。Python 提供了多种流程控制语句,包括 if 语句、while 循环、for 循环、break 和 continue 语句等。这种流程控制在各个语言中都是大同小异的。
一、if语句
if 语句用于根据条件执行不同的代码块。condition 是一个布尔表达式,后面一定要加冒号,这是python 语法规定。if语句后面的条件表达式是可以加括号的,但并不是必须的。使用括号可以使代码更加清晰易读,特别是在复杂的条件表达式中。然而,括号并不是语法要求,可以根据个人编码风格和团队约定进行选择。
1.if 语句的语法及应用示例
if 语句用于判断某个条件是否成立。如果成立,则执行语句内的程序;否则跳过 if 语句, 执行后面的内容,语法格式如下。
示例 1:下面的代码演示了如何使用 if 语句来判断一个数是否为正数:
num = int(input("请输入一个整数:"))
if num > 0:
print("输入的数是正数")
else:
print("输入的数不是正数")
示例 2:接收学生的考试成绩,使用 if 语句判断。如果考试成绩大于等于 60 分,输出“合格”:
print('请输入学生考试成绩')
score= int(input())
print (score >= 60)
if score >= 60:
print('合格')
示例 2 中,通过变量 score 保存键盘输入的成绩 80。当 if 语句判断当成绩大于等于 60 时,输出“合格”。在 Python3 中,input 方法默认返回为 str 类型。如果想要输出 int 类型就要改变输出类型为 int。
2.条件表达式与关系运算符
使用 if 语句时,后面要用到条件表示式和关系运算符,它们可以经过运算得到布尔值。如前面示例的 score>=68 就是一个使用关系运算符“>=”的条件表达式,表示:如果 score 大于等于 60,则表达式的结果是 True(真);否则为 False(假)。条件表达式的语法如下。
语法:
操作数 关系运算符 操作数
关系运算符的前后 2个数值,条件表达式的计算结果是布尔值。常用的关系运算符
如表 2-1 所示。
表 2-1 关系运算符
关系运算符 | 说明 |
== | 等于 |
!= | 不等于 |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
示例 3:关系运算符的运算结果。
条件表达式 10==9 是判断“==”运算符左右两侧的数值是否相等。因为 10 不等于 9,所以,10==9的运行结果是 False。
条件表达式 10!=9 是判断“!=”运算符左右两侧的数值是否不相等。因为 10 不等于 9,所以,10!=9的运行结果是 True。
其它的几种也是采用相同的方式进行判断并得到运算结果。
3. if-else 条件语句
if 语句还可以加上 else 关键字,根据条件判断,决定执行不同的语句块。当条件为真时,执行语句块 1。当条件为假时,执行语句块 2,语法如下。
语法:
if 条件表达式:
语句块 1 else:
语句块 2
示例 4:接收学生的考试成绩,使用 if 语句判断。如果考试成绩大于等于 68 分,输出“合格”;否则,输出“需要努力”。
print('请输入学生考试成绩')
score= int(input())
if score >= 60:
print('合格')
else:
print('需要努力')
#输出结果
>>>
请输入学生考试成绩
80 #执行第1遍,输入 80
合格
请输入学生考试成绩
50 #执行第 2 遍,输入 50
需要努力
4.多重if语句
使用 if-else 语句通过条件判断使程序能够有 2条执行路径,但有时还需要更多条路径进行处理,这时可以加入 elif 关键字处理。语法:
if 条件表达式 1:
语句块 1
elif 条件表达式 2:
语句块 2
elif 条件表达式 3:
语句块 3
......
else:
语句块
当条件 1 成立时,执行条件 1 对应的语句块 1。当条件 2 或条件 3 成立时,则分别执行对应的语句块。当前面的条件都不成功时,执行 else 对应的语句块。
示例 5:接收学生的考试成绩。如果考试成绩大于等于 98 分,则输出“优秀”。如果考试成绩小于 90 分且大于等于 70 分,则输出“良好”。如果考试成绩小于 70 分且大于等于 60分,则输出“合格”。如果考试成绩小于 60 分,则输出“需要努力”。
print('请输入学生考试成绩')
score= int(input())
if score >= 90:
print('优秀')
elif score >= 70:
print('良好')
elif score >= 60:
print('合格')
else:
print('需要努力')
>>>
请输入学生考试成绩
100
优秀
请输入学生考试成绩
80
良好
请输入学生考试成绩
60
合格
请输入学生考试成绩
58
需要努力
使用键盘输入不同的值,执行了不同的语句块,输出不同的结果。if 语句中,else 关键字是可选项可以有也可以没有,需要根据程序的需要灵活掌握。
5.if 语句的常见问题
在使用 if 语句时,常常会出现下面一些问题。
(1)使用 if-elif-else 语句时,容易出现逻辑错误。
因为条件是由上向下判断,如果条件成立,下面的条件判断将不再执行。示例5 的代码中,如果把条件表达式的顺序颠倒,比如把 score>=68 放到 score>=90 之前,那么输入 100 时,首先判断的score>=60 是成立的,就不会再执行 score>=90 条件表达式,程序将无法按要求得到结果。
以下代码就是逻辑错误的典型情况:
(2)if 语句中,语句块没有缩进也是容易犯的错误
如下代码直接报错:
编写代码时,要保证同级语句缩进的空格必须绝对一致。即使只有一个空格的差别,它们已经表示不同的语句块了。
如下代码所示,执行时会报错:
score = int(input())
if score >= 90;
print ('优秀1')#没有缩进
print('优秀2')#多了一个空格
第2 条输出语句比第1条多了1个空格,执行时会报错
(3)从其它程序设计语言转为 Pvthon 的程序员,由于习惯经常会忘记表达式后面的冒号,需要多练习熟悉语法。
二、Python的循环
编写程序时经常有一些代码块需要重复运行,Python 提供了 while 和 for 语句实现循环操作。
2.1while 循环
下面讲解 while 语句的语法和使用,在理解 while 语句的基础上,会介绍 Python 字符串的格式化输出和注释。
1.while 循环语句
循环的条件表达式后面也要使用冒号,然后缩进写循环操作语句。while 语句是先判断后执行。即:先判断条件表达式是否成立,如果条件表达式的值为 True,则执行循环操作语句。如果其值为 False,则跳出循环,执行 while 语句后面的语句。
示例 6:
当 count 值小于正整数 5 时,执行加 1 操作。当 count 小于 5 时,输出 count 的值。
count = 0
while (count < 5):
count = count + 1
print (count)
下面再来看一个复杂的示例,加深对while 循环的理解
示例 7:输入5 门课程的考试成绩,计算平均分并输出。
i=1
sum=0
while i<= 5:
print("请输入第门%d课的成绩:" %i)
sum=sum+int(input())
i=i+1
avg=sum / ( i - 1 )
print ('5门课程的平均成绩是%d' % avg)
>>>
请输入第 1门课程的考试成绩
77
请输入第 2门课程的考试成绩
55
请输入第3门课程的考试成绩
88
请输入第 4门课程的考试成绩
56
请输入第5 门课程的考试成绩
55
5 门课程的平均成绩是 66
字符串的格式化是将若干值插入带有“%”替代符的字符串中,从而可以动态地输出字符串。
2.Python 的注释
对于编写好的代码,经过一段时间之后,有可能会忘记代码的具体作用,所以代码中要写一些注释文字,以便于日后阅读和修改代码。Python 中使用“#”开头表示注释,可以在代码中添加注释。示例 9:添加了注释的 Python 代码
#输入5 门课程的考试成绩,计算平均成绩
i=1#初始化循环计数器i
sum=0#初始化总成绩变量sum
while i<= 5:# 重复执行5 次接收考试成绩,求和的操作
print("请输入第门%d课的成绩:" %i)
sum=sum+int(input())# 每门课程计入总成绩
i=i+1# 计数器i 増加 1
avg=sum / ( i - 1 )#计算平均成绩
print ('5门课程的平均成绩是%d' % avg)# 输出平均成绩
对于“#+空格”开头的文字,Python 解释器不会做任何处理。而代码中的注释,可以提高代码的可读性。
Python 注释有两种用法。一是,在行开头就使用“#”的称为单行注释;二是,紧随同行代码,以“#”开头的称为行内注释。注释并不是在每一行都需要,只需要把不易读的代码做注释即可。
3.字符串的格式化输出
字符串中的”%”,表示插入的是一个整型数据,%s 格式化字符串,%f 格式化浮点数字字符串后面的“% i”表示获取变量 i 的值。
示例 8:常用替代符的使用情况。
#输出结果
>>>
第5名
第5名
浮点数是:5.550000
字符串中使用对应的替代符,把相应的变量插入到了相应的位置
字符串中还可以使用多个替代符,对应的变量使用元组即可,示例代码如下。
>>>first=1
>>>second=2
>>>print("第%d名"%(first,second))
第1名和第2名
使用时要注意替代符和变量的顺序,位置不能放错;否则可能会出现类型不匹配的问题。
还可以使用字典格式化多个值,示例代码如下:
因为字典是无序的,所以使用字典时通过键获得与之对应的值。
4.while 循环嵌套
在 while 语句中,可以包含另一个 while 语句,即:使用 while 语句可以实现嵌套循环。
示例 10:使用 while 语句分别接收 2 名学生的 5 门课程考试成绩,计算并输出每个人的平均成绩。
j=1
prompt='请输入学生姓名:'
while j<=2:
sum=0
i=1
name = input(prompt)
while i <=5:
print('请输入第%d门课程的考试成绩' % i)
sum=sum+int(input())
i=i+1
avg=sum/(i-1)
print('%s的平均成绩是:%d' %(name,avg))
j=j+1
print('学生成绩输入完成')
备注:
外层的 while 语句用于输入学生名字,用变量 j控制循环次数,共 2 次。
内层的 while 语句用于输入 5 门成绩,用变量 i 控制。也就是在外层循环输入一个名字后,需要输入 5 门成绩,然后输出这名学生的成绩平均值,一共可以输入2名学生。
2.2for 循环
for 语句是另一种用于控制循环结构的方式。Python 的 while 是使用条件判断执行循环,而 for是使用遍历元素的方式进行循环。
1.while 循环
(1)for 循环可以对字符串进行遍历,逐个获得字符串的每个字符
示例代码如下:
(2)for循环可以对列表和元组进行遍历
示例代码如下:
备注:
取值列表也可以用元组
(3)需要循环操作相同的内容时,可以用 for 循环和range()函数结合使用,先看看 range()函数的作用
示例代码如下:
备注:
list(range(0,5,2))表示列表值为0到5(不包含5),间隔为2,即:0、2、4
2.for 循环示例
示例 11:接收某个学生三门课程的考试成绩,计算输出平均成绩。
subjects=("shuxue","yingyu","yuwen")
sum=0
for i in subjects:
print("请输入%s的考试成绩:"%i)
score=int(input())
sum+=score
avg=sum/len(subjects)
print("平均成绩是%d" %avg)
请输入 数学 考试成绩:11
请输入 yingyu 考试成绩:22
请输入 yuwen 考试成绩:33
小明的平均成绩是 22
3.逻辑运算符
Python 的逻辑运算符
and 逻辑与 如果两个操作数都为 True,则表达式值为 True
逻辑或 如果两个操作数中有一个为 True,则表达式值为 Trueor
not 逻辑非 求反运算,如果操作数值为 True,则表达式值为False,
如果操作数值为 False,则表达式值为 True
下面演示逻辑运算符的使用方法:
not 是求反运算,所以 not True 的结果是 False;
and 是与运算,只要有一个值是 False,结果就是 False,所以(True and False)的结果是 False:or 是或运算,只要有一个值是 True,结果就是 True,所以(True or False)的结果是 True。
下面对成绩做一个有效性的判断,示例代码如下:
4.for 循环嵌套
与 while 循环一样,for 语句也可以使用嵌套的方式。
示例 12:使用 for 语句分别接收 2 名学生的5 门课程考试成绩,计算并输出每个人的平均成绩。
subjects=("shuxue","yingyu","yuwen")
students=("zhangsan","lisi")
for student in students:
sum=0
for subject in subjects:
print ('请输入%s的%s考试成绩:'%(student,subject))
score=int(input())
sum+=score
avg = sum /len(subjects)
print ('%s的平均成绩是%d' %(student,avg))
在 for 循环中嵌套 while 循环:
students=("zhangsan","lisi")
subjects=("shuxue","yingyu","yuwen")
for student in students:
sum=0
i=0
while(i<len(subjects)):
print ('请输入%s的%s考试成绩:'%(student,subjects[i]))
score=int(input())
sum += score
i=i+1
avg= sum/len(subjects)
print ('%s的平均成绩是%d' %(student,avg))
2.3循环控制
使用 while 和 for 语句执行循环操作时,有可能需要改变循环的正常执行顺序,这时就需要用循环控制语句实现,循环控制语句有break 和 continue。
1.break 语句
在循环语句块中使用 break 语句,可以跳出整个循环。
示例 13:
对输出平均成绩的代码进行修改,当成绩无效时,使用break 退出循环。
students=("zhangsan","lisi")
subjects=("shuxue","yingyu","yuwen")
for student in students:
sum=0
i=0
while(i<len(subjects)):
print ('请输入%s的%s考试成绩:'%(student,subjects[i]))
score=int(input())
if(score<0 or score>100):
print('输入的成绩需要大于0或小于100,循环退出')
break
sum += score
i=i+1
avg= sum/len(subjects)
print ('%s的平均成绩是%d' %(student,avg))
>>>
请输入 小明 的 shuxue 考试成绩:111
输入的成绩需要大于8或小 100,循环退出小明的平均成绩是 0
请输入 小张 的 shuxue考试成绩:
在示例 13 中的大部分代码是前面示例的代码,只是在第 8-10 行加入了对成绩有效性的判断。如果不符合条件,则退出循环。
当输入 111 时,条件表达式 score<0 or score>100 的值为 True,程序执行 8-10 行,break 退出 for循环。
break 只和一个 for 循环对应,虽然有 2 层循环,但它只会结束离它最近的循环,这里就是第 2层for 循环。第 2 层循环结束后,接着执行后面的第 12 行和 13 行代码,第 1 层的循环照常遍历执行。开始输入第 2 个学生“小张”的成绩。
2.continue 语句
在 Python 中,continue 语句用于跳过当前循环中的剩余代码,并继续执行下一次循环。当 continue语句被执行时,程序将立即跳转到循环的开头,而不执行 continue 语句之后的代码。它通常用于条件判断内部,用来控制循环的执行流程。
示例14:
分别接收 2 个学生 3 门课程('shuxue','yingyu','yuwne')的考试成绩,要求成绩的取值范围是大于等于 8 且小于等于 100;计算并输出每个学生的平均成绩,示例 14 代码如下。
students=("zhangsan","lisi")
subjects=("shuxue","yingyu","yuwen")
for student in students:
sum=0
i=0
while(i<len(subjects)):
print ('请输入%s的%s考试成绩:'%(student,subjects[i]))
score=int(input())
if(score<0 or score>100):
print('输入的成绩需要大于0或小于100,循环继续')
continue
sum += score
i=i+1
avg= sum/len(subjects)
print ('%s的平均成绩是%d' %(student,avg))
第 1 层使用的是 for 循环遍历学生,第 2 层使用 while 循环遍历成绩,使用 continue 是跳到离它最近的循环的下一轮,也就是第 2 层的 while 循环的下一轮。因为执行 continue 后,第 13 行的 i= i+1 没有执行,而是重新又执行第 6 行的 while 循环,所以就是对当前课程的成绩重新输入。当输入 shuxue 的成绩为 111 时,提示数据有误,然后又提示需要重新输入 shuxue 成绩,代码更加健壮。