小小千想和您聊一聊

当前位置: 首页> 技术分享> 第3章 流程控制语句

第3章 流程控制语句

  本章学习目标

  l 掌握if-else语句与if-elif语句

  l 掌握while语句与for语句

  l 掌握break语句与continue语句

  Python程序设计中流程控制结构包括顺序结构、选择结构和循环结构,它们都是通过控制语句实现的。其中顺序结构不需要特殊的语句,选择结构需要通过条件语句实现,循环结构需要循环语句实现。

  3.1 条件语句

  条件语句可以给定一个判断条件,并在程序执行过程中判断该条件是否成立。程序根据判断结果执行不同的操作,这样就改变代码的执行顺序,从而实现更多功能。例如,用户登录某款软件,若帐号与密码都输入正确,则显示登录成功界面,否则显示登录失败界面,具体如图3.1所示。

  图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。如果socre的值大于等于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,如果socre的值大于等于60,执行第3行,否则,执行第5行。程序执行完if-else语句后,接着执行第6行代码。

  3.1.3 if-elif语句

  生活中经常需要进行多重判断,例如,考试成绩在90~100区间内,称为学神;在80~90区间内,称为学霸;在60~80区间内,称为学民;低于60的称为学渣。

  在程序中,多重判断可以通过if-elif语句实现,其语法格式如下:

  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 循环语句

  循环的意思就是让程序重复地执行某些语句。在实际应用中,当碰到需要多次重复地执行一个或多个任务时,考虑使用循环语句来解决。循环语句的特点是在给定条件成立时,重复执行某个程序段。通常称给定条件为循环条件,称反复执行的程序段为循环体。

  3.2.1 while语句

  在while语句中,当条件表达式为True时,就重复执行语句块;当条件表达式为False时,就结束执行语句块。while语句的语法格式如下:

  while 条件表达式:

  语句块 # 此处语句块也称循环体

  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语句可以使程序立即退出循环,转而执行该循环外的下一条语句。如果break语句出现在嵌套循环中的内层循环,则break语句只会跳出当前层的循环。

  接下来演示break语句的用法,如例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语句搭配使用,它只在循环结束后执行。接下来演示for语句搭配else语句用法,如例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语句。假如需要检测的条件很多,就用if与else配对使用。当需重复执行某些语句,并且能够确定执行的次数,就用for语句;假如不能确定执行的次数,可以用while语句;另外,continue语句可以使当前循环结束,并从循环的开始处继续执行下次循环,break语句会使循环直接结束。

  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):print(n),共循环( )次。

  A.4 B.2

  C.0 D.3

  3.思考题

  (1) 简述else语句可以与哪些语句配合使用?

  (2) 简述break语句与continue语句的区别。

  4.编程题

  编写程序输出1到100之内的质数。

上一篇:HTML5工具初识之网页编辑器

下一篇:第2章 爬虫基础知识

QQ技术交流群

千锋Python官方①群
790693323

加入群聊