![人工智能开发语言:Python](https://wfqqreader-1252317822.image.myqcloud.com/cover/281/29974281/b_29974281.jpg)
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=1739234935-Aop2f7eVyQwzwbczJGAaO3F0Bk5jhHFO-0-f3e6f0667a6292bfa7d55f8b06519474)
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/3-10.jpg?sign=1739234935-6bcCiTF6uaDb6aef3O6pH5YIKoio6C3K-0-964def459e19aefc02d7b3ac66400104)
图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=1739234935-i4H4Fz0xHWyEaBlaQu3vFNqWt6oP0SUX-0-ac60a4bf42368b8e6a3ed1167dbec773)
这种形式用于有条件地执行特定操作,即如果表达式为真,则执行下面的语句块,否则跳过,转而去执行if语句结构下面其他语句。单分支条件语句控制结构流程图见图3-11。
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/3-11.jpg?sign=1739234935-Bc3FSajNcDbZclODvXXL9382k5rm4Ruv-0-29eeee510510f7e276ad78f26046b30d)
图3-11 单分支条件语句控制结构流程图
如下面的例子:
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/210.jpg?sign=1739234935-j46QsuCjG9Kxuw1q14E9D73fnSw6ym9L-0-63c9c349d423281d1eda61a287f16230)
输出结果为:
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/211.jpg?sign=1739234935-2BzmGelO2fXu7YECdhjW7ie3XIs6n8Nr-0-4d38a1b8e1d9a7b358ef060e75491129)
3.5.1.2 双分支形式
双分支形式语句格式如下:
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/212.jpg?sign=1739234935-5BhftkOJ6venGbl6NyM7Hn18F6FL1MkO-0-50d85acc35101fda86fad69092d99688)
举例如下:
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/213.jpg?sign=1739234935-4lIFi0uFnYlKGLI7oiGlfgIVYpmPKJyB-0-8e0bbe070afb4498b7f7f0c92f5b413e)
上面的代码中,x<y为条件表达式,输出结果为:0
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/214.jpg?sign=1739234935-f85CuxeNFZuWqz73cGHnWALaTrm9sJWo-0-021ee8409095c60ea1c6f2dda586512c)
3.5.1.3 多分支形式
适合多分支形式语句格式如下:
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/215.jpg?sign=1739234935-SmwbGFJu2E5IfT7bTjLZS80B2k6Ek8fg-0-29f7010ac23086e8715ce9a93e5235dc)
多分支条件语句控制结构流程图见图3-12。
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/3-12.jpg?sign=1739234935-1xesD8uXj4cUmileqwxhPNoPrVOGxrkp-0-44a981c7dadaf2ceea6794fd377530bc)
图3-12 多分支条件语句控制结构流程图
如某个电商平台根据注册用户的月均消费额度进行等级划分,代码如下:
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/217.jpg?sign=1739234935-aerytQl6B5xybCBulJFTvgA3LPSDXRxj-0-a13426068ee7c1af47a535af82aee521)
3.5.1.4 嵌套形式
可以把一个if...else结构编写到另外一个if...else语句结构中,形成所谓的嵌套形式,这对于比较复杂的判断特别有用。由于语句的缩进是区别不同嵌套层次的唯一方法,因此嵌套层次越多,可读性越差,在实际编程中,尽量避免多层嵌套。
嵌套形式的if...elf语句的格式如下:
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/218.jpg?sign=1739234935-UGMcuKyWR5lb0ReBHZRADQyn7t74Kler-0-60ed8eec31522b50ed001a467222d971)
嵌套可以放在If子句、elif子句、else子句下。下面举例说明。
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/219.jpg?sign=1739234935-seHeOlXCV7pLEEm0eXriXLxgXAm9wWe1-0-34a9f38a1c3179bbe8ee5bcee55bd00d)
如果输入78,则输出如下:
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/220.jpg?sign=1739234935-rHeoBtEiu3BHvHl4AM2Ryq1Kf1JnZLNF-0-0447ddc04cf897584aca0fb55f2b6d59)
另外,在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=1739234935-bcTXL0biubCuv7O8YwmXSOMQrHLG0yge-0-b7e0cb4a8af5bae0fa72cbe2499efb84)
同if...else语句一样,这里的语句块也是通过代码缩进与其他语句进行区分的。
for循环控制结构流程图如图3-13所示。
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/3-13.jpg?sign=1739234935-xOzaDjtffVEqdBAuJURUxSyy9slbuuym-0-35a66f480b9cadf6fffb914d4b227509)
图3-13 for循环控制结构流程图
下面的例子是计算一个数值型列表中所有数据的算术平均值:
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/223.jpg?sign=1739234935-NFl4kfXf4RRl8VovcCYHQThVtKmhQAmy-0-a10911b9eaf72a8c8356909f560a0787)
第13~15行为循环体,主要作用是计算总和及元素个数。输出结果如下:
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/224.jpg?sign=1739234935-qguK77CSE088w82nJzhGrhaeIApW62lG-0-1acbc153af1619bf526c11c149fd266b)
另外,for循环可以有一个可选的else语句块,这个else语句块会在序列sequence中的元素循环完毕后执行。如:
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/225.jpg?sign=1739234935-hdr3Sg1uFIQDPnrPQa4Ad81Mnkd5LuBJ-0-46ed444e4df5c0963a52ef6edf224cb1)
输出结果如下:
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/226.jpg?sign=1739234935-6CCH49hvbjQsbA0EURZqgcszquVHdmf8-0-198a6514ffb7f5887b4954be017fe49a)
3.5.2.2 while循环
while循环语句的语法格式如下:
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/227.jpg?sign=1739234935-5AkXOreCJnn3RpbY4zwjso6riDNOpmcx-0-4639270e9e8a9a3e2b2beaa80c77bed8)
在while循环中,首先判断条件表达式是否为真(True),只有条件表达式为真时,while语句块才能被执行。执行完一次后,再次判断条件表达式是否为真,如果为真,则再次执行while语句块,依此循环,直到条件表达式为假(False)才退出while循环。While循环控制结构的流程图见图3-14。
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/3-14.jpg?sign=1739234935-2vb0H1hMs7jsY4WFOiMTOXywraKcif4h-0-4c3d8c9a72b28217f83ef991993f303b)
图3-14 while循环控制结构流程图
例如:
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/229.jpg?sign=1739234935-H8zaBDdJmiUoTjeFpiflWKu7irSSVRU3-0-234d5f35199d780f9a8f7a614314b9b3)
输出结果如下:
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/230.jpg?sign=1739234935-ChEPEQudsLWASmV0glJJzengDlDAOEri-0-2d36eac913c545e9095291ea992a8511)
同for循环一样,while循环也可以有一个可选的else语句块,这个else语句块是在条件表达式为假时执行的。如:
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/231.jpg?sign=1739234935-nMbENzAeJjPx5o7QDSZADHJ72T6kBZDU-0-c790aa6f223929ac57470ea94893d1e8)
输出结果如下:
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/232.jpg?sign=1739234935-6WJeOVVZK1pj0dTcK6LoOvE14xcWI8Oe-0-c546c8f2fc6f1c7942ef8a89a30deecc)
在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=1739234935-P3dObwBA2CK49BPaGRhaxA4JWvBBDvKg-0-17495247a96c56736d625567699b615e)
图3-15 break语句流程
图3-16所示为for循环结构中break语句转向图。
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/3-16.jpg?sign=1739234935-SzwKpIbnEOBsSqGbJp87GIlz6CLrN5A4-0-3f5632d2d19b91d98dff9bb88588b68c)
图3-16 for循环结构中break语句转向图
举例如下:
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/235.jpg?sign=1739234935-HuYlNEj6fBjW7PtJ5Kq9gdZfTX54z3Db-0-c95fe67762390390bf00741f63994512)
程序在for循环体内运行时,每次循环会判断flag是否等于“a”,当执行break语句时,会跳出循环体,直接执行循环体后面的代码。最终输出结果如下:
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/236.jpg?sign=1739234935-IxSX4YYhdvePQbV60cmKk6EXPn5pzK6E-0-e7b9a2742e1ee97d56797f0b5f85e3a6)
与break语句相比,continue语句在条件为真时只跳过continue后的语句,转而进行下一次循环,并不会退出包含它的循环体。continue语句的流程图见图3-17。
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/3-17.jpg?sign=1739234935-nkSAxIR1b3H6vBany9mG7mwrElsLnq64-0-8a93d9eb5c3cdf974a9985a56c7dba98)
图3-17 continue语句流程图
图3-18所示为for循环中的continue语句转向图:
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/3-18.jpg?sign=1739234935-JL7UM2pABV01rWWeRjEW8aP7xu2nfImC-0-4cae17133cbc05d2b25ddc05a8524cc0)
图3-18 for循环中continue语句转向图
举例如下:
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/239.jpg?sign=1739234935-NUXOD3iCboyntD9szQHtg9WBJ5lXa8Je-0-3794130949be1f3a188fda908ac9455a)
最终输出结果如下:
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/240.jpg?sign=1739234935-ZoF4XZ9en1QylIjQDgtmmKSk1Bui0YIn-0-94f65e571b94d699b82e59aca601e870)
从上面的输出结果可以看出,当条件为真(flag=='a')时,continue只是在本次循环不执行其后的语句,并不影响下次循环执行其后的语句,更没有退出整个循环。
3.5.3.2 pass
在Python语言中,pass是一个比较特殊的语句,解释器会执行这个语句,但是不做任何操作,所以pass通常是作为占位符来出现的。例如我们在设计一个循环分支或一个函数,还不能确定业务逻辑,但又不能为空时,就可以用pass语句做占位符,准备留待将来实现。例如:
![](https://epubservercos.yuewen.com/B65D95/16499757104598206/epubprivate/OEBPS/Images/241.jpg?sign=1739234935-WNmGboBGIYRxPqMGrjFIry2wYLiOj1Dn-0-62c0af3b63f0891a8f33455779e583b7)