while<条件>:
<语句块>
无限循环又称为条件循环,好处是不需要提前确定循环次数,跟for<>in<>:循环一样也存在使用保留字else的扩展模式,这个else与异常处理中的else类似,可以看作是程序正常执行的“奖励”。下面介绍两个常见的循环嵌套实例:
百鸡百钱问题
中国古代数学家张丘建在他的《算经》中提出了一个著名的“百钱百鸡问题”:
一只公鸡值五钱,一只母鸡值三钱,三只小鸡值一钱,现在要用百钱买百鸡,请问公鸡、母鸡、小鸡各多少只?
将其中的公鸡,母鸡和小鸡用未知数GJ,MJ,XJ代替,可以得出下面约束条件:
GJ+MJ+XJ=100
5GJ+3MJ+XJ/3=100
GJ<=100/5
MJ<=100/3
Xj<=100
解这个三元一次方程组可以用穷举法来完成
GJ=0
while GJ<=20:
MJ=0
while MJ<=33:
XJ=0
while XJ<=100:
if(5*GJ+3*MJ+XJ/3)==100 and (GJ+MJ+XJ)==100:
print("公鸡=%d,母鸡=%d,小鸡=%d"%(GJ,MJ,XJ))
XJ+=1
MJ+=1
GJ+=1
最后运行结果:
image
其实公鸡和母鸡的数量确定后可以直接求出小鸡数量,这样就可以少最里层的循环,减少了穷举次数。优化代码如下:
GJ=0
while GJ<=20:
MJ=0
while MJ<=33:
#公鸡和母鸡数量确定后可以求出小鸡数量,这样就少一层循环
XJ=100-GJ-MJ
if(5*GJ+3*MJ+XJ/3)==100 :
print("公鸡=%d,母鸡=%d,小鸡=%d"%(GJ,MJ,XJ))
MJ+=1
GJ+=1
网友评论