![代替VBA!用Python轻松实现Excel编程](https://wfqqreader-1252317822.image.myqcloud.com/cover/254/43738254/b_43738254.jpg)
1.11 流程控制
变量是计算机语言中最基本的语言元素,表达式用运算符连接变量构成一个更长的代码片段或者说一条语句,此时我们已经具备写一行语句的能力。在学完流程控制以后,我们将具备写一个代码块,即多行语句的能力。多行语句通过流程控制语句连接变量和表达式,形成一个完整的逻辑结构,是一个局部的整体。常见的流程控制结构有判断结构、循环结构等。
1.11.1 判断结构
判断结构测试一个条件表达式,然后根据测试结果执行不同的操作。Python支持多种不同形式的判断结构。判断结构用if语句进行逻辑判断。
1. 单行判断结构
单行判断结构具有下面的形式:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/064-2.jpg?sign=1739592422-6PKjQE2YgTnBlTFk2SaczYLQcEJHVFPN-0-a248cbfbb8a11a4abc6329163d45c15d)
其中,判断条件常常是一个关系运算表达式或逻辑运算表达式,当条件满足时执行冒号后面的语句。
在下面的两行代码中,第1行用input函数实现一个输入提示,提示输入一个数字;第2行实现一个单行判断结构,判断输入的数字是否等于1,如果是,则输出字符串"输入的值是1"。该文件位于Samples目录下的ch01子目录中,文件名为sam01-01.py。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/064-3.jpg?sign=1739592422-JbHYT2PH1Z6nS1OtZYrAhWgfArHZhwG7-0-47974f5736950ac7b2a21ad38465591a)
在Python IDLE文件脚本窗口中,在“Run”菜单中单击“Run Module”选项,则IDLE命令行窗口提示“请输入一个数字:”,输入1,按回车键,显示下面的结果:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/064-4.jpg?sign=1739592422-qQkn1P5X9Cc7QNbJpoljL5YayBnkKEch-0-a2889ede551499dbf9fc6ca10cbc99ca)
2. 二分支判断结构
二分支判断结构具有下面的形式:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/065-1.jpg?sign=1739592422-1MzPtGwbGCguwp6gp9oMtcyuDFauKH1O-0-dccd92341f17a0d6e04b0a30d3b29b42)
当判断条件满足时执行第1个冒号后面的语句,当不满足时执行第2个冒号后面的语句。
下面的代码实现了一个二分支判断结构。该文件位于Samples目录下的ch01子目录中,文件名为sam01-02.py。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/065-2.jpg?sign=1739592422-J6XP7bjt4oVLLQYW7oWonzZYRGUsHN9P-0-d58e03996b9c2467e8cbae0be9c066a2)
第1行用input函数实现一个输入提示,提示输入一个数字;第2~5行为二分支判断结构,判断输入的数字是否大于0,如果是,则输出字符串"成功。",否则输出字符串"失败。"。
在Python IDLE文件脚本窗口中,在“Run”菜单中单击“Run Module”选项,则IDLE命令行窗口提示“请输入一个数字:”,输入5,按回车键,显示下面的结果:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/065-3.jpg?sign=1739592422-qz8S49E3UsYPjRUbnodiBwjPLJe6GD7g-0-f0db4c745dfd3832b9dc6737c727ccb2)
3. 多分支判断结构
多分支判断结构具有下面的形式:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/065-4.jpg?sign=1739592422-iEX4QNJhT1mv8YvnlulaVrx0V2HLE7L8-0-c041c36dbd8e6d165c3dbc641f487f28)
多分支判断结构提供多重条件判断,当第1个条件不满足时测试第2个条件,当第2个条件不满足时测试第3个条件,依此类推。当当前条件满足时执行相应的语句,最后都不满足时执行相应的语句。
下面的代码用一个多分支判断结构判断给定的成绩属于哪个等级。该文件位于Samples目录下的ch01子目录中,文件名为sam01-03.py。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/065-5.jpg?sign=1739592422-ARo4PokYJWHhYzcpURDtM45zybPD0ary-0-b34450fbf02f758503c6566144ed08c6)
第1行用input函数实现一个输入提示,提示输入一个数字;第2~11行为多分支判断结构,判断输入的成绩属于哪个等级。
在Python IDLE文件脚本窗口中,在“Run”菜单中单击“Run Module”选项,则IDLE命令行窗口提示“请输入一个数字:”,输入88,按回车键,显示下面的结果:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/066-2.jpg?sign=1739592422-igXag8YyNjymXjFXDOluLYK1PVH1M1hk-0-5cd1aaa0843603913e327f7447372152)
4. 有嵌套的判断结构
有嵌套的判断结构具有类似于下面的形式,如果分支条件满足,则进行次一级的条件判断和处理。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/066-3.jpg?sign=1739592422-aZEJLZH28yy3bXaacUEdCew25BRdrWVa-0-272031258abc4fe14eb08b34efc44972)
现在将前面对成绩分等级的示例进行改写,如下面的代码所示。该文件位于Samples目录下的ch01子目录中,文件名为sam01-04.py。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/066-4.jpg?sign=1739592422-F22pkSW4ScgbqENgzttbUTvOBJpSBCA2-0-e86d45cd5aa6baa60ef719a40ff8b767)
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/067-1.jpg?sign=1739592422-D8Ff5mb0oC7E0pbUpuQZoss08ia7JOqA-0-c6998eafdd21a5328dc5ac6ba39cbf95)
第1行用input函数实现一个输入提示,提示输入一个数字;第2~12行为有两层嵌套的判断结构,判断输入的成绩属于哪个等级。外面第1层嵌套判断给出的成绩是否大于或等于60分,如果条件满足,则用一个多分支判断结构细分及格及以上的成绩等级,这是第2层判断结构。最后都不满足时表示成绩不及格。
在Python IDLE文件脚本窗口中,在“Run”菜单中单击“Run Module”选项,则IDLE命令行窗口提示“请输入一个数字:”,输入88,按回车键,显示下面的结果:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/067-2.jpg?sign=1739592422-TMP5Pp8aE9aCialsItEHwzzsKg6D43u9-0-0229b26732236edf962f4e0887273332)
下面再举一个判断闰年的例子。该文件位于Samples目录下的ch01子目录中,文件名为sam01-05.py。闰年包括世纪闰年和普通闰年。世纪闰年可以被400整除,普通闰年能被4整除,不能被100整除。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/067-3.jpg?sign=1739592422-PCKV85lXYYpG1YuavdTFAHyrU1F3JePj-0-f1935b8bcfc99b84fc4e101b5002bc71)
第1行指定用来判断的年份2020;第2~10行为有两层嵌套的判断结构,判断指定年份是不是闰年。首先判断年份是不是世纪闰年,即能不能被400整除;如果不能,则进一步判断是不是普通闰年。判断普通闰年用到两层嵌套,先判断年份是否能被4整除,如果能,则进一步判断是否不能被100整除。最后判断的结果保存在布尔型变量yn中。第11~14行输出结果,如果yn的值为True,则输出年份是闰年;否则输出年份不是闰年。
在Python IDLE文件脚本窗口中,在“Run”菜单中单击“Run Module”选项,则IDLE命令行窗口显示下面的结果:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/068-1.jpg?sign=1739592422-4tsm6fC8wyG74km38azY0BSyMwPxpBOF-0-193cbc0b102b26c6004b7dbc7f507a67)
5. 三元操作符
简单的二分支判断结构可以用类似于下面的三元操作表达式代替。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/068-2.jpg?sign=1739592422-z6GrGMluH0t3Q5aLa6EY6n1THivvcNBa-0-111f9e47f15e5acd9cce40f77741fc03)
如果判断条件满足,则结果为b,否则结果为a。
下面用三元操作表达式判断给定的数是否大于或等于10。该文件位于Samples目录下的ch01子目录中,文件名为sam01-06.py。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/068-3.jpg?sign=1739592422-T4re2szPWJ6R417RqFVIRqNkIhSR4uNn-0-c07e67711a4b90dd633dd86d348aab2b)
第1行用input函数实现一个输入提示,提示输入一个数字;第2行用三元操作表达式判断输入的数是否大于或等于10,如果是,则输出字符串">=10",否则输出字符串"<10"。
在Python IDLE文件脚本窗口中,在“Run”菜单中单击“Run Module”选项,则IDLE命令行窗口提示“请输入一个数字:”,输入15,按回车键,显示下面的结果:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/068-4.jpg?sign=1739592422-N8L6lnWWupn7O3wH9t088PQc5zxjp8CH-0-b84bc847a0209ed8cbe5ffee1f89c9b0)
下面用三元操作表达式求给定的三个数中的最小值。该文件位于Samples目录下的ch01子目录中,文件名为sam01-07.py。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/068-5.jpg?sign=1739592422-gL4Az5SbX2po2aAUAzRCZ9XeaBDOpn0O-0-b70a8e4ff10b0617858233e77626204f)
第1行给定三个数10、30和20,分别赋给变量x、y和z;第2行用三元操作表达式比较x和y的大小,将二者的较小值赋给变量small;第3行用三元操作表达式比较small和z的大小,将二者的较小值赋给变量small;第4行输出small的值。
在Python IDLE文件脚本窗口中,在“Run”菜单中单击“Run Module”选项,则IDLE命令行窗口显示下面的结果:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/068-6.jpg?sign=1739592422-Lx0OYTiEbmIAz08xQowcwapPpPReZmiV-0-2b1de147a0e39bca64dc9faa6bd2ace7)
1.11.2 循环结构——for循环
循环结构允许重复执行一行或数行代码。
1. for循环
使用for循环可以遍历指定的可迭代对象,即针对可迭代对象中的每个元素执行相同的操作。for循环的语法结构为:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/069-1.jpg?sign=1739592422-4IjOFMMBvXzE6YBa0ZaHXMhFm6si0tSG-0-d4d6d42d9e290ad2e676ae1a188a6b95)
可迭代对象包括字符串、区间、列表、元组、字典、迭代器对象等。
下面对字符串应用for循环,逐个输出字符串中的每个字符。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/069-2.jpg?sign=1739592422-0Gqc3uw8vsdUQUI879MQGTPZVd5OKha5-0-253cbddde76394ae1ca14bb41b302414)
输出结果为:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/069-3.jpg?sign=1739592422-6FXalzMUD4tq4veuGR6XQzWlZrudaTU1-0-f58f370454e110c1232226330cb35fc8)
下面对区间应用for循环,逐个输出区间中的每个数字。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/069-4.jpg?sign=1739592422-uX54xc4Q7SC6s74N3rOJwlsDYN3zpmSg-0-c415969f5a2777b706905266c7c60d2d)
输出结果为:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/069-5.jpg?sign=1739592422-tbEUabuPIRtPYFyIlWflWTNfUUHFD6CP-0-eaed0017be1aa3945fcd1b7203e4b6e9)
下面对列表应用for循环,逐个输出列表中每个城市的名称。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/069-6.jpg?sign=1739592422-Wcd4tKEPNuRiHasOvWvAxBE6pNpssAT0-0-4974fcb8ed41941d4706aff0c8bfd208)
输出结果为:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/069-7.jpg?sign=1739592422-SiJWcGHYC8DuBgSVMGiCMGiP3ANASi8I-0-66a3c416f21ae3c62d7dafc7e8b2c086)
对于列表,也可以使用区间,结合列表索引来输出列表中的元素。下面通过索引输出列表中各城市的名称。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/070-2.jpg?sign=1739592422-mxulvDRwK5T93OG39dOxs6myULZ8UO8Z-0-26356588bf7b65a469e35d07368db7b7)
输出结果为:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/070-3.jpg?sign=1739592422-PpI27V4sqLdvT07fugs39M0UCvFM9RO7-0-ad1b2f946824aaa5e21a56200b5a625e)
下面对元组应用for循环,逐个输出元组中每个元素的数据。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/070-4.jpg?sign=1739592422-dUadFK5s82qYrCW4t7EiCRVRC5aOy4tF-0-b919bd531711cc69810d6976e17ccbfb)
输出结果为:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/070-5.jpg?sign=1739592422-GE2ZSNrkUPqxPRyM8TPrrhn5ue9lOILi-0-e1f374f7fe13013d2ebc3e2226fbdbb8)
下面对字典应用for循环,逐个输出字典中各项的键、值和键值对。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/070-6.jpg?sign=1739592422-cZxo42HCufRwZWaiX0mma9jxTtWWmSAi-0-77d0bb58061502371e12dc7791126e7f)
输出结果为:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/070-7.jpg?sign=1739592422-wXKG4vXZ17sXmvSDEj89B6mLQ3a9Bj6r-0-524e7edb3dac75fa1493b13a376f4303)
输出结果为:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/070-9.jpg?sign=1739592422-lc2ufIDhOkYsDVLCFWz8BAiYdqoPjrCM-0-d8600c51986c000ceddba7230a872f13)
输出结果为:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/071-3.jpg?sign=1739592422-VP1QemuDC3kwbfViV2bzOrGDrk9ByyZJ-0-b490b287f30f8620e1b5515a6641c4c5)
输出结果为:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/071-4.jpg?sign=1739592422-B66UuX3sXChg76nDcnAEVpJ9NXmZSGkD-0-00970181d2b732270c6bb8c644d1846d)
下面使用for循环对1~10的整数进行累加。该文件位于Samples目录下的ch01子目录中,文件名为sam01-08.py。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/071-5.jpg?sign=1739592422-SNmaVwmYDqCS18RRY4cDak5GxSiSLK8I-0-425768544542cdc05552b2e8fec125c9)
第1行给sum赋初值0,该变量记录累加和;第2行给num赋初值,该变量为for循环的迭代变量,逐个取区间1~10中的数;第3行和第4行使用一个for循环对1~10各数进行累加;第5行输出累加和。
在Python IDLE文件脚本窗口中,在“Run”菜单中单击“Run Module”选项,则IDLE命令行窗口显示下面的结果。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/071-6.jpg?sign=1739592422-4AKAcP2eBzdRh1Gon682zBfd4uC8LxFZ-0-d3f8518d5b473db8b1ae29d5d22f1693)
2. for…else用法
for循环还提供了一种for…else用法,else中的语句在循环正常执行完成时执行。下面判断一个整数是不是质数。判断一个整数是否是质数的算法是,用2到这个整数的区间内的每个数作为除数去除该整数,如果该整数能被至少一个数整除,那么它就不是质数,否则是质数。该文件位于Samples目录下的ch01子目录中,文件名为sam01-09.py。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/071-7.jpg?sign=1739592422-FSbVABUu1Ov7g6GA8wJEfxVxFk9zFuDR-0-6d2dad55f4241402fcd3abdd71a7cda0)
第1行使用input函数输入一个整数;第2~7行使用一个for…else结构判断给定的整数是不是质数。只要出现n能被2至n中的某个数整除的情况就中断循环,输出它不是质数;如果遍历完后没有出现这种情况,则输出它是质数。
在Python IDLE文件脚本窗口中,在“Run”菜单中单击“Run Module”选项,则IDLE命令行窗口提示“请输入一个数字:”,输入5,按回车键,显示下面的结果:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/072-2.jpg?sign=1739592422-JAIAZyIftCiwTZvbflTEFCPZNG16bDi3-0-6e4565a494edb302ee20304f497d3678)
再次运行,输入9,按回车键,显示下面的结果:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/072-3.jpg?sign=1739592422-9cWZqyTzf74T9fZQYGeaiA65ADTLOvD9-0-95dd2cdd7b14c9b99873914c733523ca)
3. for循环嵌套
下面用两层嵌套的for循环生成九九乘法表。该文件位于Samples目录下的ch01子目录中,文件名为sam01-10.py。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/072-4.jpg?sign=1739592422-e2oFratVEbGJzw9U3Ma8QZINhydh2Bw9-0-4aa968cde46c70e02f0848727502e740)
第1行用for循环的迭代变量i在1~9中逐个取值,给出各乘式的第1个因子;第2行对变量s初始化为空字符串,该变量记录一行乘式;第3行用内层for循环的迭代变量在1~i之间逐个取值,作为各乘式的第2个因子,因为在1~i之间取值,最后得到的乘法表是一个下三角的形状;第4行用字符串对象的format函数格式化组装乘式,各乘式之间用制表符间隔;第5行输出当前行的所有乘式。最后,九九乘法表的所有乘式就是这样一行一行生成的。
在Python IDLE文件脚本窗口中,在“Run”菜单中单击“Run Module”选项,则IDLE命令行窗口显示下面的结果:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/072-5.jpg?sign=1739592422-ySPDSlcuHan8VMbhuPkSji1Dby0h3zO6-0-3484e4059dc23a2c6af52f181e860f0e)
1.11.3 循环结构——while循环
for循环遍历指定的可迭代对象,该对象的长度即对象中元素的个数是确定的,所以循环次数是确定的。还有一种情况,就是一直循环,直到满足指定的条件为止,此时循环次数是不确定的,事先未知。这种循环用while循环来实现。while循环可有多种形式。
1. 简单的while循环
单行while循环的形式为:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/073-2.jpg?sign=1739592422-3h1AcPpCNBhqFtzPg2yfYKHF5NUmzuOT-0-30bb29bf5213bb201092f96774590809)
其中,判断条件为一个关系运算表达式或逻辑运算表达式,当满足条件时执行冒号后面的语句。
下面用简单的while循环求1~10的累加和。该文件位于Samples目录下的ch01子目录中,文件名为sam01-11.py。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/073-3.jpg?sign=1739592422-doziIuiREpDA8VaRKokkrgmyfRWrkOVq-0-d4101704ab3368505a516cb16238a596)
第1行给sum赋初值0,该变量记录累加和;第2行给num赋初值,该变量为while循环的迭代变量,逐个取区间1~10中的数;第3~5行用一个while循环对1~10各数进行累加;第4行进行累加计算;第5行对迭代变量的值加1,取下一个值;第6行输出累加和。
在Python IDLE文件脚本窗口中,在“Run”菜单中单击“Run Module”选项,则IDLE命令行窗口显示下面的结果:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/073-4.jpg?sign=1739592422-qOScFwv0EZPKBDiX7ZDR696qqkOrTRVR-0-ea6cf5cdc5775fffebeb54efa37e23d7)
2. 有分支的while循环
有分支的while循环结构中有else关键字,形式为:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/074-1.jpg?sign=1739592422-XBcQEJrUIHS5fO7wSKf6tWZjiIeTANFk-0-26ff6d74681e50630fddfae80b81b107)
当判断条件满足时,执行第1个冒号后面的语句;当不满足时执行第2个冒号后面的语句。
下面改写对1~10累加求和的例子。当迭代变量的取值大于10时给出提示。当然,在实际编程时没必要这么做,这里是为了演示循环结构。该文件位于Samples目录下的ch01子目录中,文件名为sam01-12.py。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/074-2.jpg?sign=1739592422-uqUon9caQZCPuc6tIWLjdsg0kNpxOF46-0-ddee718c7727bc0ffe4b60f559284419)
第1~5行实现累加求和;第6行和第7行在n的值大于10时给出提示;第8行输出累加和。
在Python IDLE文件脚本窗口中,在“Run”菜单中单击“Run Module”选项,则IDLE命令行窗口显示下面的结果:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/074-3.jpg?sign=1739592422-TEWpwewWd7cTk04xYN6Xq8gsXn7IcUjS-0-73e46357f1559343b0fce6975de68f52)
3. while循环嵌套
下面用嵌套的while循环生成九九乘法表。该文件位于Samples目录下的ch01子目录中,文件名为sam01-13.py。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/074-4.jpg?sign=1739592422-QAGY8FEyxXuXyMnpJs7BmwdNra5uUR4d-0-bd8abd94e496c0a9798238cdac01b15f)
第1行给变量i赋初值0,变量i是外层循环的迭代变量;第2~8行生成九九乘法表,在外层循环中,迭代变量i的值每迭代一次加1,直到等于9,每次迭代都用内层循环生成乘法表中的一行;第6~8行为内层循环,判断条件为迭代变量j的值小于i,对j累加,生成当前行的乘式;第9行输出乘法表。
在Python IDLE文件脚本窗口中,在“Run”菜单中单击“Run Module”选项,则IDLE命令行窗口显示下面的结果:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/075-1.jpg?sign=1739592422-BQQjjFl8Gs533QX9APsAtlbbXiqed59J-0-4377dbb0f99c1312369fbfd166a35079)
while循环还可以和for循环嵌套,下面将内层while循环改写成for循环生成九九乘法表。该文件位于Samples目录下的ch01子目录中,文件名为sam01-14.py。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/075-2.jpg?sign=1739592422-WrdkZ2QauYKt6up7d3m2YkO7jEN7QYvQ-0-8e22a5471fe22c8741a8adacd0a94366)
请大家自行解读代码,这里不再赘述。
4. 避免死循环
前面讲过,for循环的循环次数是确定的,它的循环次数就是所用可迭代对象的长度。while循环的循环次数则不确定,如果判断条件一直满足,则可以一直循环下去,即进入“死循环”的状态。此时,可以使用break语句跳出循环。在命令行窗口中出现这种情况,可以按“Ctrl+C”键终止循环。
1.11.4 其他结构
本节介绍其他几个命令语句,包括break、continue和pass语句等。
1. break语句
break语句用在while循环或for循环中,在必要时用于终止和跳出循环。
下面用for循环对给定的数据区间进行累加求和,要求累加和的大小不能超过100;否则,使用break语句终止和跳出循环。该文件位于Samples目录下的ch01子目录中,文件名为sam01-15.py。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/076-1.jpg?sign=1739592422-nDDgCebLR8ChjTQzzePYuNAn5AhyYhsU-0-59f8fbc4bfc8bd37af46be9abb972b90)
第6行加了一个单行判断结构,当累加和大于100时使用break语句跳出循环。第7行和第8行分别输出最后小于100的累加和及其对应的数字。
在Python IDLE文件脚本窗口中,在“Run”菜单中单击“Run Module”选项,则IDLE命令行窗口显示下面的结果:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/076-2.jpg?sign=1739592422-kvSapdqBZWgqsVGk8vGc00SZphOFzEAZ-0-50a47645c959f8dac3f33727644647e7)
也可以在while循环中使用break语句跳出循环。使用while循环改写上面的程序。该文件位于Samples目录下的ch01子目录中,文件名为sam01-16.py。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/076-3.jpg?sign=1739592422-KGMKULCIZQgitzBfj1xdi4vmZKB6XDXs-0-e5fcc2607673330d888ae18472a21eb1)
运行该程序,输出相同的计算结果。
2. continue语句
continue语句与break语句的作用类似,都是用在循环中,用于跳出循环。不同的是,break语句是跳出整个循环,continue语句则是跳出本轮循环。
下面的for循环输出0~4区间内的整数,但是不输出3。该文件位于Samples目录下的ch01子目录中,文件名为sam01-17.py。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/076-4.jpg?sign=1739592422-VFgb8dtE3DS4FkzmEFWmgHy2WELrEcKS-0-0caac1b5f3038865873944cbb1112295)
第2行用了一个单行判断结构,当迭代变量取值为3时使用continue语句跳出本轮循环。
在Python IDLE文件脚本窗口中,在“Run”菜单中单击“Run Module”选项,则IDLE命令行窗口显示下面的结果:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/077-1.jpg?sign=1739592422-mXohyFMyNKu8a3AJ6rvjfhZVPsuuH93h-0-c407c30cb16232e2c814eeddd628ea82)
可见,整数3没有输出。
3. pass语句
pass语句是占位语句,它不做任何事情,只用于保持程序结构的完整性。在判断结构中,当判断条件满足时,如果什么也不执行,则会出错。例如,在文件或命令行中执行下面的语句会出错:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/077-2.jpg?sign=1739592422-YoodTWYkPlcSdu4UotU8mA689LxBasjr-0-8601d9732097392e67010eb99036304c)
此时将pass语句放在冒号后面,虽然还是什么也不做,但保证了语法上的完整性,就不会出错了。即:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/077-3.jpg?sign=1739592422-vMH4ssrW5RoVE5zfjnlEpPh5gK7oz1xH-0-caff13b6689e27c1a604a67734c16cd8)
另外,在自定义函数时,如果定义一个空函数,也会出错。此时在函数体中放一个pass语句,就不会出错了。