![代替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=1739303171-dQMH6MWuhcAVl69lYd40I43fOkdBB3sQ-0-80ca5cf70b1cfc8ef7b8787868a852f2)
其中,判断条件常常是一个关系运算表达式或逻辑运算表达式,当条件满足时执行冒号后面的语句。
在下面的两行代码中,第1行用input函数实现一个输入提示,提示输入一个数字;第2行实现一个单行判断结构,判断输入的数字是否等于1,如果是,则输出字符串"输入的值是1"。该文件位于Samples目录下的ch01子目录中,文件名为sam01-01.py。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/064-3.jpg?sign=1739303171-mMdkRfHxVI63akUOfAvTQgRpWkjgHNr6-0-23392fbe9208d1d49983e18314ad5d3e)
在Python IDLE文件脚本窗口中,在“Run”菜单中单击“Run Module”选项,则IDLE命令行窗口提示“请输入一个数字:”,输入1,按回车键,显示下面的结果:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/064-4.jpg?sign=1739303171-Ef2z4QCYrgaXvaWxHYS7OHK9TcDjmrP9-0-70d5c26c7cfe67f3045461aacf193a09)
2. 二分支判断结构
二分支判断结构具有下面的形式:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/065-1.jpg?sign=1739303171-Z0xp2w0Qd7I50xkTCEBmVKu1pZYkBW9x-0-950ad2baf35e453d361c5e508849a263)
当判断条件满足时执行第1个冒号后面的语句,当不满足时执行第2个冒号后面的语句。
下面的代码实现了一个二分支判断结构。该文件位于Samples目录下的ch01子目录中,文件名为sam01-02.py。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/065-2.jpg?sign=1739303171-DpJqdDPsWjBf9rqks0MkTf681tyTETFV-0-33e3dd2c35134db256406a79621d97a3)
第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=1739303171-z7vTvdqSxr2ioW6hhcahMRMa41ks8tqQ-0-39dc26f0cf20f2f0eb5b3b610e739773)
3. 多分支判断结构
多分支判断结构具有下面的形式:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/065-4.jpg?sign=1739303171-21VsztEmftRv0uZhe2XaFOjFLboCpC0d-0-b8fea212462dd6cf5d6acab811fdd2a1)
多分支判断结构提供多重条件判断,当第1个条件不满足时测试第2个条件,当第2个条件不满足时测试第3个条件,依此类推。当当前条件满足时执行相应的语句,最后都不满足时执行相应的语句。
下面的代码用一个多分支判断结构判断给定的成绩属于哪个等级。该文件位于Samples目录下的ch01子目录中,文件名为sam01-03.py。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/065-5.jpg?sign=1739303171-5Y4ZWCmx8S5iyQz6YKAoXSbTlHo1WC2F-0-4d6beb26ecb06a99b1e14a13e2ea7b14)
第1行用input函数实现一个输入提示,提示输入一个数字;第2~11行为多分支判断结构,判断输入的成绩属于哪个等级。
在Python IDLE文件脚本窗口中,在“Run”菜单中单击“Run Module”选项,则IDLE命令行窗口提示“请输入一个数字:”,输入88,按回车键,显示下面的结果:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/066-2.jpg?sign=1739303171-Qj3aXZmVXU1N3xWWV7IOMPQk2Np7ngur-0-b8ac004a0d6a3101833940fccfafaf40)
4. 有嵌套的判断结构
有嵌套的判断结构具有类似于下面的形式,如果分支条件满足,则进行次一级的条件判断和处理。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/066-3.jpg?sign=1739303171-TG1OXr3lbx8TjlbfPGx8oiCIwNYsaLaw-0-ecc46d3935132828739857ff01e382c5)
现在将前面对成绩分等级的示例进行改写,如下面的代码所示。该文件位于Samples目录下的ch01子目录中,文件名为sam01-04.py。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/066-4.jpg?sign=1739303171-tKA3oBqoStdUjRM9X8nfiG3ejtko4tkN-0-8c7bfa417eb0b12cf9db302e7e249e93)
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/067-1.jpg?sign=1739303171-Fq9FHtwtutTigtNbfS51YLDy8i3XF3hB-0-a9ed7cbf223649c447aa07de3222ea83)
第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=1739303171-68mpCb29apXMaSak9QARjhCZDTz9PbwM-0-dcfe4b616e1243f74ccea6600f95bd7e)
下面再举一个判断闰年的例子。该文件位于Samples目录下的ch01子目录中,文件名为sam01-05.py。闰年包括世纪闰年和普通闰年。世纪闰年可以被400整除,普通闰年能被4整除,不能被100整除。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/067-3.jpg?sign=1739303171-gmRajST0ee1UEG8MAH6KzTgunBVx13iD-0-fdf185022acbc2363a8bd31ef1a3b2e0)
第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=1739303171-l8DWyYdKFWcygBgGI9aMEWY2JLAfF4gu-0-ac680f4b164f3a603189751a6f4135cf)
5. 三元操作符
简单的二分支判断结构可以用类似于下面的三元操作表达式代替。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/068-2.jpg?sign=1739303171-GQT35LrFXiXdcwCR8t1qhVHhc4UUf2vR-0-6260e1cb0d21a499b79a05a354120519)
如果判断条件满足,则结果为b,否则结果为a。
下面用三元操作表达式判断给定的数是否大于或等于10。该文件位于Samples目录下的ch01子目录中,文件名为sam01-06.py。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/068-3.jpg?sign=1739303171-KOLJOEQ1Ur5JilJwK6qgg0UPj8xyoN92-0-ab666401eb5eedce2f9981a2d7daabc4)
第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=1739303171-msxjgBgZKM0d1bZzSrLGtodxuNlj4TqK-0-fd03c63ed3424fd7613deda9d2796643)
下面用三元操作表达式求给定的三个数中的最小值。该文件位于Samples目录下的ch01子目录中,文件名为sam01-07.py。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/068-5.jpg?sign=1739303171-kx5MEuIkkAl46QCaK3kTvBd0liO22kid-0-1d1ecf33ad0a56b3c989692a23501961)
第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=1739303171-1RXF3CXnnjJZ7TDHVNfgcECQ7PvhpLhx-0-df19a1dfa9afffa02902b7fb7c9bc3d1)
1.11.2 循环结构——for循环
循环结构允许重复执行一行或数行代码。
1. for循环
使用for循环可以遍历指定的可迭代对象,即针对可迭代对象中的每个元素执行相同的操作。for循环的语法结构为:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/069-1.jpg?sign=1739303171-5hhMTIrjvY1xhsSaaghk1dJJKxcU3zPf-0-6c15487de9042e1fa72142002f9b421c)
可迭代对象包括字符串、区间、列表、元组、字典、迭代器对象等。
下面对字符串应用for循环,逐个输出字符串中的每个字符。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/069-2.jpg?sign=1739303171-jPW23V3ro9KfwPRuUV7jNPLQkMuM0pis-0-5cdb5bb3645aac9c7836405665f00027)
输出结果为:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/069-3.jpg?sign=1739303171-LUcQnQgmUuiC97kn2iiaSDtMKUUU7Mdb-0-cae9a0d399714e2f3274502a44affa4e)
下面对区间应用for循环,逐个输出区间中的每个数字。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/069-4.jpg?sign=1739303171-XUjhDF5HwujXB1EaUkeuHZlrY0RBv9np-0-aa68b6acc01de1c10e82978dd8d88638)
输出结果为:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/069-5.jpg?sign=1739303171-oGliFRpT9jRuxX6vfZzpg3nKeI1EuCh8-0-c6900842cdf2fd27402d4460c79069a4)
下面对列表应用for循环,逐个输出列表中每个城市的名称。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/069-6.jpg?sign=1739303171-9FVqF8l28gYSA1hBGtoYU4CaYYeGcDCi-0-6d070db83da01326ec4d51b8fd8606b4)
输出结果为:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/069-7.jpg?sign=1739303171-qxTuIAykHrHWrHRAMuEzeuLfQ9InXILt-0-db2d88a8957346a5c17407b1dc19df82)
对于列表,也可以使用区间,结合列表索引来输出列表中的元素。下面通过索引输出列表中各城市的名称。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/070-2.jpg?sign=1739303171-A3e7qDVdLrO8q8u0pzQKsKCpwVxxtki6-0-0b9574e13ae8e386c74103b1c18433c7)
输出结果为:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/070-3.jpg?sign=1739303171-LK6Jrn2yFpt7xQdsllxqqifCwPaF76Hd-0-1a0668d31857082e8b9ff2935ade0bfe)
下面对元组应用for循环,逐个输出元组中每个元素的数据。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/070-4.jpg?sign=1739303171-otfAtTW2MUy5k1RvJg80J3ZtCBfHFEFF-0-dd25330f9ce55f24c2a4239e976733d1)
输出结果为:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/070-5.jpg?sign=1739303171-lNdHRLcYGdJkDQnurlpEXPYDMbnSTcvF-0-247a2cb1f44e611485a3fc2e2c84827b)
下面对字典应用for循环,逐个输出字典中各项的键、值和键值对。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/070-6.jpg?sign=1739303171-ZfAxvVa1ZnrBpfP0W3BeukdUCeJebtAP-0-c464c8053da04e63a0b9d5938a2beaa3)
输出结果为:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/070-7.jpg?sign=1739303171-f0yxD6AsozbqquucBtBVImifOjbWHXci-0-bd81b9ac681f07b0984c0c17d0836450)
输出结果为:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/070-9.jpg?sign=1739303171-ITiXTXxFxVjvPLoSCQtfoqAtx02THt6y-0-acb14ed063f506c835222b176b68291f)
输出结果为:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/071-3.jpg?sign=1739303171-NlWHQAFKa0rlvlHfoFCrNmYpAKp1kvgJ-0-3e64f41d007f778a1bbc483c1f868892)
输出结果为:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/071-4.jpg?sign=1739303171-isfybuPiqMmIZwi97Y9mDuhfqSBXh1tB-0-05e706d1718f023d4bc07eb92e20859f)
下面使用for循环对1~10的整数进行累加。该文件位于Samples目录下的ch01子目录中,文件名为sam01-08.py。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/071-5.jpg?sign=1739303171-PWlvn7O0ZUWrRKswa2Q1vEjgUtixo7M9-0-84bbce79593b49f4a5211b8d40fda4a1)
第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=1739303171-zB0FrGYxUCwpAdIjb8QC91tzGDgRmApy-0-f4951c3ff4e8431b6175c88c57ad038a)
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=1739303171-hz91VEp6pIWYksRdlXcNMYMTLXmujlmU-0-7e465654fb7cb7384aaa91ea19368693)
第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=1739303171-wFmfyd8lcFZ7go0eloa8dUY8FJBoRIQB-0-77781d42ece812378e22d09de97bfcf8)
再次运行,输入9,按回车键,显示下面的结果:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/072-3.jpg?sign=1739303171-hw66F7z86TJzh4AqX1VHiBFlmiJw4Zxt-0-24e14c2733db56ad8c3c0b77d72e6f38)
3. for循环嵌套
下面用两层嵌套的for循环生成九九乘法表。该文件位于Samples目录下的ch01子目录中,文件名为sam01-10.py。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/072-4.jpg?sign=1739303171-qXMOt9cllU4HVpXO3gQlps8gPFGSIeKT-0-9be664e4937aa3e870c808ae9243c4e9)
第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=1739303171-pVvK4H6AVctwRnJypetsCVqZ91mv506r-0-2d6ce380a1c9545c6cbe1fa79b5cf811)
1.11.3 循环结构——while循环
for循环遍历指定的可迭代对象,该对象的长度即对象中元素的个数是确定的,所以循环次数是确定的。还有一种情况,就是一直循环,直到满足指定的条件为止,此时循环次数是不确定的,事先未知。这种循环用while循环来实现。while循环可有多种形式。
1. 简单的while循环
单行while循环的形式为:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/073-2.jpg?sign=1739303171-9jpg6xIVYfzLxXwFTaBW4m9S1TiHsVNQ-0-7a57dda46e35925d0e22bf98e8998c2e)
其中,判断条件为一个关系运算表达式或逻辑运算表达式,当满足条件时执行冒号后面的语句。
下面用简单的while循环求1~10的累加和。该文件位于Samples目录下的ch01子目录中,文件名为sam01-11.py。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/073-3.jpg?sign=1739303171-MpisoNu9ZwqHFetNkSjd1Cy7M1f4q7pQ-0-595eaa77438e1968251a764c3a2d27f8)
第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=1739303171-Ucxhq0BbCaylCbjwkxUVBavZoJGpBKH0-0-6d1032261d546b27240d70ed69b77298)
2. 有分支的while循环
有分支的while循环结构中有else关键字,形式为:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/074-1.jpg?sign=1739303171-kuV3h7DdrOARvuCb5GBt7LaaFAo0awX9-0-502ebe3be95f376abbef661cbc821f46)
当判断条件满足时,执行第1个冒号后面的语句;当不满足时执行第2个冒号后面的语句。
下面改写对1~10累加求和的例子。当迭代变量的取值大于10时给出提示。当然,在实际编程时没必要这么做,这里是为了演示循环结构。该文件位于Samples目录下的ch01子目录中,文件名为sam01-12.py。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/074-2.jpg?sign=1739303171-k7wsi9EERX92aUmvluXgRBxLOOyyKOer-0-bd82144bedecd165168921601edc2095)
第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=1739303171-xGwyDC7bE3Ri1ZigApzJVjXFCTV8fxrX-0-f8a5bf6934e2d9acd15cb8ebbba53845)
3. while循环嵌套
下面用嵌套的while循环生成九九乘法表。该文件位于Samples目录下的ch01子目录中,文件名为sam01-13.py。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/074-4.jpg?sign=1739303171-kSkQTAZLQVUk7drmsBldzrbdzPx9YMk9-0-e123083b5538d1f22e0d28098cbd83d6)
第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=1739303171-NC8WeIsIdhJUVMuqNL2C3MtRlsyBvYmB-0-bea5181a54c1582800a8306e9d3e0401)
while循环还可以和for循环嵌套,下面将内层while循环改写成for循环生成九九乘法表。该文件位于Samples目录下的ch01子目录中,文件名为sam01-14.py。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/075-2.jpg?sign=1739303171-ahtt5MsbjyTtQlnWWL3215z47iwTBANw-0-920ea45a5d0eb33e70efb9f90e501e96)
请大家自行解读代码,这里不再赘述。
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=1739303171-nGYhWz17BbvNV2JbU2njOrjC59KeN3d2-0-b06090ea3eee5139dbcfec769f894011)
第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=1739303171-GFjay8Zr82Cc2BE8VH7rlhdK1UnceLN9-0-330ae4b59a3cb6809853efe199f89e41)
也可以在while循环中使用break语句跳出循环。使用while循环改写上面的程序。该文件位于Samples目录下的ch01子目录中,文件名为sam01-16.py。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/076-3.jpg?sign=1739303171-tGy8leluQqROS0FbNXonUBCr3hrrQFHo-0-d1e9d40917b3def92f94844c9b2619a1)
运行该程序,输出相同的计算结果。
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=1739303171-cIDKWwTVnlVRZCuiFvBX1PBc0tyfppzY-0-cc7a9df525905e41c22f8f9a24e15a3b)
第2行用了一个单行判断结构,当迭代变量取值为3时使用continue语句跳出本轮循环。
在Python IDLE文件脚本窗口中,在“Run”菜单中单击“Run Module”选项,则IDLE命令行窗口显示下面的结果:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/077-1.jpg?sign=1739303171-sOcvfxQ7kSA1WyekwRnFCp8Oqv5F6T5H-0-2a4c39161f9fa035959ec71950c0b8f4)
可见,整数3没有输出。
3. pass语句
pass语句是占位语句,它不做任何事情,只用于保持程序结构的完整性。在判断结构中,当判断条件满足时,如果什么也不执行,则会出错。例如,在文件或命令行中执行下面的语句会出错:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/077-2.jpg?sign=1739303171-M4YAA7MJP8l0a0ro0ko4ffDRcQdy3Ymi-0-c605956520db42a4ef7a39abd6ceadbb)
此时将pass语句放在冒号后面,虽然还是什么也不做,但保证了语法上的完整性,就不会出错了。即:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/077-3.jpg?sign=1739303171-TMDKR9gei9XICK3n4QLT5wkLADC8bbiu-0-383e4b2829c2f5e0674526dc4e12c6da)
另外,在自定义函数时,如果定义一个空函数,也会出错。此时在函数体中放一个pass语句,就不会出错了。