![Python实战指南:手把手教你掌握300个精彩案例](https://wfqqreader-1252317822.image.myqcloud.com/cover/214/44510214/b_44510214.jpg)
4.3 循环
案例76 输出从1到10各个整数的平方根
导语
对一个数值进行开平方运算,可以调用math模块中的sqrt函数。此外,实现本案例可以使用while循环,设定一个变量i,初始化为1,当i的值不大于10时执行循环。在循环内部对i进行开平方运算并输出结果。每一轮循环完成时将i的值加上1。
while循环的格式如下:
![](https://epubservercos.yuewen.com/1C5115/23721740309681106/epubprivate/OEBPS/Images/Figure-P116_80683.jpg?sign=1739419770-Z3MvQnjQA16dp3PA2AR66ADsl04WTvl1-0-57cecd8ad07c89eb84fc3ef5562b38f1)
只有当条件表达式成立时,循环体才会执行。每一轮循环后会重新检测条件表达式是否成立,如果成立就继续循环,否则退出循环。else子句是可选的,如果出现else语句块,当循环退出后会执行else语句块。但是,如果循环体内出现break语句,循环退出后不会执行else语句块。
操作流程
步骤1:导入math模块。
![](https://epubservercos.yuewen.com/1C5115/23721740309681106/epubprivate/OEBPS/Images/Figure-P117_80685.jpg?sign=1739419770-2sT8BR6rXf5VOMqKX9ct3pPLGuz3z5qg-0-7c79b9ab423d74f0d2c5758cbc326c7f)
步骤2:初始化变量。
![](https://epubservercos.yuewen.com/1C5115/23721740309681106/epubprivate/OEBPS/Images/Figure-P117_80686.jpg?sign=1739419770-kJjHjkVLg2SaVHHujECOyqx7spvCRs2p-0-36f9ad70a3beea37997bc20f917a06df)
步骤3:进入循环代码,输出从1~10中(包含1和10)各个整数的平方根。
![](https://epubservercos.yuewen.com/1C5115/23721740309681106/epubprivate/OEBPS/Images/Figure-P117_80687.jpg?sign=1739419770-uMGuuXBK9ALYkkjs1vnrfyHszA4hTuki-0-7e50322d96e7bfc55fce7ad5436353bd)
步骤4:运行案例代码,输出结果如下:
![](https://epubservercos.yuewen.com/1C5115/23721740309681106/epubprivate/OEBPS/Images/Figure-P117_80688.jpg?sign=1739419770-XZixh2Mxcl8qAqpZbtku1l0xhCghp6Vx-0-1c4c11876d886d9689cd2451a2f8f0af)
案例77 使用for循环
导语
for循环的一般格式为:
![](https://epubservercos.yuewen.com/1C5115/23721740309681106/epubprivate/OEBPS/Images/Figure-P117_80689.jpg?sign=1739419770-TIV2qayBzK6DwsOnzX0n1Ja1TIQNA9FU-0-1ca6de9811e2fb8472bfe6de5c0565a1)
for关键字后面是变量列表,用于在每一轮循环中临时引用从迭代器对象中取出来的子项。in关键字之后可以是一个表达式列表,但这个表达式列表的运算结果要求是一个可迭代对象(iterable object)(例如元组、列表、字典等)。
else子句是可选的,如果存在,那么,代码流程会在for循环完成执行后执行else子句中的代码。但如果for循环体中出现break语句,则会跳出循环,并且else子句中的代码不会执行。
以下案例先产生一个由随机数组成的序列,然后再通过for循环逐个打印序列中的元素。
操作流程
步骤1:导入random模块。
![](https://epubservercos.yuewen.com/1C5115/23721740309681106/epubprivate/OEBPS/Images/Figure-P118_80691.jpg?sign=1739419770-2jsvqxZB5BUoXvCxRvepQgMaU6xOr9PU-0-92372309e29d9df19a088ea20cb2b8b0)
步骤2:生成包含10个随机数的列表。
![](https://epubservercos.yuewen.com/1C5115/23721740309681106/epubprivate/OEBPS/Images/Figure-P118_80692.jpg?sign=1739419770-5PelVqMCBouBbriNGrZsL8HSWDjLj4iI-0-332b5d7c7ec2d168a286681af1ff8f5e)
由于变量i的初始值为0,while循环只需在小于10的条件下运行就可以产生10个数值了,即取值范围为[0,9]。
步骤3:使用for循环,依次输出列表中的数值。
![](https://epubservercos.yuewen.com/1C5115/23721740309681106/epubprivate/OEBPS/Images/Figure-P118_80693.jpg?sign=1739419770-7NENySkoiGYSUKxyPdhYhHg9h8lCh54l-0-0d031c360acc20b60da0211ba742667d)
步骤4:运行案例代码,输出结果如下:
![](https://epubservercos.yuewen.com/1C5115/23721740309681106/epubprivate/OEBPS/Images/Figure-P118_80694.jpg?sign=1739419770-lrH5CkJbEahFvVhsIJSsJq75oYLuuGec-0-2148b0750dd0fde8e9b1a22acf81a22d)
案例78 for循环与range函数
导语
for循环经常会与range函数一起使用。range函数可以产生一组有序的整数序列(等差数列)。
调用range函数并且只传递一个参数时,会生成从0~n-1的整数序列,序列中每一项与它的前一项的差为1。例如:
![](https://epubservercos.yuewen.com/1C5115/23721740309681106/epubprivate/OEBPS/Images/Figure-P119_80696.jpg?sign=1739419770-Q5SgyGFHbq1g9pdpFUZLl0ectQqVuHGQ-0-582eef20f02e0479594ba1285fc225a1)
调用将产生整数序列:0、1、2、3、4。
下面的调用方式将产生序列2、4、6、8。
![](https://epubservercos.yuewen.com/1C5115/23721740309681106/epubprivate/OEBPS/Images/Figure-P119_80697.jpg?sign=1739419770-EaFd8nA3IEa8RJI3LMEXsUI4qnnT0W1X-0-6b537652a822f3fbfe08eeba43f25aa6)
其格式为
![](https://epubservercos.yuewen.com/1C5115/23721740309681106/epubprivate/OEBPS/Images/Figure-P119_80698.jpg?sign=1739419770-CpXw7n97bCO7H2Vgcbv1cxiWZSRQ64zR-0-9b583ca7ca9bb5a285915c59d8662417)
start是起始值,stop为终值(产生的整数序列不包含终值),step是步长,默认为1,即每个数值与前一个数值之间的差。如果step为负值,那么start的值应该大于stop的值,才能生成递减的序列。
当for语句与range函数一起使用时,可以从range函数产生的整数序列中提取出各个元素,并进入循环,直到序列中的元素被完全枚举。例如:
![](https://epubservercos.yuewen.com/1C5115/23721740309681106/epubprivate/OEBPS/Images/Figure-P119_80699.jpg?sign=1739419770-tQTgcmVUO2AJS5xxrtccHSPhNgEZ2KdF-0-fd4632abf51b38099c517f74d1e1d0da)
上述代码中,range函数产生整数序列0、1、2、3、4。第一轮循环i的值为0,进入第二轮循环时i的值为1,第三轮循环时i的值为2……第五轮循环时i的值为4,执行完循环代码后就会退出for循环。
操作流程
步骤1:调用range函数产生0~6(不包含6)的整数序列,并用for循环将每个元素输出。
![](https://epubservercos.yuewen.com/1C5115/23721740309681106/epubprivate/OEBPS/Images/Figure-P119_80700.jpg?sign=1739419770-yOD8AFWTOAtB8ug3akiOQ4a2Tc1629Fa-0-24ac99cf35842e552de6e756682c6883)
步骤2:输出从11~20(不包含20)的整数值,步长为2。
![](https://epubservercos.yuewen.com/1C5115/23721740309681106/epubprivate/OEBPS/Images/Figure-P119_80701.jpg?sign=1739419770-ryQ5leizBkyfaZxXNEgUdbUZKU1tCtdg-0-73e50649b345d8fb2209baafde3a214b)
步骤3:输出从60向30(不包含30)递减的整数列表,步长为-5。
![](https://epubservercos.yuewen.com/1C5115/23721740309681106/epubprivate/OEBPS/Images/Figure-P119_80702.jpg?sign=1739419770-BLYGR7sgfjdDJrknec1Y07rNVZiIxu6U-0-65a52ec95c417b367976466b99ffb3ce)
由于step参数(步长)为负值,因此,range函数产生的序列会从start(初值)向stop(终值)递减。
步骤4:运行案例代码,输出结果如下:
![](https://epubservercos.yuewen.com/1C5115/23721740309681106/epubprivate/OEBPS/Images/Figure-P120_80704.jpg?sign=1739419770-IwZIZw51MJ2DuptGYWQw9OgF2PFavVbW-0-ae4ff6d5e7fc0c456331178a15b04faf)
案例79 组成每个数位均不相同的三位数
导语
本案例要完成的功能是:使用整数1、2、3、4、5、6、7、8、9组成各个数位互不重复的三位数,并打印出所有符合要求的结果。以下数字都是不符合要求的:
![](https://epubservercos.yuewen.com/1C5115/23721740309681106/epubprivate/OEBPS/Images/Figure-P120_80705.jpg?sign=1739419770-PbBIzW94E5MB2bGIDJTABvTlesOZfC2K-0-0d85b8f26b467de7782bb0ea17140ba6)
222的百、十、个位上的数字都相同;113的百位和十位上的数字相同;155的十位和个位上的数字相同;636的百位和个位上的数字相同。
假设三个数位上的数字依次(从百位到个位)为a、b、c,根据以上对不符合要求的数字的分析,满足各个数位不重复的条件为
![](https://epubservercos.yuewen.com/1C5115/23721740309681106/epubprivate/OEBPS/Images/Figure-P120_80706.jpg?sign=1739419770-mBTrQiinngf1Z0aM36nnHWh7jBYbCm0D-0-2f4a820ceeaa49c3698c9567c38b6739)
即a、b、c三个数值两两不相等。三个数值的取值范围都是[1,9],所以在代码流程上可以使用嵌套的for循环(共三个循环嵌套),而用于循环的序列则通过调用range函数产生。
操作流程
步骤1:声明一个空的列表对象,用来存放处理结果。
![](https://epubservercos.yuewen.com/1C5115/23721740309681106/epubprivate/OEBPS/Images/Figure-P120_80707.jpg?sign=1739419770-o1nRJG09utqCzjmQi7YJmDiw6FZjzX9A-0-968eb38f8457fdb87b80d38860090104)
步骤2:进入三轮循环(嵌套),产生百、十、个位上互不重复的数字。
![](https://epubservercos.yuewen.com/1C5115/23721740309681106/epubprivate/OEBPS/Images/Figure-P120_80708.jpg?sign=1739419770-soPAPhkWwSpRI4YjLxknL0vGpoxDdPtG-0-987a28d3d8e35331fee68050ab9cc938)
变量a乘以100后得到百位上的数字,变量b乘以10后得到十位上的数字,变量c位于个位上,不用处理,最后将它们进行相加就能得到三位数了。还有一种方法,就是把a、b、c三个变量都转换为字符串类型,再连接起来形成三位数,即
![](https://epubservercos.yuewen.com/1C5115/23721740309681106/epubprivate/OEBPS/Images/Figure-P121_80710.jpg?sign=1739419770-9I3U7Ed5h52cxmN8VfrGidrLYxXhRtXk-0-f401dd9fff75974df0f021ceb7b74ee9)
步骤3:将产生的三位数数字列表输出到屏幕上。
![](https://epubservercos.yuewen.com/1C5115/23721740309681106/epubprivate/OEBPS/Images/Figure-P121_80711.jpg?sign=1739419770-AOTneSYoE7cfORJBLcxfiMxzfE66WVVw-0-03ae1fe4301154c9790619fe33443a75)
变量c用来计算输出元素的个数,在打印出元素值后,进行换行处理——每输出八个元素换一行。
步骤4:运行案例代码,屏幕输出结果如下:
![](https://epubservercos.yuewen.com/1C5115/23721740309681106/epubprivate/OEBPS/Images/Figure-P121_80712.jpg?sign=1739419770-ZgXcRdQKPkYWQXosBMOKEPhemblaA0BN-0-754da54d3fc49eec1fd87cd4504f9caa)
![](https://epubservercos.yuewen.com/1C5115/23721740309681106/epubprivate/OEBPS/Images/Figure-P122_80714.jpg?sign=1739419770-ljfBcjRBmNTtbXsLpMHDdv4QdOYIAiUl-0-bd44f7df68ddbe3356bc326e81819ef9)
案例80 求“水仙花数”
导语
“水仙花数”是三位数,其特点是它每个位上面的数的三次方之和等于其自身。例如,371=33+73+13。
本案例可以运用range函数生成100~999的整数序列,然后通过for循环进行逐个验证。在验证时需要分别提取出百、十、个位上的数值,然后计算它们的三次方之和,最后检查结果是否与原数相等。
操作流程
步骤1:生成整数序列。
![](https://epubservercos.yuewen.com/1C5115/23721740309681106/epubprivate/OEBPS/Images/Figure-P123_80716.jpg?sign=1739419770-qumtoUjMMF1GF4B8kliz6IMaRnJsAeye-0-6b299d695b960b86920aafd559477f09)
步骤2:声明一个空白的列表对象,用于存放处理结果。
![](https://epubservercos.yuewen.com/1C5115/23721740309681106/epubprivate/OEBPS/Images/Figure-P123_80717.jpg?sign=1739419770-q9S7suX3jtt5OvsE6Cv2lvQE8wuTaIf5-0-8d5c9daef1c70202a78543113d8d88e3)
步骤3:使用for循环对整数序列中的元素进行逐个验证。
![](https://epubservercos.yuewen.com/1C5115/23721740309681106/epubprivate/OEBPS/Images/Figure-P123_80718.jpg?sign=1739419770-u18BwJkDEpJgosqE3L0Bept3S6jQiSJU-0-2a14ae558e63a130f27b72701d4ec901)
运算符∗∗执行指数运算,a∗∗3表示求变量a的三次方。
步骤4:打印处理结果。
![](https://epubservercos.yuewen.com/1C5115/23721740309681106/epubprivate/OEBPS/Images/Figure-P123_80719.jpg?sign=1739419770-j8lUGsVALUV7lAcRStmRhEgnaUqpkQOw-0-e73515e7ed5dd65181361db6e7a1428e)
步骤5:运行程序后,屏幕输出如下内容:
![](https://epubservercos.yuewen.com/1C5115/23721740309681106/epubprivate/OEBPS/Images/Figure-P123_80720.jpg?sign=1739419770-k36BQzenWGZanh8Pv3QhRJPqPpebg6rh-0-bd1f42a025f337e46c7e97d63bc48868)
案例81 跳出循环
导语
在循环代码中使用break语句,可以立刻跳出循环。另外,还有一个功能类似的语句——continue,continue语句执行后不会跳出循环,只是跳过当前代码执行下一轮循环而已;而break语句会结束整个循环。
本案例的功能是:随机产生七个整数,然后对这七个数字进行逐个分析,只要遇到一个可以被15整除的数字,任务结束。
操作流程
步骤1:从random模块中导入randint函数。
![](https://epubservercos.yuewen.com/1C5115/23721740309681106/epubprivate/OEBPS/Images/Figure-P124_80722.jpg?sign=1739419770-idCN4zNyNZUr8yPJ5Xx7oGUtQCiqXmdP-0-39fb5a2f3ed570e6f84cd3a5a502dd54)
步骤2:随机生成七个整数,保存在一个列表对象中。
![](https://epubservercos.yuewen.com/1C5115/23721740309681106/epubprivate/OEBPS/Images/Figure-P124_80723.jpg?sign=1739419770-H2KmRWSOWEdkkqiL2My545ZX2xQbzBAJ-0-f30ae7afb4afe005b551008d130666e1)
步骤3:通过循环来查找可以被15整除的数字,只要找到一个就马上终止循环。
![](https://epubservercos.yuewen.com/1C5115/23721740309681106/epubprivate/OEBPS/Images/Figure-P124_80724.jpg?sign=1739419770-aj4GUkLMHSdXDDQA28AlvJeb3JOBI0fO-0-95a28eb1930985e210ac60bee7de1300)
步骤4:运行案例代码,会得到如下结果:
![](https://epubservercos.yuewen.com/1C5115/23721740309681106/epubprivate/OEBPS/Images/Figure-P124_80725.jpg?sign=1739419770-eidtVul7piS9MKxs2rNK3myII6NkyMzT-0-1d349cec19cb822020e19388c80cdf0c)
注意:由于整数列表是随机生成的,有可能会出现七个数中没有一个能被15整除的情况,只要多运行几次就能产生能被15整除的数字。