Python入门教程+项目实战-7.2节: 循环控制结构
目录
7.2.1 理解循环控制
7.2.2 for循环结构
7.2.3 while循环结构
7.2.4 循环结构可以嵌套
7.2.5 知识要点
7.2.6 系统学习python
7.2.1 理解循环控制
理解循环控制,首先得理解什么是循环。以下内容引自汉语词典:
循环意指往复回旋,指事物周而复始地运动或变化,或反复地连续做某事
那么,放到编程语言中进行类比,则很容易理解循环控制:通过某些指令来控制程序反复地执行。通过控制程序指令反复地执行,可以将程序员从繁琐的代码编写工作中解放出来。同学们先思考下面这个问题:
计算1到10之间的所有自然数的和
乍看是一个很简单的问题,要解决这个问题,只需将1到10之间的所有自然数罗列出来,然后再直接相加即可:
Python
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循环的语法结构:
Python
for target_list in expression_list:
pass
else:
pass
target_list表示目标值列表,expression_list表示表达式列表,循环中的else语句用来定义循环正常退出时所执行的操作。在for循环结构中,会逐一遍历出表达式列表中的值,然后将值赋值给参数target_list。在Python中可以直接通过英文的逗号来定义表达式列表,例如:
1,2,3,4,5
代码实例:
Python
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通常用来定义循环正常退出后的收尾操作。
代码实例:
Python
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会抛出语法错误的异常信息。
代码实例:
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的值。
代码实例:
Python
for number in range(5, 0, -1):
print(number)
程序输出为:
5 4 3 2 1
利用range类型生成的整数序列,再通过循环结构,可以计算1到10000之间的所有自然数的和。
代码实例:
Python
# 定义变量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循环的语法结构:
Python
while expression:
pass
else:
pass
expression表示表达式,当表达式的值为真值时,会循环执行while下方的代码。while中的else同for循环中的else,用来定义循环正常退出时所执行的操作。在while循环中同样可以执行break来退出循环。
在交互模式中查看while关键字的定义和用法:help("while")
代码实例:
Python
while 0:
print("这行代码永远不会执行")
while "":
print("这行代码永远不会执行")
while中的表达式为0, 0值为假值,所以不会执行while循环中的print函数。
在迄今学过的内容中,0值和空字符串都为假值。空字符串即为引号内部不包含任何字符。例如""就是空字符串。
代码实例:
Python
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的值为假值,所以不会运行循环体中的代码。
7.2.4 循环结构可以嵌套
循环结构同条件控制结构一样,也可以嵌套。同样地,在进行嵌套时要注意代码缩进,同时嵌套的深度不宜过深,否则会导致代码的可读性变差,代码难以维护。
代码实例-计算1到10之间的所有合数的和:
Python
# 定义变量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
薯条老师简介:资深技术专家,技术作家,著有《Python零基础入门指南》,《Java零基础入门指南》等技术教程。薯条老师的博客:http://www.chipscoco.com, 系统学习后端,爬虫,数据分析,机器学习