![Python程序设计案例教程](https://wfqqreader-1252317822.image.myqcloud.com/cover/975/40680975/b_40680975.jpg)
3.4 案例9:百钱百鸡
3.4.1 案例描述
现有100钱,公鸡5文钱一只,母鸡3文钱一只,小鸡一文钱3只,要求公鸡、母鸡、小鸡都要有,把100文钱花完,买的鸡的数量正好是100只。求一共能买多少只公鸡,多少只母鸡,多少只小鸡。
分析:这是一道经典的数学问题,可以设公鸡为x只,母鸡为y只,小鸡为z只,那么可以得到如下的不定方程,x+y+z=100, 5x+3y+z/3=100,本案例就可以转化为解不定方程组的问题,求出不定方程组所有可能的解即可。但是怎么通过Python编程实现呢?下面就来学习本节的重点内容循环嵌套和穷举法。
3.4.2 相关知识
3.4.2.1 循环嵌套
![](https://epubservercos.yuewen.com/DDC401/21122066208960506/epubprivate/OEBPS/Images/67_01.jpg?sign=1738787418-40BEY5TeltwkPR3GDIgpiIsvoeXTmDBi-0-73c9ca0b7e4162a1fc5713183aaf21ac)
6 循环嵌套
所谓循环嵌套是指在一个循环体中嵌入另一个循环。循环嵌套既可以是for循环嵌套while循环,也可以是while循环嵌套for循环,即各种类型的循环都可以作为外层循环,也可以作为内层循环。
当程序遇到循环嵌套时,如果满足外层循环的判断条件,则开始执行外层循环的循环体,而内层循环将被当成外层循环的循环体来执行,然后再通过判断内层循环的判断条件进入内层循环。只有当内层循环执行结束时,才会通过判断外层循环的判断条件,决定是否执行外层循环的循环体。
while循环嵌套语法格式如下。
![](https://epubservercos.yuewen.com/DDC401/21122066208960506/epubprivate/OEBPS/Images/67_02.jpg?sign=1738787418-ftiSvHkLBd21h8Od26lLcGpFWZctCjGh-0-c6dba820b5fbe4eebc3633c377ab3899)
for循环嵌套语法格式如下。
![](https://epubservercos.yuewen.com/DDC401/21122066208960506/epubprivate/OEBPS/Images/67_03.jpg?sign=1738787418-cAD7Ayo8Bs8hcsK3w1VCpijj9g3U7XNq-0-c85993624b9e0da903db90d7830acaa7)
注意:循环嵌套可能有多层,但建议不要超过两层。
【例3-10】编程实现打印九九乘法表。
分析:本案例可通过循环嵌套实现。首先外层循环控制行数,内层循环控制列数,然后在内层循环中定义变量求积,最后按照i∗j=d的格式输出即可。
![](https://epubservercos.yuewen.com/DDC401/21122066208960506/epubprivate/OEBPS/Images/67_04.jpg?sign=1738787418-wbdq9VdDWEOiV7l3taqBpVZlBi0NYibG-0-b8f47dbd00743f20a0f566715ab2d311)
本例使用了for循环嵌套来进行编程,读者也可尝试使用while循环嵌套完成九九乘法表的输出。
3.4.2.2 穷举法
穷举法又称列举法,其基本思想是逐一列举问题的所有情况,常用于解决“是否存在”和“有多少种可能”的问题。在应用穷举法时应注意,列举的情况既不能重复也不能遗漏。在Python编程中,穷举法常用循环结构来实现。
【例3-11】鸡兔同笼问题。假设共有鸡、兔30只,脚90只,求鸡、兔各有多少只。
分析:一只鸡有两只脚,一只兔有四只脚,笼中鸡加兔的脚一共90只。设鸡有x只,则兔有30-x只,可列出一元一次方程式2x+4(30-x)=90,求出该一元一次方程的解即可。在Python中,如何通过穷举法来实现呢?鸡和兔的数量都不超过30只,鸡的数量从1循环到30只,并进行条件判断鸡加兔的总脚数是否为90,将满足这个条件的所有情况通过穷举法筛选出来并输出。
代码如下。
![](https://epubservercos.yuewen.com/DDC401/21122066208960506/epubprivate/OEBPS/Images/68_01.jpg?sign=1738787418-OuI685DIwdWD6dmAlSJmFVreKg2ah3TS-0-a98d711c2700ca5bf506be155bf1a3f5)
3.4.3 案例实现
基本思路:本案例的实现采用穷举法,使用循环嵌套来进行编程。设公鸡的数量为cock,母鸡的数量为hen,则小鸡的数量为100-cock-hen,公鸡、母鸡的数量都不会超过100只,因此设置两层循环。第一层循环中公鸡的数量从1循环到100,第二层循环中母鸡的数量从1循环到100。然后判断公鸡、母鸡、小鸡花费的钱数总和是否满足为100钱,将满足这个条件的所有情况通过穷举法筛选出来并输出。
代码如下。
![](https://epubservercos.yuewen.com/DDC401/21122066208960506/epubprivate/OEBPS/Images/68_02.jpg?sign=1738787418-Cyvi16CoqOboL0sZtXYAiXLbesfQrAn6-0-224d818b8dcd44c88ceacdca3d3088df)
运行结果如下。
![](https://epubservercos.yuewen.com/DDC401/21122066208960506/epubprivate/OEBPS/Images/68_03.jpg?sign=1738787418-G7MkfBtHRouOCZl2sNhTV3ePrOEHpmc9-0-edcb454b75be41263ceffca3cba27300)
希望读者在本解法的基础上,开拓思路,思考是否还能使用其他方法来编程实现。