- 人工智能开发语言:Python
- 潘风文 潘启儒
- 1863字
- 2020-08-28 05:52:05
3.5 控制语句
任何编程语言,都具有三种基本控制语句结构。
① 顺序控制结构(Sequential Structure):按照语句的编写顺序执行程序;
② 条件控制结构(Conditional Structure):按照一个布尔表达式的值(真/假),有选择地执行两个子程序中的一个;
③ 循环控制结构(Loop Structure):以某个布尔表达式的值为循环条件,只要其值为真,则一直执行某个子程序。
下面我们主要讲解一下在Python中如何实现选择结构、循环结构。
3.5.1 条件控制结构(if…else)
在Python中,实现条件控制的语句是if…else语句,条件语句控制结构流程图见图3-10。其基本语法形式是:
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/204.jpg?sign=1739182831-Oc9zhIFQs63XFKfcJNJTNd0WhJ7pzcZo-0-b8e4e592cc3a980507d218c51543c041)
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/3-10.jpg?sign=1739182831-BTwtxSygPAN72dRMxP5GfPDQSQuaJbq6-0-3bba219254133421f6c1f1adc419fb01)
图3-10 条件语句控制结构流程图
开发者需要注意以下两点:
语句块1、语句块2中的多条语句的缩进必须一致,否则程序会只执行部分语句,可能引发异常或逻辑错误;
表达式两边可以没有小括号,但是从可读性方面考虑,建议添加。
在实际开发中,if…else语句可以有以下几种应用形式:
① 单分支(无else情况);
② 双分支;
③ 多分支;
④ 嵌套if语句。
3.5.1.1 单分支形式
单分支形式是最简单的if…else语句结构形式,其语句格式如下:
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/208.jpg?sign=1739182831-qs3qlZlAPbKpDRPwvJytIU0gKjhOESYG-0-0a4c749cc19656a398d80da1a2f44564)
这种形式用于有条件地执行特定操作,即如果表达式为真,则执行下面的语句块,否则跳过,转而去执行if语句结构下面其他语句。单分支条件语句控制结构流程图见图3-11。
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/3-11.jpg?sign=1739182831-nsLEDEr3VVpClMVszWxhjkJ8m2uPYypm-0-94f234a9388bb5a2fbca9be210336859)
图3-11 单分支条件语句控制结构流程图
如下面的例子:
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/210.jpg?sign=1739182831-DdkRNOZsq5WQuIWCUjPtCje5ctFAK98D-0-da904faac5f3fab2618e7f3a92063f81)
输出结果为:
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/211.jpg?sign=1739182831-WTNK54ngCylHYicmWlQulKvDzp9jB3nb-0-98f8baf96058cc9c7066e5a94f98cc09)
3.5.1.2 双分支形式
双分支形式语句格式如下:
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/212.jpg?sign=1739182831-ngEL6CJRBrr1Fg3h6ly0CyDCxuKHl0by-0-d4479fe8f71291577f9e86265987d486)
举例如下:
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/213.jpg?sign=1739182831-18CvBZUWYJps9tDnmChD217dAIdjW6wx-0-6f5bf46c198c9e15246f423b609f9159)
上面的代码中,x<y为条件表达式,输出结果为:0
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/214.jpg?sign=1739182831-D0MA83yPLp6G4cauenuk3wvyr6DMgsFh-0-ea3e2efae12898e370f980b3f0f0204a)
3.5.1.3 多分支形式
适合多分支形式语句格式如下:
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/215.jpg?sign=1739182831-VPjQeRRmhvftAbLSHyIH3Dzk6vcEsEbj-0-5f333784bb7ac4d0358bf191d8ed33a6)
多分支条件语句控制结构流程图见图3-12。
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/3-12.jpg?sign=1739182831-O08OvhjWdgAGmmtQb49AVZwdmOpWAJYz-0-560895b25d20c527a49ecf17cdfc97c7)
图3-12 多分支条件语句控制结构流程图
如某个电商平台根据注册用户的月均消费额度进行等级划分,代码如下:
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/217.jpg?sign=1739182831-6Vxkx3j83BOvJPvqvFFeTWfZxXRZKFnB-0-355f393e07f95005e541ec23b5661d9e)
3.5.1.4 嵌套形式
可以把一个if...else结构编写到另外一个if...else语句结构中,形成所谓的嵌套形式,这对于比较复杂的判断特别有用。由于语句的缩进是区别不同嵌套层次的唯一方法,因此嵌套层次越多,可读性越差,在实际编程中,尽量避免多层嵌套。
嵌套形式的if...elf语句的格式如下:
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/218.jpg?sign=1739182831-UYIdUUNbDpGcYRCRFPOVfwNbUdtRJR65-0-e3a3e4f1b9fa564ec8c7d0bc4457f917)
嵌套可以放在If子句、elif子句、else子句下。下面举例说明。
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/219.jpg?sign=1739182831-KOGZIL7hJ6dvIX5IeyWDisw3NNnFlRoQ-0-e00d21d464cd13c50c0ab88768ae6aa8)
如果输入78,则输出如下:
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/220.jpg?sign=1739182831-YwvYGOjSh38RwolFclHdHizicmUvPcxt-0-2e43e20052667f25a3c790c16a1dcbee)
另外,在Python中,没有类似C++、Java中的switch语句。
3.5.2 循环控制结构(for/while)
循环控制结构是指在满足某个条件下重复执行指定语句的结构。Python中有两种循环控制结构,分别是for循环和while循环。
3.5.2.1 for循环
for循环非常适合对可迭代对象(如列表list、元组tuple、字符串str等)进行遍历。其基本语法如下:
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/221.jpg?sign=1739182831-QDSQISidPgsP8AOmgGPK0oLUCnd7tHQV-0-1dd560c14c4d2d482b47ec465342ade6)
同if...else语句一样,这里的语句块也是通过代码缩进与其他语句进行区分的。
for循环控制结构流程图如图3-13所示。
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/3-13.jpg?sign=1739182831-WJyDkDsPpwUnPtquq3prs2FtEN6jmvHj-0-d44ceaa2c579d2d5fa2c704579602188)
图3-13 for循环控制结构流程图
下面的例子是计算一个数值型列表中所有数据的算术平均值:
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/223.jpg?sign=1739182831-R43MOZ3mR2jS7YUyr2ypT7z2nBgHBvkB-0-387c08f7afc9bc4ab68ef1b43538a131)
第13~15行为循环体,主要作用是计算总和及元素个数。输出结果如下:
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/224.jpg?sign=1739182831-Sy4gMly4H0WKq9XEfMqbI67zFhwU1nye-0-8bb0a7a4f3a14fe21adff72b296ed973)
另外,for循环可以有一个可选的else语句块,这个else语句块会在序列sequence中的元素循环完毕后执行。如:
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/225.jpg?sign=1739182831-72YJsCKWGVpQrWvusSoNcRnhHq0KWshN-0-ecd7a9c0326cca3c74a0d0a0df0cc2a7)
输出结果如下:
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/226.jpg?sign=1739182831-JxLVgAr0BqR9kzmhBK7mQdsQciw6WZeh-0-be52d1dad1fb10ffae4de2e99d579aa7)
3.5.2.2 while循环
while循环语句的语法格式如下:
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/227.jpg?sign=1739182831-6O50CdFVAYGG5PKdst4k78SV3biPvMfy-0-1efb08ab5ee377c44b42c35b85877746)
在while循环中,首先判断条件表达式是否为真(True),只有条件表达式为真时,while语句块才能被执行。执行完一次后,再次判断条件表达式是否为真,如果为真,则再次执行while语句块,依此循环,直到条件表达式为假(False)才退出while循环。While循环控制结构的流程图见图3-14。
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/3-14.jpg?sign=1739182831-VXBZV7AYFzvCASD73tCiNHnmInlmn6dk-0-cc5e1121a4deeffade6ee74c20aa5933)
图3-14 while循环控制结构流程图
例如:
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/229.jpg?sign=1739182831-rVTOm3iFXFQmwkz4Oc5CRkFGH0dlwDjQ-0-810eafe853fee7b1748066515485dc35)
输出结果如下:
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/230.jpg?sign=1739182831-IWdDxM3AJGOLNrgswJgC9T4WmCwSfzVf-0-4ff71ee99722fc42a34b8a001faf86e8)
同for循环一样,while循环也可以有一个可选的else语句块,这个else语句块是在条件表达式为假时执行的。如:
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/231.jpg?sign=1739182831-nUY4qZ06llFTO3aF26OjSMvb6MoYqwAc-0-1d734d06f8dfdec1dd61a3aec8229fa1)
输出结果如下:
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/232.jpg?sign=1739182831-Bvo66femIurM2yscEph59hxsNLWXA9Tp-0-b9ee1d7674159587b813445820dec302)
在while循环中,如果条件表达式一直为真,则一直循环。
3.5.3 转移控制结构
在Python中有几个能够控制程序流程转移的特殊语句,分别是break、continue、return和pass。
3.5.3.1 break/continue
有时我们希望在某次循环中停止当前循环或跳出整个循环语句,这时continue或break就派上了用途。
break语句可把流程转移到循环体后的代码中,从而退出包含它的循环体,其流程如图3-15所示。
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/3-15.jpg?sign=1739182831-ToHWojKiEq8VkxJzx8iui1J7hEPKPbTM-0-5f1ea0296905c29702df9235436d308c)
图3-15 break语句流程
图3-16所示为for循环结构中break语句转向图。
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/3-16.jpg?sign=1739182831-qa8oNM4EB26MMqySU3dcGuCWAsoiy34K-0-ca32ea7cb0cb928dfe6a50c25131d3b5)
图3-16 for循环结构中break语句转向图
举例如下:
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/235.jpg?sign=1739182831-Hu4Y8RaG66FAUfikPXXZwVS51kQnDAMW-0-39d0c2e3e437680ef09d4c68eb87f04f)
程序在for循环体内运行时,每次循环会判断flag是否等于“a”,当执行break语句时,会跳出循环体,直接执行循环体后面的代码。最终输出结果如下:
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/236.jpg?sign=1739182831-9lz0P66qkXgy4QjlmZFrgTZtfIGQZHkh-0-cb1ac26c6039ec179585db983e1f40d5)
与break语句相比,continue语句在条件为真时只跳过continue后的语句,转而进行下一次循环,并不会退出包含它的循环体。continue语句的流程图见图3-17。
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/3-17.jpg?sign=1739182831-W8YcF6iDychzxQXnbmNWLdmqB6DvBL0r-0-182dcd166285c6cb2b652689396d4193)
图3-17 continue语句流程图
图3-18所示为for循环中的continue语句转向图:
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/3-18.jpg?sign=1739182831-ELGkNR5jd9LoJDSNvuVo6eh4lnviYqMy-0-0bf6ab659f6f1aaa4e264fe04609900e)
图3-18 for循环中continue语句转向图
举例如下:
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/239.jpg?sign=1739182831-EHrb7gxonEwQbD1LWgONYFVjpyu8Hm5z-0-dcf7192fbca6e2187b47801266b063db)
最终输出结果如下:
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/240.jpg?sign=1739182831-3QLgCkS9fKmcTDcY0TnKAVUzlLznqHIY-0-4deb9dde7f3df42f196d9d1db0df6c33)
从上面的输出结果可以看出,当条件为真(flag=='a')时,continue只是在本次循环不执行其后的语句,并不影响下次循环执行其后的语句,更没有退出整个循环。
3.5.3.2 pass
在Python语言中,pass是一个比较特殊的语句,解释器会执行这个语句,但是不做任何操作,所以pass通常是作为占位符来出现的。例如我们在设计一个循环分支或一个函数,还不能确定业务逻辑,但又不能为空时,就可以用pass语句做占位符,准备留待将来实现。例如:
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/241.jpg?sign=1739182831-PKsPRPDh9EfCxiNjCqP2NJm5RkBSYsOT-0-ca6dbd8233b3da76056fadbb8e6d169b)