注册 登录
Python基础教程

第一章: 环境搭建,安装Python

第二章: 挑选一款趁手的IDE

第三章: 计算机基础知识

第四章: 命令行基础知识

第五章: 从全局把握Python

第六章: Python语言基础

第七章: Python流程控制

第八章: Python数据类型与运算

第九章: Python字符串类型

第十章: Python列表类型

第十一章: Python元祖类型

第十二章: Python字典类型

第十三章: Python集合类型

第十四章: Python函数处理

第十五章: Python文件处理

第十六章: Python面向对象

第十七章: Python异常处理

第十八章: Python模块处理

第十九章: Python项目实战

首页 > Python基础教程 > 第七章: Python流程控制 > 7.2节: 循环控制结构

7.2节: 循环控制结构

薯条老师 2020-04-22 15:08:54 208221 7

编辑 收藏

广州番禺Python, Java小班周末班培训

薯条老师在广州做Python和Java的小班培训,一个班最多10人,学员的平均就业薪资有11K。不在广州的同学可以报名线上直播班,跟线下小班的同学们同步学习。培训的课程有Python爬虫,Python后端开发,Python办公自动化,Python大数据分析,Python量化投资,Python机器学习,Java中高级后端开发。授课详情请点击:http://chipscoco.com/?cate=6

7.2.1 理解循环控制

理解循环控制,首先得理解什么是循环。以下内容引自汉语词典:
循环意指往复回旋,指事物周而复始地运动或变化,或反复地连续做某事

image.png


那么,放到编程语言中进行类比,则很容易理解循环控制:通过某些指令来控制程序反复地执行。通过控制程序指令反复地执行,可以将程序员从繁琐的代码编写工作中解放出来。同学们先思考下面这个问题:

计算1到10之间的所有自然数的和
乍看是一个很简单的问题,要解决这个问题,只需将1到10之间的所有自然数罗列出来,然后再直接相加即可:
sum = 1+2+3+4+5+6+7+8+9+10
但如果把问题改成“计算1到100000之间的所有自然数的和”,该怎么编写程序代码?通过手写的方式,逐数字的进行相加是非常低效的。对于这类问题,编程语言中的循环控制可以提供完美解决方案。

7.2.2 for循环结构

在Python中通过for与while关键字来定义循环结构,循环结构中的else语句用来定义循环正常退出时所执行的操作。

同学们可以在交互模式中查找for,while等关键字的定义与用法,要养成在交互模式中进行查找的良好习惯。例如查找for关键字的定义及用法:help("for")。

(1) for循环基本语法
for循环的语法结构:
for target_list in expression_list:
  pass
else:
  pass
target_list表示目标值列表,expression_list表示表达式列表,循环中的else语句用来定义循环正常退出时所执行的操作。在for循环结构中,会逐一遍历出表达式列表中的值,然后将值赋值给参数target_list。在Python中可以直接通过英文的逗号来定义表达式列表,例如:
1,2,3,4,5
代码实例:
for number in 1,2,3,4,5:
    print(number)
程序输出为:
1
2
3
4
5
代码解释:
for循环会逐一遍历表达式列表中的值,然后将遍历出的值赋值给变量number。表达式列表中的值为(1,2,3,4,5),集合中有5个值,所以for循环遍历了5次,每次都将遍历得到的值赋值给了变量number。比如第一次遍历出的值为1,然后赋值给变量number,第二次遍历出的值为2,同样赋值给变量number,以此类推。
以逗号分隔的表达式其实是Python中的元组类型,在后面介绍数据类型时,会对元组类型进行详细讲解。
(2) for循环中的else语句
循环中的else语句不是必须的,如需定义循环正常退出时所执行的操作,那么需要在for循环结构中加一个else语句。for循环结构中的else通常用来定义循环正常退出后的收尾操作。
代码实例:
for number in 1,2,3,4,5:
  print(number)
else:
  print("for循环正常退出")
程序输出为:
1
2
3
4
5
for循环正常退出
(3) 执行break退出循环
所谓的循环非正常退出,是指在循环中执行了break命令。当Python在解释执行脚本程序时,如果发现当前的指令为break,那么会立即退出当前循环。

break命令只能用于循环结构中,如果用在其它的地方,Python会抛出语法错误的异常信息。

代码实例:

for number in 1,2,3,4,5:
  print(number)
  # 如果当前number指向的值大于3,就执行break退出循环 
  if number > 3:
    break
else:
  # 如果for循环非正常退出
  # 就不会执行else语句下面的代码
  print("for循环正常退出")

程序输出为:

1
2
3
4
(3) range类型
Python提供了一个range类型,可以用来生成整数序列。range类型基本用法:
range(start, stop[, step])
参数start与参数stop用来构造整数序列的一个左闭右开区间[start, stop),假设start的值为0, stop的值为5,那么该左闭右开区间为[0, 5),该range(0, 5)对应的整数序列为:
0,1,2,3,4
step是可选的参数,所谓可选参数,即可填或可不填,step参数用来表示相邻数字间的步长,继续以左闭右开区间[0, 5)为例,假设步长为2,则range(0, 5, 2)对应的整数序列为:
0,2,4
# 起始数字为0,所以下一个数字为0+2,也就是2。
# 2的下一个数字为2+2,也就是4。同学们可以此类推。
在只给range类型传递一个参数时,构造的是从0到该参数的一个正向区间。例如传递参数值5时,构造的正向区间为[0, 5),传递的参数值小于等于0时,不会生成任何整数。给range类型传递的步长为负数时,可以生成一个降序排序的整数序列,此时start的值必须大于stop的值。

代码实例:

for number in range(5, 0, -1):
  print(number)

程序输出为:

5
4
3
2
1
利用range类型生成的整数序列,再通过循环结构,可以计算1到10000之间的所有自然数的和。
代码实例:

# 定义变量total,用来保存累加的和
total = 0
# range(1, 100001)会生成从1到10000之间的所有自然数
for number in range(1, 100001):
  # 在循环中不断地进行累加
  # 先取出变量total指向的值,然后与number变量指向的值相加
  # 最后将相加的值再赋值给变量total,以此实现了累加
  total = total + number
else:
  print(total)

程序输出为:

50005000
50005000即为1到10000之间的所有自然数的和。

7.2.3 while循环结构

(1) while循环基本语法
while循环的语法结构:
while expression:
  pass
else:
  pass
expression表示表达式,当表达式的值为真值时,会循环执行while下方的代码。while中的else同for循环中的else,用来定义循环正常退出时所执行的操作。在while循环中同样可以执行break来退出循环。
在交互模式中查看while关键字的定义和用法:help("while")
代码实例:

while 0:
  print("这行代码永远不会执行")
while "":
  print("这行代码永远不会执行")

while中的表达式为0, 0值为假值,所以不会执行while循环中的print函数。

在迄今学过的内容中,0值和空字符串都为假值。空字符串即为引号内部不包含任何字符。例如""就是空字符串。

代码实例:
x = 3
y = 3
while x+y > 0:
  # 先取出变量x指向的值,然后与1进行相减
  # 最后将相减的值再赋值给变量x,以此实现了自减
  
  x = x-1
  y = y-1
  print("x+y=", x+y)
程序输出为:
x+y=4
x+y=2
x+y=0
代码讲解:

x与y的初始值都为3,x+y的值为6,所以x+y > 0的值为真值。在while循环中不断将x与y的值减-1,当x与y的值都为0时,x+y=0,那么表达式x+y > 0的值为假值,所以不会运行循环体中的代码。

image.png

7.2.4 循环结构可以嵌套

循环结构同条件控制结构一样,也可以嵌套。同样地,在进行嵌套时要注意代码缩进,同时嵌套的深度不宜过深,否则会导致代码的可读性变差,代码难以维护。
代码实例-计算1到10之间的所有合数的和:

# 定义变量sum_of_numbers用来保存所有合数的和
sum_of_numbers = 0
# 合数指自然数中除了能被1和本身整除外,还能被其他数(0除外)整除的数
# 所以首先排除1和2
number = 3

while number <=10:
  
  # 通过for循环和range来遍历从2到number之间的所有自然数
  for _ in range(2, number):
    # % 是Python中的求余计算符号
    if number % _ == 0:
      # number能被其他数整除时,余数为0
      # 如果余数为0,说明为合数
      sum_of_numbers = sum_of_numbers + number
      break    
      
  # 不断进行自加,当number指向的值大于10时,会退出循环
  number = number +1
else:
    print(sum_of_numbers)

在上文的代码实例中,在while循环中嵌套了for循环,同样可以在while中嵌套while循环,在for循环中嵌套while循环,for循环。同学们可将上文中的代码实例全部改成for循环结构,以比较while循环与for循环的使用区别。

7.2.5 知识要点

(1) 循环控制是指通过指令来控制程序反复地执行

(2) Python通过for,while来实现循环控制

(3) 在循环中使用了break时表示非正常退出

(4) 循环结构中的else语句用来定义循环正常退出后的操作

(5) Python内置的range类型,可以用来生成一个整数序列

7.2.6 最具实力的小班培训

薯条老师在广州做Python和Java的小班培训,一个班最多10人。不在广州的同学可以报名线上直播班,跟线下小班的同学们同步学习打算参加小班培训的同学,必须遵守薯条老师的学习安排,认真做作业和项目。把知识学好,学扎实,那么找到一份高薪的工作就是很简单的一件事。

(1) Python后端工程师高薪就业班,月薪11K-18K,免费领取课程大纲
(2) Python爬虫工程师高薪就业班,年薪十五万,免费领取课程大纲
(3) Java后端开发工程师高薪就业班,月薪11K-20K, 免费领取课程大纲
(4) Python大数据分析,量化投资就业班,月薪12K-25K,免费领取课程大纲

扫码免费领取Python学习资料:

关注微信公众号.jpg



已有7位薯条发表了看法:

  • 访客

    访客  评论于 2020-06-03 11:52:33  回复

    代码实例:x=3 y=3 while x + y ˃ 0 ... 这个例子中的程序输出有误,应该还要加上一行 x+y = 0,请验证一下。

    • 薯条老师

      薯条老师  评论于 2020-06-03 12:04:35  回复

      是的,这里的程序输出有误,已加上这一行输出 。

  • 访客

    访客  评论于 2020-07-09 17:18:53  回复

    x = 3
    y = 3
    while x+y ˃ 0:
    x = x-1
    y = y-1
    print("x+y=", x+y)
    这个代码输出的结果少逗号,输出应该是
    ('x+y=', 4)
    ('x+y=', 2)
    ('x+y=', 0)

    • 访客

      访客  评论于 2020-08-01 10:07:03  回复

      你运行一下试试。

  • 访客

    访客  评论于 2020-07-13 15:46:14  回复

    代码实例-计算1到10之间的所有合数的和的最后没有输出值,需要加上一个print输出:
    if is_composite_number:
    sum_of_numbers = sum_of_numbers + number
    print(sum_of_numbers)

  • 访客

    访客  评论于 2021-09-28 10:54:29  回复

    if条件后面的语句执行完毕后,如果break没有缩进跟前面的if平齐,程序也能执行,但是结果合数9没有加进去,看了半天没弄懂原因

  • 访客

    访客  评论于 2021-09-28 10:54:34  回复

    if条件后面的语句执行完毕后,如果break没有缩进跟前面的if平齐,程序也能执行,但是结果合数9没有加进去,看了半天没弄懂原因

欢迎 发表评论:

请登录

忘记密码我要注册

注册账号

已有账号?请登录