Python原来这么好学-7.3节:彻底掌握转向控制

201 阅读6分钟

             
这是一本教同学们彻底学通Python的高质量学习教程,认真地学习每一章节的内容,每天只需学好一节,帮助你成为一名卓越的Python程序员:
本教程面向的是零编程基础的同学,非科班人士,以及有一定编程水平的中高级程序员。
                                       
迄今已经学习了条件控制和循环控制,在本节的内容中,将要学习的是python的最后一个控制结构:转向控制。在学习新的内容前,先回顾下条件控制和循环控制的定义:
条件控制是指根据表达式的值,来有条件地执行程序中的指令。
循环控制是指让程序指令连续反复地执行。
理解转向控制,可以从其字面意思来进行理解,转向即调转方向,在程序的执行过程中通过转向控制来控制代码的执行过程。

在7.2节的内容中,其实已经接触到了转向控制。通过break来退出循环,就是一种转向控制。在python中通过break,continue,return来实现转向控制,在以下三节内容中会分别进行讲解。

                                    
break有打破和中途休息的意思,打破循环,意味着终止整个循环。通俗地进行解释,break是循环的终结者,类似T-800机器人一样的存在。

代码实例-执行break退出循环

sum_of_numbers = 0
for number in range(1000):
  sum_of_numbers = sum_of_numbers + number
  if sum_of_numbers > 2020:
    # 如果sum_of_numbers指向的值大于2020,就退出循环
    break
代码讲解:
(1) 在循环中使用条件控制来判断变量sum_of_numbers指向的值是否大于2020
(2) 如果变量指向的值大于2020,就执行break退出循环
代码实例-计算所有质数的和
sum_of_numbers = 0
for number in range(2,100):
  for _ in range(2, number)
    if number % 2 == 0:
      # %是求余运算符,如果当前number与2的余数为0
      # 那么就退出循环
      break 
  else:
    # 循环正常退出,说明当前number为质数
    sum_of_numbers = sum_of_numbers + _
代码讲解:
(1) 在内层for循环中,当number被其它自然数整除时就退出当前的循环

(2) 如果内层的循环系正常退出,说明不能被其它自然数整除,那么它是质数

(3) 退出内层的for循环,不会对外层的for循环造成影响
                                 
与break相比,continue只退出本次循环。假设在循环中一共需要执行5次,在第一次循环时使用break,那么剩下的4次循环都不会执行。在第一次循环时使用continue,那么会结束当次的循环,剩下的4次循环依然会执行。

代码实例-计算所有奇数的和

sum_of_numbers = 0
for number in range(1000):
  if number % 2 == 0:
    # % 是python中的求余运算符,如果与2相余后的余数为0
    # 说明当前number是偶数,那么退出本次循环
    continue 
  # 显然地,如果number为奇数
  # 就会运行下面的代码
  # sum_of_numbers存储的是所有奇数的和
  sum_of_numbers = sum_of_numbers + number
else:
  print(sum_of_numbers)
代码讲解
(1) %符号是python中的求余计算符,如果该number与2相余后的余数为0,说明是偶数,
    执行continue结束本次循环
(2) 如果不为偶数,那么就会继续执行循环体中的代码,计算所有奇数的和
代码实例-输出倒三角形
"""
倒三角形如下图所示:
 * * *
  * *
   *
"""

# 定义变量triangle,用来存储打印的字符串
# 在python中用英文引号括住的都为字符串
# 可以使用+符号对字符串进行拼接
# 在字符串中使用\n符号可以断行
​
triangle=""
# 定义变量rows表示行数
rows = 3
# 定义cols变量表示列数
cols  = 5for row in range(rows):
  # 定义is_even_number变量,判断当前行是否为偶数
  is_even_number = 1 if row % 2 == 0 else 0
  # 定义started变量,判断是否开始打印*符号
  started = 0for col in range(cols):
    # 如果当前列的编号等于当前行的编号,就开始打印*符号
    if col == row:
      triangle = triangle+"*"
      started = 1
      continue
    # 如果已经开始打印*符号,且列的编号在正确范围以内 
    if started and col<=cols-row:
      if is_even_number:
        triangle = triangle + "*" if col % 2 == 0 else triangle + " "
      else:
        triangle = triangle+"*" if col % 2!=0 else  triangle + " "
    else:
      triangle = triangle + " "
  # 在字符串中拼接\n符号,可以进行断行
  triangle = triangle+"\n"
else:
    print(triangle)
代码讲解:
(1) 根据图形本身的特征,去寻找规律
(2) 很显然,倒三角形中一共有三行五列,使用*符号与空格符号来共同输出三角形
(3) 当列的编号与本次循环中的行的编号相等时,就开始打印*符号,
    这个从图形本身的特征可以发现这个规律
(4) 再者,倒三角形中每一层的*数目越来越少,且居中,
    打印*符号的有效范围在当前总列数减去当前行编号的范围之内
在python中,break与continue都只能用于循环结构。在循环中使用了break, 意味着非正常退出,不会执行else中的代码。
                                  
编程语言中的return用来退出函数的执行,通常会返回一个值给函数的调用方。关于函数,会在第九章中进行详细讲解。
对于break,continue,return等关键字的定义和用法,同学们同样可以在交互模式中进行查找,不再赘述。
                                   
(1) 转向控制一般用于循环结构和函数中,用来控制循环和函数的执行过程。 (2) python通过break,continue,return来实现转向控制。 (3) break是终止整个循环,continue是终止本次循环 (4) return用于退出函数的执行,通常会返回一个值给调用方。
                                   
(1)谈谈你对转向控制的理解。
(2)python中通过哪些关键字来编写转向控制?
(3)breakcontinue的主要区别。
(4)使用循环结构编写程序,输出一个正三角形,如下图所示:
  *
 * *
* * *
 
(5)使用循环结构编写程序,输出一个菱形,如下图所示:
  *
 * *
* * *
 * *
  *
同学们可以对本节内容及课后习题进行留言,薯条老师会一一进行解答。同时欢迎同学们关注薯条老师的公众号「薯条编程」, 以及时获取最新的Python,Django, 数据库开发, 数据结构与算法,机器学习等教程。对本节内容不是很清楚的同学,可以加薯条老师的微信:Pretty-Style,加微信时请备注【薯条】。