![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=1739295304-pVL56CjK7dYe3vZbdPiXiHn5hdi4JEQ3-0-d0f89afbb51caf25f3e5a5aeabd03921)
只有当条件表达式成立时,循环体才会执行。每一轮循环后会重新检测条件表达式是否成立,如果成立就继续循环,否则退出循环。else子句是可选的,如果出现else语句块,当循环退出后会执行else语句块。但是,如果循环体内出现break语句,循环退出后不会执行else语句块。
操作流程
步骤1:导入math模块。
![](https://epubservercos.yuewen.com/1C5115/23721740309681106/epubprivate/OEBPS/Images/Figure-P117_80685.jpg?sign=1739295304-ndnw4gkbNzcXIb6e5tFJGo9pV3vjXfdf-0-a5486913febfb3251a3c35734dbec177)
步骤2:初始化变量。
![](https://epubservercos.yuewen.com/1C5115/23721740309681106/epubprivate/OEBPS/Images/Figure-P117_80686.jpg?sign=1739295304-GTAqWbDbDYXOe3b3IXtUU00B3Pl11X7g-0-1c75e57122b4406a11e837913636bd4e)
步骤3:进入循环代码,输出从1~10中(包含1和10)各个整数的平方根。
![](https://epubservercos.yuewen.com/1C5115/23721740309681106/epubprivate/OEBPS/Images/Figure-P117_80687.jpg?sign=1739295304-E89Z5jCaya3pvz5W2909vHPDiU26ecJy-0-b81cad892849691bd63c4d26872fa89d)
步骤4:运行案例代码,输出结果如下:
![](https://epubservercos.yuewen.com/1C5115/23721740309681106/epubprivate/OEBPS/Images/Figure-P117_80688.jpg?sign=1739295304-XHHe6F8fH97E4BafhQpDXMV8Na9XzTu8-0-bc5852bc539e629cf8fcc49839d37660)
案例77 使用for循环
导语
for循环的一般格式为:
![](https://epubservercos.yuewen.com/1C5115/23721740309681106/epubprivate/OEBPS/Images/Figure-P117_80689.jpg?sign=1739295304-Xbn9l4xbIx2eOdtTvIsBauMHQ5wLJQj4-0-af91812f25be6f474bf7bc8280e364d7)
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=1739295304-WtpWV73vDxY4QsaQC9hIJITlpMay3R0h-0-1c4ea92f96bbd209fa36c144138ce078)
步骤2:生成包含10个随机数的列表。
![](https://epubservercos.yuewen.com/1C5115/23721740309681106/epubprivate/OEBPS/Images/Figure-P118_80692.jpg?sign=1739295304-vKAvkUiN1ZGCtDNRSbYPvg6XfoC2kEOp-0-4924632c4f8be3b6baf187ddb8cada51)
由于变量i的初始值为0,while循环只需在小于10的条件下运行就可以产生10个数值了,即取值范围为[0,9]。
步骤3:使用for循环,依次输出列表中的数值。
![](https://epubservercos.yuewen.com/1C5115/23721740309681106/epubprivate/OEBPS/Images/Figure-P118_80693.jpg?sign=1739295304-YYRQWJdjoGUopOEEAfM8EiaarmSOJwqa-0-0546c3f67b011aeb850839a766e40a80)
步骤4:运行案例代码,输出结果如下:
![](https://epubservercos.yuewen.com/1C5115/23721740309681106/epubprivate/OEBPS/Images/Figure-P118_80694.jpg?sign=1739295304-gn70w4pYmfmFmm4l16TRz30sNafdfst9-0-01e2fd249f202d99bb047af4c15b07da)
案例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=1739295304-D8y6NuwLxP86tl5sbbAOnEd25Gsv9tDd-0-455aa6e52b9c739e796baea0553f9021)
调用将产生整数序列:0、1、2、3、4。
下面的调用方式将产生序列2、4、6、8。
![](https://epubservercos.yuewen.com/1C5115/23721740309681106/epubprivate/OEBPS/Images/Figure-P119_80697.jpg?sign=1739295304-pTawBqSI8YjhZ4y32qjqU44TdVLt5p61-0-5e65732997fc1158d41e6a9f1b4af4e2)
其格式为
![](https://epubservercos.yuewen.com/1C5115/23721740309681106/epubprivate/OEBPS/Images/Figure-P119_80698.jpg?sign=1739295304-d6vSkUMxHDnHsDc06txFudJkJr4vU60T-0-838b21e4960b0551bca5832a33c194d5)
start是起始值,stop为终值(产生的整数序列不包含终值),step是步长,默认为1,即每个数值与前一个数值之间的差。如果step为负值,那么start的值应该大于stop的值,才能生成递减的序列。
当for语句与range函数一起使用时,可以从range函数产生的整数序列中提取出各个元素,并进入循环,直到序列中的元素被完全枚举。例如:
![](https://epubservercos.yuewen.com/1C5115/23721740309681106/epubprivate/OEBPS/Images/Figure-P119_80699.jpg?sign=1739295304-jHqaXukoeCRorBnrPLlbkIJlRihrUEwX-0-25c0ced71f244695e9a8cb4e9adfe4e8)
上述代码中,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=1739295304-nKxgE2Wn4oyjyQIzv34u8ZVfuJEyzVo5-0-8b3907f642e24e9a5b606aa124a30621)
步骤2:输出从11~20(不包含20)的整数值,步长为2。
![](https://epubservercos.yuewen.com/1C5115/23721740309681106/epubprivate/OEBPS/Images/Figure-P119_80701.jpg?sign=1739295304-YidT21n2BGO6JQ09lWeUcnv4k1zeHtSd-0-5754238a6d5c7a1e4c0bec88edd6c2ef)
步骤3:输出从60向30(不包含30)递减的整数列表,步长为-5。
![](https://epubservercos.yuewen.com/1C5115/23721740309681106/epubprivate/OEBPS/Images/Figure-P119_80702.jpg?sign=1739295304-WKCz84SNz4jJZsdx4hsaqO5RHYs2yFye-0-6f38d4d5790db4415aad9120a381c81f)
由于step参数(步长)为负值,因此,range函数产生的序列会从start(初值)向stop(终值)递减。
步骤4:运行案例代码,输出结果如下:
![](https://epubservercos.yuewen.com/1C5115/23721740309681106/epubprivate/OEBPS/Images/Figure-P120_80704.jpg?sign=1739295304-xTnFcRwX4ZoRZABEMpgfSb8y6od3aFJv-0-e20de42995c864bfd15c3227144b844c)
案例79 组成每个数位均不相同的三位数
导语
本案例要完成的功能是:使用整数1、2、3、4、5、6、7、8、9组成各个数位互不重复的三位数,并打印出所有符合要求的结果。以下数字都是不符合要求的:
![](https://epubservercos.yuewen.com/1C5115/23721740309681106/epubprivate/OEBPS/Images/Figure-P120_80705.jpg?sign=1739295304-QeVdsLnle7YjqWrTcv4YWhAlum1s99Nt-0-10d0a1d449be12a8c69047042b9be9a0)
222的百、十、个位上的数字都相同;113的百位和十位上的数字相同;155的十位和个位上的数字相同;636的百位和个位上的数字相同。
假设三个数位上的数字依次(从百位到个位)为a、b、c,根据以上对不符合要求的数字的分析,满足各个数位不重复的条件为
![](https://epubservercos.yuewen.com/1C5115/23721740309681106/epubprivate/OEBPS/Images/Figure-P120_80706.jpg?sign=1739295304-nnwb0ptmleWB50RiHTnTSgTfA0H2yDT8-0-bbc9034e1176a36b0324fbcb4d02ead9)
即a、b、c三个数值两两不相等。三个数值的取值范围都是[1,9],所以在代码流程上可以使用嵌套的for循环(共三个循环嵌套),而用于循环的序列则通过调用range函数产生。
操作流程
步骤1:声明一个空的列表对象,用来存放处理结果。
![](https://epubservercos.yuewen.com/1C5115/23721740309681106/epubprivate/OEBPS/Images/Figure-P120_80707.jpg?sign=1739295304-lYz2itoCLaO2dc2iEFUUNse8jxv5nJxn-0-b61f56d086e5de908f89a536d5495729)
步骤2:进入三轮循环(嵌套),产生百、十、个位上互不重复的数字。
![](https://epubservercos.yuewen.com/1C5115/23721740309681106/epubprivate/OEBPS/Images/Figure-P120_80708.jpg?sign=1739295304-Fy34qkDNx03eelicjRNDboOZLIfxDqHb-0-bcbfe4a81f4a16d4a95f8f0fd1d6a3fa)
变量a乘以100后得到百位上的数字,变量b乘以10后得到十位上的数字,变量c位于个位上,不用处理,最后将它们进行相加就能得到三位数了。还有一种方法,就是把a、b、c三个变量都转换为字符串类型,再连接起来形成三位数,即
![](https://epubservercos.yuewen.com/1C5115/23721740309681106/epubprivate/OEBPS/Images/Figure-P121_80710.jpg?sign=1739295304-29u9oF8vnPjqm36yYOd79bpmUifq0J5R-0-fea841751390e66775abeabe83875948)
步骤3:将产生的三位数数字列表输出到屏幕上。
![](https://epubservercos.yuewen.com/1C5115/23721740309681106/epubprivate/OEBPS/Images/Figure-P121_80711.jpg?sign=1739295304-RhD5kvjg8NMiTYwJXfHeTp9Ho6RJbJq8-0-64b6186e624956dd504c461681570ed5)
变量c用来计算输出元素的个数,在打印出元素值后,进行换行处理——每输出八个元素换一行。
步骤4:运行案例代码,屏幕输出结果如下:
![](https://epubservercos.yuewen.com/1C5115/23721740309681106/epubprivate/OEBPS/Images/Figure-P121_80712.jpg?sign=1739295304-mXIga0pfXB9opdtpMa8aYTLd0oQVRFTx-0-fa27012371f496a5a492f572e9865bf2)
![](https://epubservercos.yuewen.com/1C5115/23721740309681106/epubprivate/OEBPS/Images/Figure-P122_80714.jpg?sign=1739295304-o7TBXp3PQCr9dF1zmErenWMeGPeT3r5U-0-d47c2a3f093af11a308b80c0856a9289)
案例80 求“水仙花数”
导语
“水仙花数”是三位数,其特点是它每个位上面的数的三次方之和等于其自身。例如,371=33+73+13。
本案例可以运用range函数生成100~999的整数序列,然后通过for循环进行逐个验证。在验证时需要分别提取出百、十、个位上的数值,然后计算它们的三次方之和,最后检查结果是否与原数相等。
操作流程
步骤1:生成整数序列。
![](https://epubservercos.yuewen.com/1C5115/23721740309681106/epubprivate/OEBPS/Images/Figure-P123_80716.jpg?sign=1739295304-bxucAHAOra9JVLi41ecfdylaMt7ciC4O-0-8331ee67d148ce6b367c621838f4c902)
步骤2:声明一个空白的列表对象,用于存放处理结果。
![](https://epubservercos.yuewen.com/1C5115/23721740309681106/epubprivate/OEBPS/Images/Figure-P123_80717.jpg?sign=1739295304-cUckPNcA3cVPceGv8IAsB5U7aWmIUfeF-0-7d3cf898e2a9acb99937c8ee2a1bcd54)
步骤3:使用for循环对整数序列中的元素进行逐个验证。
![](https://epubservercos.yuewen.com/1C5115/23721740309681106/epubprivate/OEBPS/Images/Figure-P123_80718.jpg?sign=1739295304-BL8rLQBFLMSq29QQJI3dtrDGisyafkOt-0-45fa621b432c289bc896a3f335b2d583)
运算符∗∗执行指数运算,a∗∗3表示求变量a的三次方。
步骤4:打印处理结果。
![](https://epubservercos.yuewen.com/1C5115/23721740309681106/epubprivate/OEBPS/Images/Figure-P123_80719.jpg?sign=1739295304-1YrlvvrluFkzMf1CGDxgTBNj0T0gU2AQ-0-94651ab3b50723c5cc35ebf751ad0596)
步骤5:运行程序后,屏幕输出如下内容:
![](https://epubservercos.yuewen.com/1C5115/23721740309681106/epubprivate/OEBPS/Images/Figure-P123_80720.jpg?sign=1739295304-AcpkKM3IxVxwlYnw54zRi99CFOrrhdRy-0-4c054e45f08e3dc595b60387d538f1f3)
案例81 跳出循环
导语
在循环代码中使用break语句,可以立刻跳出循环。另外,还有一个功能类似的语句——continue,continue语句执行后不会跳出循环,只是跳过当前代码执行下一轮循环而已;而break语句会结束整个循环。
本案例的功能是:随机产生七个整数,然后对这七个数字进行逐个分析,只要遇到一个可以被15整除的数字,任务结束。
操作流程
步骤1:从random模块中导入randint函数。
![](https://epubservercos.yuewen.com/1C5115/23721740309681106/epubprivate/OEBPS/Images/Figure-P124_80722.jpg?sign=1739295304-gw3tQ4WOyy4eu08PsGRbM1ug911okTGg-0-4b10484c3912bf4f97eb1d2eb746da3f)
步骤2:随机生成七个整数,保存在一个列表对象中。
![](https://epubservercos.yuewen.com/1C5115/23721740309681106/epubprivate/OEBPS/Images/Figure-P124_80723.jpg?sign=1739295304-9onZQORmiPzGVfnddh2UaUZ5erL21S8o-0-9620800181f7a8e9ddad36d50e20545d)
步骤3:通过循环来查找可以被15整除的数字,只要找到一个就马上终止循环。
![](https://epubservercos.yuewen.com/1C5115/23721740309681106/epubprivate/OEBPS/Images/Figure-P124_80724.jpg?sign=1739295304-Lq4stU1EoMPoZPOrNPY4FOmGM9O2gpDS-0-e97fe91858a12eaa9a832611bd8b2ee7)
步骤4:运行案例代码,会得到如下结果:
![](https://epubservercos.yuewen.com/1C5115/23721740309681106/epubprivate/OEBPS/Images/Figure-P124_80725.jpg?sign=1739295304-rN2gytTnBc6IEP4drKFmFOXbsqNspr6j-0-e22f381f1ad5b3b438f8c3bb251b1427)
注意:由于整数列表是随机生成的,有可能会出现七个数中没有一个能被15整除的情况,只要多运行几次就能产生能被15整除的数字。