人工智能技术之流程控制语句
本章学习目标
掌握if-else语句与if-elif语句
掌握while语句与for语句
掌握break语句与continue语句
Python程序设计中流程控制结构包括顺序结构、选择结构和循环结构,它们都是通过控制语句实现的。其中顺序结构不需要特殊的语句,选择结构需要通过条件语句实现,循环结构需要循环语句实现。
3.1 条件语句
条件语句可以给定一个判断条件,并在程序执行过程中判断该条件是否成立。程序根据判断结果执行不同的操作,这样就改变代码的执行顺序,从而实现更多功能。例如,用户登录某款软件,若帐号与密码都输入正确,则返回登录成功界面,否则返回登录失败界面,具体如图2.24所示。
图3.1 电子邮箱登录界面
Python中条件语句有if语句、if-else语句和if-elif语句。接下来,本节将针对这些条件语句进行详细讲解。
3.1.1 if语句
if语句用于在程序中有条件的执行某些语句,其语法格式如下:
if 条件表达式:
语句块 # 当条件表达式为True时,执行语句块
如果条件表达式的值为True,则执行其后的语句块,否则不执行该语句块。if语句的执行流程,如图3.2所示。
图3.2 if语句流程图
接下来演示if语句的用法,如例3-1所示。
例3-1
1 score = 90
2 if score >= 60:
3 print("真棒!")
4 print("您的分数为%d"%score)
运行结果如图3.3所示。
图3.3 运行结果
如果将变量score的值改为50,则运行结果如图3.4所示。
图3.4 运行结果
在例3-1中,第2行判断socre的值是否大于等于60,如果大于等于60,执行第3行,否则不执行第3行。程序执行完if语句后,再接着执行第4行代码。
3.1.2 if-else语句
在使用if语句时,它只能做到满足条件时执行其后的语句块。如果需要在不满足条件时,执行其他语句块,则可以使用if-else语句。
if-else语句用于根据条件表达式的值决定执行哪块代码,其语法格式如下:
if 条件表达式:
语句块1 # 当条件表达式为True时,执行语句块1
else:
语句块2 # 当条件表达式为False时, 执行语句块2
如果条件表达式的值为True,则执行其后的语句块1,否则执行语句块2。if-else语句的执行流程,如图3.5所示。
图3.5 if-else语句流程图
接下来演示if-else语句的用法,如例3-2所示。
例3-2
1 score = 80
2 if score >= 60:
3 print("真棒!")
4 else:
5 print("加油!")
6 print("您的分数为%d"%score)
运行结果如图3.6所示。
图3.6 运行结果
如果将变量score的值改为50,则运行结果如图3.7所示。
图3.7 运行结果
在例3-2中,第2行判断socre的值是否大于等于60,如果大于等于60,执行第3行,否则,执行第5行。程序执行完if-else语句后,再接着执行第6行代码。
3.1.3 if-elif语句
if-elif语句用于进行多重判断。例如,考试成绩在90~100区间内,称为学神;在80~90区间内,称为学霸;在60~80区间内,称为学民;低于60的称为学渣。其语法格式如下:
if 条件表达式1:
语句块1 # 当条件表达式1为True时,执行语句块1
elif 条件表达式2:
语句块2 # 当条件表达式2为True时,执行语句块2
...
elif 条件表达式n:
语句块n # 当条件表达式n为True时,执行语句块n
当执行该语句时,依次判断条件表达式的值,当出现某个表达式的值为True时,则执行其对应的语句块,然后跳出if-elif语句继续执行该语句后面的代码。if-elif语句的执行流程,如图3.8所示。
图3.8 if-elseif-else语句流程图
接下来演示if-elif语句的用法,如例3-3所示。
例3-3
1 score = 80
2 if 90 <= score <= 100:
3 print("学神:成绩爆表!")
4 elif 80 <= score < 90:
5 print("学霸:成绩偏高!")
6 elif 60 <= score < 80:
7 print("学民:成绩普通!")
8 elif 0 <= score < 60:
9 print("学渣:成绩堪忧!")
10 print("您的分数为%d"%score)
运行结果如图3.9所示。
图3.9 运行结果
在例3-3中,程序依次判断表达式的值。程序先判断表达式90 <= score <= 100的结果为False,则跳过其后的语句块。程序接着判断表达式80 <= score < 90的结果为True,执行其后的语句块。最后,程序跳出if-elif语句,继续执行该语句后面的代码。
此外,if-elif语句后还可以使用else语句,用来表示if-elif语句中所有条件不满足时执行的语句块,其语法格式如下:
if 条件表达式1:
语句块1 # 当条件表达式1为True时,执行语句块1
elif 条件表达式2:
语句块2 # 当条件表达式2为True时,执行语句块2
...
else:
语句块n # 当以上条件表达式均为False时,执行语句块n
接下来演示if-elif-else语句的用法,如例3-4所示。
例3-4
1 score = 120
2 if 90 <= score <= 100:
3 print("学神:成绩爆表!")
4 elif 80 <= score < 90:
5 print("学霸:成绩偏高!")
6 elif 60 <= score < 80:
7 print("学民:成绩普通!")
8 elif 0 <= score < 60:
9 print("学渣:成绩堪忧!")
10 else:
11 print("成绩有误!")
12 print("您的分数为%d"%score)
运行结果如图3.10所示。
图3.10 运行结果
在例3-4中,if-else语句中所有的条件表达式结果都为False,因此程序将执行else语句后面的语句块。
3.1.4 if语句嵌套
if语句嵌套是指if、if-else中的语句块可以是if或if-else语句,其语法格式如下:
# if语句
if 条件表达式1:
if 条件表达式2: # 嵌套if语句
语句块2
if 条件表达式3: # 嵌套if-else语句
语句块3
else:
语句块4
# if-else语句
if 条件表达式1:
if 条件表达式2: # 嵌套if语句
语句块2
else:
if 条件表达式3: # 嵌套if-else语句
语句块3
else:
语句块4
注意if语句嵌套有多种形式,在实际编程时需灵活使用,接下来演示if嵌套语句的使用,如例3-5所示。
例3-5
1 a, b, c = 5, 8, 3
2 if a >= b:
3 if a >= c:
4 print("a、b、c中最大的值为%d"%a)
5 else:
6 print("a、b、c中最大的值为%d"%c)
7 else:
8 if b >= c:
9 print("a、b、c中最大的值为%d"%b)
10 else:
11 print("a、b、c中最大的值为%d"%c)
运行结果如图3.11所示。
图3.11 运行结果
在例3-5中,程序的功能是输出 a、b、c中最大的值。第2到6行为a大于等于b的情形,第7行到第11行为a小于b的情形。
3.2 循环语句
通过上节学习,读者了解条件为True时程序如何执行,但如何能让一个代码块重复执行多次。例如输出一百句“Python”,读者可能想到使用一百次print()函数,但这种方法显然太繁琐,读者可以使用本节即将学习的循环轻松实现。
3.2.1 while语句
在while语句中,当条件表达式为True时,就重复执行语句块;当条件表达式为False时,就结束循环。while语句的语法格式如下:
while 条件表达式:
语句块 # 当条件表达式为True时执行
while语句中循环体是否执行,取决于条件表达式是否为True。当条件表达式为True时,循环体就会被执行。循环体执行完毕后继续判断条件表达式,如果条件表达式为True,则会继续执行,直到条件表达式为False时,整个循环过程才会执行结束。while语句的执行流程,如图3.12所示。
图3.12 while循环流程图
接下来演示while语句的用法,如例3-6所示。
例3-6
1 i, sum = 1, 0
2 while i < 101:
3 sum += i
4 i += 1
5 print("1 + 2 + ··· + 100 = %d"%sum)
运行结果如图3.13所示。
图3.13 运行结果
在例3-6中,程序功能是实现1到100的累加和。当i=1时,i<101,此时执行循环体语句块,sum为1,i为2。当i=2时,i<101,此时执行循环体语句块,sum为3,i为3。以此类推,直到i=101,不满足循环条件,此时程序执行第5行代码。
3.2.2 for语句
for语句可以循环遍历任何序列中的元素,如列表、元组、字符串等,其语法格式如下:
for 元素 in 序列:
语句块
其中,for、in为关键字,for后面是每次从序列中取出的一个元素,接下来演示for语句的用法,如例3-7所示。
例3-7
1 for word in "Python":
2 print(word)
运行结果如图3.14所示。
图3.14 运行结果
在例3-7中,for语句将字符串中的每个字符逐个赋值给word,然后通过print()函数输出。
当需要遍历数字序列,可以使用range()函数,它会生成一个数列,接下来演示其用法,如例3-8所示。
例3-8
1 sum = 0
2 for i in range(1, 101):
3 sum += i
4 print("1 + 2 + ··· + 100 = %d"%sum)
运行结果如图3.15所示。
图3.15 运行结果
在例3-8中,通过range()函数可以生成一个1到100组成的数字序列,当使用for遍历时,依次从这个数字序列中取值。
3.2.3 while与for嵌套
while语句中可以嵌套while语句或for语句,接下来演示while语句中嵌套while语句,如例3-9所示。
例3-9
1 i = 1
2 while i < 10:
3 j = 1
4 while j <= i:
5 print("%d×%d = %-3d"%(i, j, i*j), end = ' ')
6 j += 1
7 i+= 1
8 print(end = '\n')
运行结果如图3.16所示。
图3.16 运行结果
在例3-9中,第2行到第8行为外层while循环,第4行到第6行为内层while循环,其中变量i控制行,变量j控制列,乘法表中的每一项可以表示为i×j = i*j。
接下来演示while语句中嵌套for语句,如例3-10所示。
例3-10
1 i = 1
2 while i < 10:
3 for j in range(1, i + 1):
4 print("%d×%d = %-3d"%(i, j, i*j), end = ' ')
5 i+= 1
6 print(end = '\n')
运行结果如图3.17所示。
图3.17 运行结果
在例3-10中,第2行到第6行为外层while循环,第3行到第4行为内层for循环,其中变量i控制行,变量j控制列,乘法表中的每一项可以表示为i×j = i*j。
此外,for语句中可以嵌套while语句或for语句,接下来演示for语句中嵌套while语句,如例3-11所示。
例3-11
1 for i in range(1, 10):
2 j = 1
3 while j <= i:
4 print("%d×%d = %-3d"%(i, j, i*j), end = ' ')
5 j += 1
6 print(end = '\n')
运行结果如图3.18所示。
图3.18 运行结果
在例3-11中,第1行到第6行为外层for循环,第3行到第5行为内层while循环,其中变量i控制行,变量j控制列,乘法表中的每一项可以表示为i×j = i*j。
接下来演示for语句中嵌套for语句,如例3-12所示。
例3-12
1 for i in range(1, 10):
2 for j in range(1, i + 1):
3 print("%d×%d = %-3d"%(i, j, i*j), end = ' ')
4 print(end = '\n')
运行结果如图3.19所示。
图3.19 运行结果
在例3-12中,第1行到第4行为外层for循环,第2行到第3行为内层for循环,其中变量i控制行,变量j控制列,乘法表中的每一项可以表示为i×j = i*j。
3.2.4 break语句
break语句可以跳出while或for循环体,接下来演示其用法,如例3-13所示。
例3-13
1 i = 0
2 while True:
3 i += 1
4 print("第%d次循环开始"%i)
5 if i == 3:
6 break
7 print("第%d次循环结束"%i)
8 print("整个循环结束
运行结果如图3.20所示。
图3.20 运行结果
在例3-13中,while语句中增加if条件语句。当i为3时,程序跳出循环。如果没有此if语句,程序会一直执行循环,直到计算机崩溃,这种循环称为无限循环。
3.2.5 continue语句
continue语句用于跳过当前循环体中剩余语句,然后继续进行下一次循环。接下来演示其用法,如例3-14所示。
例3-14
1 i = 0
2 while i <3:
3 i += 1
4 print("第%d次循环开始"%i)
5 if i == 2:
6 continue
7 print("第%d次循环结束"%i)
8 print("整个循环结束")
运行结果如图3.21所示。
图3.21 运行结果
在例3-14中,while语句中增加if条件语句。当i为2时,程序跳出第2次循环,接着开始执行第3次循环。
3.2.6 else语句
else语句除了可以与if语句搭配使用外,还可以与while语句、for语句搭配使用,它只在循环结束后执行,接下来演示其用法,如例3-15所示。
例3-15
1 for n in range(1, 3):
2 print("第%d次循环"%n)
3 else:
4 print("循环结束")
运行结果如图3.22所示。
图3.22 运行结果
在例3-15中,for语句后添加else语句。从程序运行结果可看出,程序执行完for语句后,接着执行else语句。
此处需注意,while语句或for语句中有break语句时,程序将会跳过while语句或for语句后的else语句,接下来演示这种情形,如例3-16所示。
例3-16
1 for n in range(1, 4):
2 print("第%d次循环"%n)
3 if n == 2:
4 break
5 else:
6 print("循环结束")
7 print("程序结束")
运行结果如图3.23所示。
图3.23 运行结果
在例3-16中,for语句中出现break语句。当n为2时,程序跳出for循环,并且没有执行else语句。
3.2.7 pass语句
在编写一个程序时,部分语句块思路还没有完成,这时可以用pass语句来占位。它可以当做是一个标记,表示未完成的代码块。
接下来演示pass语句的用法,如例3-17所示。
例3-17
1 for n in range(1, 3):
2 pass
3 print("暂时没思路")
4 print("程序结束")
运行结果如图3.24所示。
图3.24 运行结果
在例3-17中,当执行pass语句时,程序会忽略该语句,按顺序执行其他语句。
3.3 小案例
3.3.1 案例一
“鸡兔同笼问题”是我国古算书《孙子算经》中著名的数学问题,其内容是:“今有雉(鸡)兔同笼,上有三十五头,下有九十四足,问雉兔各几何”。具体实现如例3-18所示。
例3-18
1 for chicken in range(0, 36):
2 if 2 * chicken + (35 - chicken) * 4 == 94:
3 print('小鸡:', chicken, ' 小兔:', 35 - chicken)
运行结果如图3.25所示。
图3.25 运行结果
在例3-18中,程序通过for循环依次判断0到35之间的整数是否满足第2行if语句。如果满足该条件,程序就计算出鸡兔同笼的答案。
3.3.2 案例二
程序输入若干个学生某门课程成绩,求出这些学生成绩的平均值、最大值和最小值,具体实现如例3-19所示。
例3-19
1 num, sum, max, min = 0, 0, 0, 100
2 while True:
3 str = input('请输入第%d位学生成绩:'%(num + 1))
4 if str == 'Q':
5 print('输入结束!')
6 break
7 score = int(str)
8 if score < 0 or score > 100:
9 print('输入有误,重新输入!')
10 continue
11 sum += score
12 num += 1
13 if score > max:
14 max = score
15 if score < min:
16 min = score
17 print('平均成绩:', sum * 1.0 / num)
18 print('最大值:', max, '最小值:', min)
运行结果如图3.26所示。
图3.26 运行结果
在例3-19中,当输入Q时,程序结束循环。当输入的数字小于0或大于100时,程序结束本次循环。当输入的分数比最大值大时,程序将输入的分数赋值给最大值。当输入的分数比最小值小时,程序将输入的分数赋值给最小值。
3.4 本章小结
通过本章的学习,读者需熟练掌握条件语句与循环语句的使用。这两种语句在程序开发中经常使用,其中条件语句重点掌握if-else语句与if-elif语句,循环语句重点掌握while语句与for语句,此外还需注意这两种语句的混合使用。
3.5 习题
1.填空题
(1) 语句表示占位。
(2) 语句是if语句与else语句的组合。
(3) 语句可以跳出循环体。
(4) 语句可以跳出本次循环。
(5) 语句用于进行多重判断。
2.选择题
(1) 每个if条件后需要使用( )。
A.冒号 B.分号
C.中括号 D.大括号
(2) 下列语句不能嵌套自身的是( )。
A.if语句 B.else语句
C.while语句 D.for语句
(3) 下列选项中,可以生成1到5的数字序列是( )。
A.range(0,5) B.range(1,5)
C.range(1,6) D.range(0,6)
(4) 下列语句不能单独使用的是( )。
A.if语句 B.elif语句
C.if-else语句 D.for语句
(5) 对于for n in range(0,3):,共循环( )次。
A.4 B.2
C.0 D.3
3.思考题
(1) 简述else语句可以与哪些语句配合使用。
(2) 简述break语句与continue语句的区别。
4.编程题
编写程序输出1到100之内的质数。
- 点赞
- 收藏
- 关注作者
评论(0)