![Python 3.7网络爬虫快速入门](https://wfqqreader-1252317822.image.myqcloud.com/cover/366/27563366/b_27563366.jpg)
2.4 流程控制结构
流程控制结构是所有程序设计语言必备的元素,程序在运行的时候总是会按照一定的顺序来运行,这些顺序怎样用编程语言来描述呢?通过流程控制语句来描述。Python中一般的流程控制结构有顺序结构、选择结构与重复结构三种。而顺序流程,即是代码从上而下的执行,前面我们给出的范例程序大部分都是顺序流程执行的。本节就Python中的选择结构与重复结构(或称为循环结构)这两种流程控制分别做介绍。
2.4.1 选择结构
计算机之所以能完成很多自动化的任务,是因为编写的程序使其可以根据条件判断的结果选择执行不同的操作。在Python程序中,用if语句可以实现选择结构,其中包含选择执行所需的条件判断表达式。If语句的语法格式如下所示。
![](https://epubservercos.yuewen.com/6731C4/15825992804146606/epubprivate/OEBPS/Images/Figure-T40_22375.jpg?sign=1739522832-84jtx4VLKdqTwTMgtzWZeeVJZtx1f8D4-0-2dd8cc05f3aed24f2ecb5a60143f5559)
当条件判断表达式的结果为True时,执行语句1;当条件判断表达式的结果为False时,执行语句2。
提示
根据Python的语法规则,Python中不以花括号来确定语句区块的边界,而是以同样的缩进格式来确定同一个语句区块起止。在其他程序设计语言中缩进并不是必需的,主要只是为了让代码更加清晰、可读。而在Python语言中,缩进格式用于确定了语句区块,所以以上代码中的缩进是必不可少的。
下面的范例程序用于说明条件判断语句是如何工作的。
【范例程序2-8】选择结构——条件判断语句的使用
从键盘读取一个数字并检查这个数字是否小于100。
分析这个问题:
(1)从键盘读取一个数字:可以使用input()函数。
(2)将这个数字和100比较:这里需要一个判断大小的if-else选择结构。
(3)输出结果:根据条件判断的结果输出不同的结果。
范例程序2-8的代码
![](https://epubservercos.yuewen.com/6731C4/15825992804146606/epubprivate/OEBPS/Images/Figure-T40_22376.jpg?sign=1739522832-2nJRI1wWVDSyHRZwVzNEALOdFkj6o30k-0-4aac8629b643a0fa73214da2e3abca72)
提示
input()函数从键盘读取的内容默认是字符串。要将字符串和数字进行比较,必须将字符串强制转换为数字类型。这里使用int()将括号里input()函数读取到的字符串强制转换为一个整数,然后再进行比较。
接下来是一个if-else结构,if条件成立时,即这个数字小于100时,执行if条件下的语句,输出“这个数字小于100”。同理,当if条件不成立时,执行else条件下的语句,输出“这个数字不小于100”。
将以上代码保存到程序文件2-8.py中,执行该程序并输入不同的数字,结果如图2.14与图2.15所示。
![](https://epubservercos.yuewen.com/6731C4/15825992804146606/epubprivate/OEBPS/Images/Figure-P41_5130.jpg?sign=1739522832-jQlXz4b2wLjR2m0PM51j2ckKab2XOtJY-0-848343f535c20a436257cb4770319ba6)
图2.14 使用条件判断I
![](https://epubservercos.yuewen.com/6731C4/15825992804146606/epubprivate/OEBPS/Images/Figure-P41_5131.jpg?sign=1739522832-LOV0NMFM1XrSI8lNXU0sA2MuKRhjUiuU-0-6709601b74930768a0d4c1665b44afea)
图2.15 使用条件判断II
除了普通的if-else选择结构之外,Python还支持if-elif-elif ……else结构,即更多的分支判断,其语法结构如下所示。
![](https://epubservercos.yuewen.com/6731C4/15825992804146606/epubprivate/OEBPS/Images/Figure-T41_22378.jpg?sign=1739522832-7Yd1Pab930I6toc1dntfrvsh8MjFEkCO-0-8f68f7315a2c0307ee25a29356325d00)
在以上代码中,若条件判断表达式成立,则会执行其下对应的程序语句;若条件判断表达式均不成立,则执行最后else后对应的语句。
2.4.2 重复结构(循环结构)
重复结构是流程控制中一种重要的结构,重复结构也就是我们常说的循环结构,循环结构通过循环语句来实现。循环语句允许用户执行一条语句或多条语句多次。对于机械重复的运算,就可以使用循环语句。Python提供了几个不同的循环语句,最主要的有for和while语句。
Python的for语句依据任意序列(列表或字符串)中的元素,按这些元素在序列中的顺序来进行迭代。for语句的语法格式如下所示。
![](https://epubservercos.yuewen.com/6731C4/15825992804146606/epubprivate/OEBPS/Images/Figure-T42_22379.jpg?sign=1739522832-dtoOjLOYO6pTtZi5U1tSzaD4Vc3uee0o-0-dea517fcfb9785e21a893214021368b3)
代码中iterating_var为重新申明的变量,sequence为一个序列,statements(s)是需要重复执行的语句。
下面通过一个范例程序来说明for循环是如何工作的。
【范例程序例2-9】使用for循环对序列进行迭代输出
范例程序2-9的代码
![](https://epubservercos.yuewen.com/6731C4/15825992804146606/epubprivate/OEBPS/Images/Figure-T42_22380.jpg?sign=1739522832-lOp0f21p4Ub1nXEljOlJcjvXGaCoH71i-0-d2b27f42bbaf16ca76934ca07751f31b)
以上代码首先创建一个列表,然后通过for循环对列表进行迭代,并输出列表的每个元素。将这段代码保存到程序文件2-9.py中,执行该程序,结果如图2.16所示。
![](https://epubservercos.yuewen.com/6731C4/15825992804146606/epubprivate/OEBPS/Images/Figure-P42_5252.jpg?sign=1739522832-70O1JQBFWzRVg9VYhqx6NHb2Ieo4gSK3-0-2d913079d37a42d5fe8043d9d635378d)
图2.16 使用for循环
如果想要使用for循环执行指定的次数,可以配合使用range()函数。range()函数的语法格式如下所示。
range(start, stop[, step])
其参数意义如下:
- start:计数从start开始,默认是从0开始。例如,range(5)等价于range(0,5)。
- stop:计数到stop结束,但不包括stop。例如,range(0,5)是[0, 1, 2, 3, 4],没有5。
- step:步长,默认为1。例如,range(0,5)等价于range(0, 5, 1)。
执行range()将会创建一个整数列表。
【范例程序2-10】使用for循环配合range()执行指定的次数
范例程序2-10的代码
![](https://epubservercos.yuewen.com/6731C4/15825992804146606/epubprivate/OEBPS/Images/Figure-T42_22633.jpg?sign=1739522832-A3BkFFWQHMSdTnHzaA43xMI4AiafrJeG-0-14791911d5a77851dceee34095593cdd)
以上代码通过双层for循环输出不同数量的星号来绘制一个三角形。将这段代码保存到程序文件2-10.py中,执行该程序,运行结果如图2.17所示。
![](https://epubservercos.yuewen.com/6731C4/15825992804146606/epubprivate/OEBPS/Images/Figure-P43_5298.jpg?sign=1739522832-cJfp7TA7Yp5lG1eGOy5CHt9HyS8HfRqq-0-a4155ec456e6d98351971817794c75fd)
图2.17 使用for循环配合range()输出内容
除了for语句,Python还支持while循环语句。与for用于迭代不同,while循环是在满足一定条件时持续执行循环体内的语句,直到条件不成立时才跳出整个循环体。While语句的语法格式如下所示。
![](https://epubservercos.yuewen.com/6731C4/15825992804146606/epubprivate/OEBPS/Images/Figure-T43_22382.jpg?sign=1739522832-a2SiAJBn0pDuh2C1puS87e6ZzFvSAymF-0-d36a17a51691af3863ef6588ef31702d)
由于while循环的这种特性,因此在循环体内需要有条件判断表达式不成立的情况,否则循环就会一直持续下去,就成“死循环”了。在实际编程中应避免死循环的出现。
【范例程序2-10】求N个整数的平均值
分析问题:
(1)首先从键盘读取N个整数:使用input()函数,强制转成int类型。
(2)每次读取到的整数需要累加起来,获得总和:定义变量sum,存储累加的总和。
(3)除以N,可得平均值:定义变量average存储平均值,average = sum / N。
(4)将N输出、sum输出、Average输出。
提示
这里连续输出N个数字,要用到while循环语句。
范例程序2-10的代码
![](https://epubservercos.yuewen.com/6731C4/15825992804146606/epubprivate/OEBPS/Images/Figure-T43_22383.jpg?sign=1739522832-KXY3t4PFdw0vBNAZjCYWaAvyr7K2WHL5-0-7271ac1a6a3a2be2abb57a84fdd3c7e9)
提示
print()函数在输出字符串时,使用print("hello,world!")的方式,而在输出数字时要调用format这个方法。
以上代码先定义了几个变量,然后通过循环获取用户每次的输入,同时计算相应的数值,最后将计算结果输出。将这段代码保存到程序文件2-11.py中,执行该程序,结果如图2.18所示。
![](https://epubservercos.yuewen.com/6731C4/15825992804146606/epubprivate/OEBPS/Images/Figure-P44_5395.jpg?sign=1739522832-0eee4P41ZA2QH0nGAfi3lqEzmkWP2Z8b-0-0477997bdab7c592c1d43526ce802ccb)
图2.18 使用while循环求N个整数的平均值