![代替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=1739150390-apWcr4LNsdVNDtXuFsFofITthbiXxKnA-0-272411cbc5de8bbdcf90e27599811603)
其中,判断条件常常是一个关系运算表达式或逻辑运算表达式,当条件满足时执行冒号后面的语句。
在下面的两行代码中,第1行用input函数实现一个输入提示,提示输入一个数字;第2行实现一个单行判断结构,判断输入的数字是否等于1,如果是,则输出字符串"输入的值是1"。该文件位于Samples目录下的ch01子目录中,文件名为sam01-01.py。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/064-3.jpg?sign=1739150390-VyxfGkqBwIJjpwGUsoMDAZ2cSff2Lw3r-0-fa95ac782a3265e35dc71cd44e5ae78c)
在Python IDLE文件脚本窗口中,在“Run”菜单中单击“Run Module”选项,则IDLE命令行窗口提示“请输入一个数字:”,输入1,按回车键,显示下面的结果:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/064-4.jpg?sign=1739150390-NNZ0BtS2V7YzPsLdpMJiZwaoApkTpYjF-0-f146369726b1821621d32371bd81e847)
2. 二分支判断结构
二分支判断结构具有下面的形式:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/065-1.jpg?sign=1739150390-6b0hDvJ885wJXb0MhEvICizgjTRDE1xQ-0-f0042c79ae10d449561fd30fabbbfd93)
当判断条件满足时执行第1个冒号后面的语句,当不满足时执行第2个冒号后面的语句。
下面的代码实现了一个二分支判断结构。该文件位于Samples目录下的ch01子目录中,文件名为sam01-02.py。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/065-2.jpg?sign=1739150390-gZuwTnQCwaY9pwLp1OIOiaJTwawruEin-0-210cfaea35d08e0bc36bffc9d54fdbc9)
第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=1739150390-eW3EZdKoicYqamHnbstyJUnhLut16JlJ-0-427164d9590dd6d26853026524658d72)
3. 多分支判断结构
多分支判断结构具有下面的形式:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/065-4.jpg?sign=1739150390-FDiUWVyQK2svbODaILy3BPqP4sjtexVe-0-eed2dfd246eefb713b100a32cc3531bf)
多分支判断结构提供多重条件判断,当第1个条件不满足时测试第2个条件,当第2个条件不满足时测试第3个条件,依此类推。当当前条件满足时执行相应的语句,最后都不满足时执行相应的语句。
下面的代码用一个多分支判断结构判断给定的成绩属于哪个等级。该文件位于Samples目录下的ch01子目录中,文件名为sam01-03.py。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/065-5.jpg?sign=1739150390-1lLj9BSgCw6k64Y9j70vauU3f8wiilZc-0-af185c5422cb6e1c2f6d9fb03896cd05)
第1行用input函数实现一个输入提示,提示输入一个数字;第2~11行为多分支判断结构,判断输入的成绩属于哪个等级。
在Python IDLE文件脚本窗口中,在“Run”菜单中单击“Run Module”选项,则IDLE命令行窗口提示“请输入一个数字:”,输入88,按回车键,显示下面的结果:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/066-2.jpg?sign=1739150390-F2DwEEFStDxyq694frKQEd9j9MlCwwbP-0-7a2def47a831e8a0e009d9661fb34a06)
4. 有嵌套的判断结构
有嵌套的判断结构具有类似于下面的形式,如果分支条件满足,则进行次一级的条件判断和处理。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/066-3.jpg?sign=1739150390-nQ4obDlbBO4yYhRHZAe1kBwVy0rEBknb-0-f03c465dfc83edfc7d6a688277ad11ec)
现在将前面对成绩分等级的示例进行改写,如下面的代码所示。该文件位于Samples目录下的ch01子目录中,文件名为sam01-04.py。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/066-4.jpg?sign=1739150390-Ptp2VTSJDC9fBYI4drgBQuFiuVnVDi3V-0-4a22e8f4bead12d41e58d28a9bbd3c3d)
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/067-1.jpg?sign=1739150390-OqwLT1u21AUdRItQqj5vpFgfbAC7TQvw-0-0a9496884520cab9fe64bac8c810995e)
第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=1739150390-mIRnVbmWtmOnvW4n832q2Q2OBa0FHLIz-0-5bcf0fc8a244165990d65b08649a5920)
下面再举一个判断闰年的例子。该文件位于Samples目录下的ch01子目录中,文件名为sam01-05.py。闰年包括世纪闰年和普通闰年。世纪闰年可以被400整除,普通闰年能被4整除,不能被100整除。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/067-3.jpg?sign=1739150390-tvzoQB0pbdpGswo4QlzUHuuHbvYT22w4-0-3663f245eab9e0441ad1d76d0c0393d9)
第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=1739150390-eB6FxMxlzD630VeeWRIB8EQBlycB2vps-0-cf2c8b0b3f5e1d53266f44e2852374fb)
5. 三元操作符
简单的二分支判断结构可以用类似于下面的三元操作表达式代替。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/068-2.jpg?sign=1739150390-iPbShxzO4EGjaSp4I0eDGZPgr31ceNNt-0-987ef9edd88b4511ae8d752f51fc996a)
如果判断条件满足,则结果为b,否则结果为a。
下面用三元操作表达式判断给定的数是否大于或等于10。该文件位于Samples目录下的ch01子目录中,文件名为sam01-06.py。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/068-3.jpg?sign=1739150390-kDoV4huw4ILaimqLDWj2xC8yj8Yo2Eu6-0-6e0aaa4c3ea6c836e7031f44d5829d0b)
第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=1739150390-LzCNa6IlZK3tiIoJd5QYrBfICSMvJfR7-0-06a8ca542c3b45058fbaa3eef17385d3)
下面用三元操作表达式求给定的三个数中的最小值。该文件位于Samples目录下的ch01子目录中,文件名为sam01-07.py。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/068-5.jpg?sign=1739150390-yGDSsAk4DQNUeh52bom9fvhYIyiZyXoS-0-101666659891f2c6b9c4686ce54b719a)
第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=1739150390-2lDzukYKvBDE5WEsgojCCo4mIdpTRPjS-0-5f7634de985ef6d1c8e33f858ff4544c)
1.11.2 循环结构——for循环
循环结构允许重复执行一行或数行代码。
1. for循环
使用for循环可以遍历指定的可迭代对象,即针对可迭代对象中的每个元素执行相同的操作。for循环的语法结构为:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/069-1.jpg?sign=1739150390-7OkUek8ZZ16wIY7IMgFlsVaXLZceAXVA-0-ee8f64838994f21868cac0759df18a52)
可迭代对象包括字符串、区间、列表、元组、字典、迭代器对象等。
下面对字符串应用for循环,逐个输出字符串中的每个字符。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/069-2.jpg?sign=1739150390-RvNoJ79JRwq31qrJ7cUpoGfHEvlZtErA-0-0df35d280fa5c67d1791d82b23967a87)
输出结果为:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/069-3.jpg?sign=1739150390-w7lJoJVMoq1ilO0Bex3hAMCaANPeMydK-0-1540d26d6eb9be7ae903e4aee6d3d1c7)
下面对区间应用for循环,逐个输出区间中的每个数字。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/069-4.jpg?sign=1739150390-QcAirgyIkQwKGCyRkF86K45DEV6kMRnp-0-cb44b76697a6a3f686742f0bce23359f)
输出结果为:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/069-5.jpg?sign=1739150390-I8KSZwIR9rtivkXFhnhPUAVgFg4uw7ri-0-0fc102437c3f8b1a61060a316dff4df8)
下面对列表应用for循环,逐个输出列表中每个城市的名称。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/069-6.jpg?sign=1739150390-0JKI027RRW9upmznTf70xWSu3ZAziNcy-0-ab7d3a389b49fc5b13f07d58b7ddf3b1)
输出结果为:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/069-7.jpg?sign=1739150390-KBmzHYkfUKkR7fXINjEWUWlzmjpWLke1-0-d6d96bdc6671473594d3d389e4a49c29)
对于列表,也可以使用区间,结合列表索引来输出列表中的元素。下面通过索引输出列表中各城市的名称。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/070-2.jpg?sign=1739150390-RXQ4se917ddUW0vsKqv54Iuoaey9U5ps-0-c6a7930ba0cfd333200eb6a0622fee90)
输出结果为:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/070-3.jpg?sign=1739150390-Syfy1D9v71nVaKZ5I247qqNSKRweHJyh-0-2965ee0c9ec3cf917b60599f89da6675)
下面对元组应用for循环,逐个输出元组中每个元素的数据。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/070-4.jpg?sign=1739150390-mhH021HBlkJkHOjyBlp68T1UCBcBxTFA-0-2024715c7fa08d04bb09e4bbfd8bb8c2)
输出结果为:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/070-5.jpg?sign=1739150390-UROsOVm9tEwhr1TDDDjaqXa8DbX4E1yM-0-a048736fac897caf47ed19fd00619913)
下面对字典应用for循环,逐个输出字典中各项的键、值和键值对。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/070-6.jpg?sign=1739150390-VVk2j3aGVD221XyYXoRM2sHa4NyvWR06-0-567272bc3b0ca27b86c53b7f85abb628)
输出结果为:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/070-7.jpg?sign=1739150390-EbCDW4USgKeI4tQ0TtFjrdyfDA49NdWA-0-256029b7ac0ff42d58875d8493dc3b33)
输出结果为:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/070-9.jpg?sign=1739150390-7xpAwoz5FhNCYBtpMkcl1GNKh6cOtn9j-0-7de1c82180d533c88f313b0c5db6cbe4)
输出结果为:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/071-3.jpg?sign=1739150390-GPkJfbWCok2Q43IPC3bZFIcoTJw8v6Tg-0-4630616852dc66fb532db4381cef63ae)
输出结果为:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/071-4.jpg?sign=1739150390-KZdtzHH7XDWV7VmpfzXRculV3iTmknW4-0-b06fd75ec7ec4aeb679fdf290eba8176)
下面使用for循环对1~10的整数进行累加。该文件位于Samples目录下的ch01子目录中,文件名为sam01-08.py。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/071-5.jpg?sign=1739150390-x7jVF5oZuGsYnyZwgHxpGSF4MIyf4NWm-0-21c3e348751e7caeb5d04c154c4fed8b)
第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=1739150390-yYAl4TKC799taKtx7CpNJs6bNRcNiodC-0-f72a2b03f3d6d4423455327108373f65)
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=1739150390-pw70Y7YkXVmyj4m4E8bAtrJDEVbp1ZIW-0-cf40fca3a430c50c790de67d6761f8ab)
第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=1739150390-flQ9QMKAkhdZnhpHxtCs5WwD8d5deB2J-0-6a3cc23f19cbbea11bcbd10bf11584de)
再次运行,输入9,按回车键,显示下面的结果:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/072-3.jpg?sign=1739150390-HhHjzut5ewDpEad8lDhYSypzw2a5won2-0-b86a052a6a00121ae30c1c05d634395b)
3. for循环嵌套
下面用两层嵌套的for循环生成九九乘法表。该文件位于Samples目录下的ch01子目录中,文件名为sam01-10.py。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/072-4.jpg?sign=1739150390-wL9lNBwqRTEpvHqWOLLdTSNgVZw5iQol-0-7b32a0cfc9612b43745d2e5dd3b577c1)
第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=1739150390-7rMXCVMBNgLxQCvgjJzHZzD7miVqwigd-0-a3b939febf4782446146881306961e70)
1.11.3 循环结构——while循环
for循环遍历指定的可迭代对象,该对象的长度即对象中元素的个数是确定的,所以循环次数是确定的。还有一种情况,就是一直循环,直到满足指定的条件为止,此时循环次数是不确定的,事先未知。这种循环用while循环来实现。while循环可有多种形式。
1. 简单的while循环
单行while循环的形式为:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/073-2.jpg?sign=1739150390-1LO5tz82eGn3Qt7JrA3P5RtXirlGBsDq-0-f9ba434ec24fd4856a99f2966fc887cd)
其中,判断条件为一个关系运算表达式或逻辑运算表达式,当满足条件时执行冒号后面的语句。
下面用简单的while循环求1~10的累加和。该文件位于Samples目录下的ch01子目录中,文件名为sam01-11.py。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/073-3.jpg?sign=1739150390-sOHLfsJ9kyxpqmOwOVeQp75D9S9kf5MV-0-071fa46f7c6e86c82db418de09db9e77)
第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=1739150390-QPcc5XS6ajlbMCpoQsAZ5qhOprDAzk0j-0-0bf53473e825a0aef9ce26b7efb41daf)
2. 有分支的while循环
有分支的while循环结构中有else关键字,形式为:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/074-1.jpg?sign=1739150390-g5eOgZwewG3tEqlWiNDtjo31tVVxbKRy-0-c0a02302f297e470ae6dcad29f63eee9)
当判断条件满足时,执行第1个冒号后面的语句;当不满足时执行第2个冒号后面的语句。
下面改写对1~10累加求和的例子。当迭代变量的取值大于10时给出提示。当然,在实际编程时没必要这么做,这里是为了演示循环结构。该文件位于Samples目录下的ch01子目录中,文件名为sam01-12.py。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/074-2.jpg?sign=1739150390-g0wZfX3XcR84zRXnZibMI8aaoc1snGc5-0-e56ef93817e3b099ff94bc57d3e435a0)
第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=1739150390-WSQq88zhdM78EtTWOTVHCnLwIjq9Dpr2-0-d48a98b91958520e644259b1149f0147)
3. while循环嵌套
下面用嵌套的while循环生成九九乘法表。该文件位于Samples目录下的ch01子目录中,文件名为sam01-13.py。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/074-4.jpg?sign=1739150390-qQxQ6Za91JKaPkXLw0R0M2sTAuBOjLyR-0-af6f19df3c3d40385ff5cbe299d2336e)
第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=1739150390-Y4E4miDHsoLzlwhXkHVa9nzZ0ovE5y4P-0-73a4fb0709f27ce01c44eef0ad0a13a1)
while循环还可以和for循环嵌套,下面将内层while循环改写成for循环生成九九乘法表。该文件位于Samples目录下的ch01子目录中,文件名为sam01-14.py。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/075-2.jpg?sign=1739150390-z0Xz3v3b4BFUScYPrT676LD3uwdJGg0B-0-dd63dbc0623227bcc3ea189d47e4d32a)
请大家自行解读代码,这里不再赘述。
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=1739150390-MJeWg2QJWrEJwNJQkSSCXtixnzjANFRK-0-fd76d2b4bfd45a1a15776c03ee4a3a93)
第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=1739150390-39TGj1gGyS4uCFMhk1Iq6xfVfaf7VAhc-0-81ac439d8586b50c7c464c2fdba4ed01)
也可以在while循环中使用break语句跳出循环。使用while循环改写上面的程序。该文件位于Samples目录下的ch01子目录中,文件名为sam01-16.py。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/076-3.jpg?sign=1739150390-zHDzgpzUvwtVOZBqmk04ud7Jez8a7I1P-0-7553c4ab1b31024503e9bd2222118adc)
运行该程序,输出相同的计算结果。
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=1739150390-q6ZdgFXpNNfPRt1W2n3DsuUpuHgc8eW8-0-1d799f447f537af306ec027c58e83835)
第2行用了一个单行判断结构,当迭代变量取值为3时使用continue语句跳出本轮循环。
在Python IDLE文件脚本窗口中,在“Run”菜单中单击“Run Module”选项,则IDLE命令行窗口显示下面的结果:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/077-1.jpg?sign=1739150390-1JeQspSTt3mOHryisWRxkFgiC7yYHc7g-0-2356ab87491de3b78881d82559ef15af)
可见,整数3没有输出。
3. pass语句
pass语句是占位语句,它不做任何事情,只用于保持程序结构的完整性。在判断结构中,当判断条件满足时,如果什么也不执行,则会出错。例如,在文件或命令行中执行下面的语句会出错:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/077-2.jpg?sign=1739150390-Szbl8TDBMm09iWzWZR9GwevhKnkI5yMT-0-4e4a1cba3c83add95f4b6dbe5100f6cc)
此时将pass语句放在冒号后面,虽然还是什么也不做,但保证了语法上的完整性,就不会出错了。即:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/077-3.jpg?sign=1739150390-vIePMMEvXMJL8flWIhgc79kVzswqmsM1-0-bca7ec4baf101b7f5627b7f675721c4e)
另外,在自定义函数时,如果定义一个空函数,也会出错。此时在函数体中放一个pass语句,就不会出错了。