![代替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=1739280373-mOpov95kWs36PECWybbhCctNah8D3919-0-7cd8b30883b4929ea3f043462190819c)
其中,判断条件常常是一个关系运算表达式或逻辑运算表达式,当条件满足时执行冒号后面的语句。
在下面的两行代码中,第1行用input函数实现一个输入提示,提示输入一个数字;第2行实现一个单行判断结构,判断输入的数字是否等于1,如果是,则输出字符串"输入的值是1"。该文件位于Samples目录下的ch01子目录中,文件名为sam01-01.py。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/064-3.jpg?sign=1739280373-hehfGhqwbqdmAxvvQXLY3Jmp7HIw7UYW-0-2b792840b93aa53ae42c2b46ee763e74)
在Python IDLE文件脚本窗口中,在“Run”菜单中单击“Run Module”选项,则IDLE命令行窗口提示“请输入一个数字:”,输入1,按回车键,显示下面的结果:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/064-4.jpg?sign=1739280373-gk3eX1ThTpcEisgtqIOUMoTSFtAFliZ8-0-2ac12cade33ce547bfd5f3bf2dd4f48b)
2. 二分支判断结构
二分支判断结构具有下面的形式:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/065-1.jpg?sign=1739280373-SC0DHg4nw5ZUgKmQtPC3I8vN8YVtdQZV-0-de556006a41bc6777fb26fb7d23e1e47)
当判断条件满足时执行第1个冒号后面的语句,当不满足时执行第2个冒号后面的语句。
下面的代码实现了一个二分支判断结构。该文件位于Samples目录下的ch01子目录中,文件名为sam01-02.py。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/065-2.jpg?sign=1739280373-ZVnnXIdBiNkuOL2x9lfOhq7cskk3xSIG-0-248f911a1f0a00fdb79c6be7beecc82e)
第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=1739280373-Mbcp7yyIFtvMcRZh6b4xrcV7RFrznkV9-0-0bd3157422cb6bb1148304bfb4965b00)
3. 多分支判断结构
多分支判断结构具有下面的形式:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/065-4.jpg?sign=1739280373-VbBjX04b5qerp5K6beMtjXHTl0mUI6SK-0-0620f59cfb18f2cae17a9be9af998c44)
多分支判断结构提供多重条件判断,当第1个条件不满足时测试第2个条件,当第2个条件不满足时测试第3个条件,依此类推。当当前条件满足时执行相应的语句,最后都不满足时执行相应的语句。
下面的代码用一个多分支判断结构判断给定的成绩属于哪个等级。该文件位于Samples目录下的ch01子目录中,文件名为sam01-03.py。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/065-5.jpg?sign=1739280373-MXi1ZrRUcbtttKVlr7NnHdwWGmRjMl0C-0-bdc02b72c3d9907dd957cb2738c64550)
第1行用input函数实现一个输入提示,提示输入一个数字;第2~11行为多分支判断结构,判断输入的成绩属于哪个等级。
在Python IDLE文件脚本窗口中,在“Run”菜单中单击“Run Module”选项,则IDLE命令行窗口提示“请输入一个数字:”,输入88,按回车键,显示下面的结果:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/066-2.jpg?sign=1739280373-pGMgySwwxz31j4f7FHrcLo2OVMoMajpd-0-3d4ab359a27231ace7cc8e36c17440d8)
4. 有嵌套的判断结构
有嵌套的判断结构具有类似于下面的形式,如果分支条件满足,则进行次一级的条件判断和处理。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/066-3.jpg?sign=1739280373-54WD5Y85vd0zQkHZnj0lCYzlcTh7K2T8-0-0c373961ec432c66a9c5fefd13d9adb0)
现在将前面对成绩分等级的示例进行改写,如下面的代码所示。该文件位于Samples目录下的ch01子目录中,文件名为sam01-04.py。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/066-4.jpg?sign=1739280373-WGd6YdIniQsmu0TuTQ8PWglU06KKDXHi-0-4a72e3e47e6a1009ca58fdef898ceb06)
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/067-1.jpg?sign=1739280373-7FzESiCaJtxXScwK6jcfTy2Q6VKcX5xE-0-6c5afe847675bc99eedc474c2758bb40)
第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=1739280373-141nYxVzSxJJuT3QfS1VP8ZsHArOrh1c-0-b62c100c944e6a323f48de49eb0b404d)
下面再举一个判断闰年的例子。该文件位于Samples目录下的ch01子目录中,文件名为sam01-05.py。闰年包括世纪闰年和普通闰年。世纪闰年可以被400整除,普通闰年能被4整除,不能被100整除。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/067-3.jpg?sign=1739280373-DRDZXY2JKYBWdTxGxE1kdbBEVvSfgxGP-0-0a380790bcdad77a77fb40b0b4c08c1a)
第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=1739280373-vyZneqQ9m7FAcxsMeMzs0JqTqxfioRSd-0-2bded21f3a9b8968005ef37d0e26c264)
5. 三元操作符
简单的二分支判断结构可以用类似于下面的三元操作表达式代替。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/068-2.jpg?sign=1739280373-BOnygi7mBIJeqjww0YRqo2ruMNuYBUG9-0-0baa81c7d15e46c4edda5347ec9d8752)
如果判断条件满足,则结果为b,否则结果为a。
下面用三元操作表达式判断给定的数是否大于或等于10。该文件位于Samples目录下的ch01子目录中,文件名为sam01-06.py。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/068-3.jpg?sign=1739280373-mHrC3pzEJdMVvV4Hg8b1xwZnpSRsDugm-0-2ade63ebb36fa5d7e7588eb0d4bdda88)
第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=1739280373-fgzpBUqBH6ta6rwm4kUtD0qd4DCRFSDy-0-ed84f450aa329612b138b31f2ab7ac4c)
下面用三元操作表达式求给定的三个数中的最小值。该文件位于Samples目录下的ch01子目录中,文件名为sam01-07.py。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/068-5.jpg?sign=1739280373-eEiXKxCa4qf3YrThOAf2q5DBtmsv0PvE-0-4081b00a12b9fdc81cca665f4a825df7)
第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=1739280373-3WjPnBMi1VIzWoMEfQDei2RceXG0ET0Q-0-62d4b70d1efd0ec3cf4a877c75f8263c)
1.11.2 循环结构——for循环
循环结构允许重复执行一行或数行代码。
1. for循环
使用for循环可以遍历指定的可迭代对象,即针对可迭代对象中的每个元素执行相同的操作。for循环的语法结构为:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/069-1.jpg?sign=1739280373-SrpPkKCBhzGlBsoPqGdZuqV8bEQHwfT4-0-b5b1c50aa6869d2639545103ced88d28)
可迭代对象包括字符串、区间、列表、元组、字典、迭代器对象等。
下面对字符串应用for循环,逐个输出字符串中的每个字符。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/069-2.jpg?sign=1739280373-EFHR0VeHrwodoF3cshNNu47ht1VkFUTH-0-7db199b4b6f99f0e118dcd9139073c3f)
输出结果为:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/069-3.jpg?sign=1739280373-AmthhcO4PaT2lFMoNXj1NQ5vmC3hOUKI-0-db06061c86ba7b0b8a93431f302be853)
下面对区间应用for循环,逐个输出区间中的每个数字。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/069-4.jpg?sign=1739280373-xRkJJB4XwCd7Lo5doo6ZrWntsMlMgQK4-0-126ab0b6e2c1052d02708e3f99371142)
输出结果为:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/069-5.jpg?sign=1739280373-9zmvVVHPEL2qjkDziyX8FlRGM53fpIfA-0-b021efbe916cf803f8d4720b52dbd243)
下面对列表应用for循环,逐个输出列表中每个城市的名称。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/069-6.jpg?sign=1739280373-SDKHNUgu4eg3mVO93IkuoKVCMSBAH4Q0-0-76286bac25c247363039c60fe6e242ed)
输出结果为:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/069-7.jpg?sign=1739280373-g93C47E0lWn0YmtnTacIbvhuplD0bn8J-0-3a1909206f55b5a748bfc93e070a6458)
对于列表,也可以使用区间,结合列表索引来输出列表中的元素。下面通过索引输出列表中各城市的名称。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/070-2.jpg?sign=1739280373-hkspXpFyLoYjYBDNp1YdxlXppkQsIzgM-0-d684ce3218f47ecb67e938b8dd2958a4)
输出结果为:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/070-3.jpg?sign=1739280373-hikF7BatPmx9WvLFKaLiBvGliilc6o16-0-3f35884f24b9599ba466318416cfccec)
下面对元组应用for循环,逐个输出元组中每个元素的数据。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/070-4.jpg?sign=1739280373-EsMTAT16tm0B20TM2tBaghMKlZsV90UC-0-abf3a5b03fcb47ed43987898c8b9c251)
输出结果为:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/070-5.jpg?sign=1739280373-lFsSJQs2eapMdAwfR8TxGeehSHWVt365-0-6d0708d38e571a5792a64c7f22f7775f)
下面对字典应用for循环,逐个输出字典中各项的键、值和键值对。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/070-6.jpg?sign=1739280373-jJILgpH9tLJWSwsSqW5FkiHwlBxCCcqH-0-89c58537f3cf7e60999c944745ebc9ce)
输出结果为:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/070-7.jpg?sign=1739280373-79Gtylx0nNtHZaV48l9KC670I4Z221Xa-0-388d7ab9d83afaef94a055774fb0f80a)
输出结果为:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/070-9.jpg?sign=1739280373-Zx4i78HIwLthxmgMlY0Hj97DcMgkn41P-0-5cedb11dedf69635934050e055d88cab)
输出结果为:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/071-3.jpg?sign=1739280373-GQvQiIxoSir754TKeZeR4a1OVj7sdmPI-0-fc9d249c4b683ee9da42c9f1e36293be)
输出结果为:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/071-4.jpg?sign=1739280373-OqCZyAWlCaOvrdbRgU65qeX4LqKclfJE-0-b17c613af99e172e182e4d3c4eff9747)
下面使用for循环对1~10的整数进行累加。该文件位于Samples目录下的ch01子目录中,文件名为sam01-08.py。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/071-5.jpg?sign=1739280373-QZuwtSrB2UDYQk3Udrc3vm6JirsSyaEU-0-687c110afe6fb602cf05b80ef5bd2285)
第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=1739280373-txZdi6GTyZY5zjfqdc4O1B7XK0dx3W8D-0-d29d3ba4e3adf4c26d77974bce99eea1)
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=1739280373-i6cU3zr2WZKbHsjkoODZzlfkpeTX1FjE-0-436f41214a1f38ab8c0d85ea210d09c9)
第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=1739280373-cAY3RFKNCGieYX3qMagSvGu6W9bPYsqJ-0-f0fd622d2128eb98ad2f71b9941e74e9)
再次运行,输入9,按回车键,显示下面的结果:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/072-3.jpg?sign=1739280373-ZhpL4OgdEoR68hEiSvrV8CWgDYfcx9ma-0-ab2830894e61a1d56b3cd9534adb5340)
3. for循环嵌套
下面用两层嵌套的for循环生成九九乘法表。该文件位于Samples目录下的ch01子目录中,文件名为sam01-10.py。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/072-4.jpg?sign=1739280373-65QCyhjphx6MDyURD2GiLCdAFCqgnrop-0-74809231c60d9c67fcd754d8177ae927)
第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=1739280373-FBpv2AJWbA7G01PZGJRpFQzt8rhnXqFe-0-c98b0aab5876c81216413a9066e00209)
1.11.3 循环结构——while循环
for循环遍历指定的可迭代对象,该对象的长度即对象中元素的个数是确定的,所以循环次数是确定的。还有一种情况,就是一直循环,直到满足指定的条件为止,此时循环次数是不确定的,事先未知。这种循环用while循环来实现。while循环可有多种形式。
1. 简单的while循环
单行while循环的形式为:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/073-2.jpg?sign=1739280373-L5BAS7cHfgOUNwyFfuPOC9Fk3yXkLJKf-0-d9eb1c252be3369edca2af4477770c7d)
其中,判断条件为一个关系运算表达式或逻辑运算表达式,当满足条件时执行冒号后面的语句。
下面用简单的while循环求1~10的累加和。该文件位于Samples目录下的ch01子目录中,文件名为sam01-11.py。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/073-3.jpg?sign=1739280373-s7xsjmPlXEd5hpbcJ7mHf31NcYc47It1-0-adb82cdd4577866ed58655f45d082f8d)
第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=1739280373-p1wThTgPL4exfS1WMNNgPdbbrvnZ7Wu3-0-26fac0af4d062982bbd1842d3a6c90a3)
2. 有分支的while循环
有分支的while循环结构中有else关键字,形式为:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/074-1.jpg?sign=1739280373-Y9vKNxCTks3p2mXUEQFpctiGZnACJcTJ-0-0791ee5fca1dd8ca4665b2915e961ee9)
当判断条件满足时,执行第1个冒号后面的语句;当不满足时执行第2个冒号后面的语句。
下面改写对1~10累加求和的例子。当迭代变量的取值大于10时给出提示。当然,在实际编程时没必要这么做,这里是为了演示循环结构。该文件位于Samples目录下的ch01子目录中,文件名为sam01-12.py。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/074-2.jpg?sign=1739280373-jBbQc8VHw70QmIZ0NcbwQT2OOX0Lf1pv-0-beea62f38f759fc3e41d02adef17e37b)
第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=1739280373-RER0QXJcDGxAXXrTu8jvQnvRwRKJh4mU-0-d2ca3f5d24f26e3a756c3143800fcc69)
3. while循环嵌套
下面用嵌套的while循环生成九九乘法表。该文件位于Samples目录下的ch01子目录中,文件名为sam01-13.py。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/074-4.jpg?sign=1739280373-QvRiaTuTBvvmmiLGSffB1e8PFQVAS7yC-0-0fa5b1a6ae82b08482f5f9cba8643c5b)
第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=1739280373-FeNcKEAf2JDwGUSv9AFBjVobavNrsscu-0-4a1823a782a73ed761cae065e075aa6c)
while循环还可以和for循环嵌套,下面将内层while循环改写成for循环生成九九乘法表。该文件位于Samples目录下的ch01子目录中,文件名为sam01-14.py。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/075-2.jpg?sign=1739280373-EvGRpIXXIR8E3LGmSfR0h6zoOW39r3Jl-0-ee54fce219ebe6e946ccd63ca560f2c8)
请大家自行解读代码,这里不再赘述。
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=1739280373-5z5IalESUMZMmaZ4RZo9fxGqkoNzpFpb-0-320e350d69a1677fb16fdffa68f2b09d)
第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=1739280373-6yUZlI7vt0bYny2EJfQYHENGYCHFJ01S-0-e2d4593bbaefe19a98a1a577c1883c45)
也可以在while循环中使用break语句跳出循环。使用while循环改写上面的程序。该文件位于Samples目录下的ch01子目录中,文件名为sam01-16.py。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/076-3.jpg?sign=1739280373-uuBg0LLlyLOHNqJfcEtFTw3E0Zq5w7XV-0-a99c00d58d4c6cef35cdf43df2572e7f)
运行该程序,输出相同的计算结果。
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=1739280373-HvlRLI5WWxJA4QciGK2SnxmLlbbrBNHS-0-70bda2b42c02160fbf48bf42de98719d)
第2行用了一个单行判断结构,当迭代变量取值为3时使用continue语句跳出本轮循环。
在Python IDLE文件脚本窗口中,在“Run”菜单中单击“Run Module”选项,则IDLE命令行窗口显示下面的结果:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/077-1.jpg?sign=1739280373-zp9zy88YxhOTyplzkK4lYjxcLXPL495D-0-dbfea8bd99d6ae72623197ee5f6032f1)
可见,整数3没有输出。
3. pass语句
pass语句是占位语句,它不做任何事情,只用于保持程序结构的完整性。在判断结构中,当判断条件满足时,如果什么也不执行,则会出错。例如,在文件或命令行中执行下面的语句会出错:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/077-2.jpg?sign=1739280373-MVxX6vNOrr0Wksthy2O0ycvlkYPyDlFT-0-7b316b8a2afecc8b2de0236857d426c3)
此时将pass语句放在冒号后面,虽然还是什么也不做,但保证了语法上的完整性,就不会出错了。即:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/077-3.jpg?sign=1739280373-ep374CINTW0mYZKw2DqLlju7UKo1o3mQ-0-771dbb6a64d8eb3567c41fe2aa7da6b6)
另外,在自定义函数时,如果定义一个空函数,也会出错。此时在函数体中放一个pass语句,就不会出错了。