
3.3.1 while循环语句

3.3.1 while循环语句
while循环语句用在不知道循环次数的情况,在给定的条件满足时执行循环体。While循环语句属于当型循环。当型循环结构的特点是:先判断循环条件,根据条件决定是否执行循环体,执行循环体的最少次数为0。
1.while语句的基本语法格式
while语句的基本语法格式为:

说明:
1)while语句的执行流程是:当程序运行到“while”时,首先判断循环“条件”,如果为True,则执行“循环体”;循环体执行完毕后,再次返回到while判断循环“条件”,若为True,继续执行“循环体”……如此循环反复,直到某一次循环“条件”为False,则不再执行“循环体”,循环结束,执行整个while语句后面的语句。
2)“条件”是条件表达式,为循环的条件,其值为True或False。“条件”后的冒号“:”不能省略。如果一开始循环“条件”就为False,则“循环体”一次都不执行,而去执行后面的语句。
3)“循环体”是一条或多条语句,所有循环体语句要对齐,即缩进相同的空格数,一般每层循环缩进4个空格。
4)如果循环条件总是为True,则该循环会一直运行而无法结束(称死循环)。死循环只应用于特殊场合,通常应该避免出现死循环。为了使循环能够结束,“循环体”中一定要有迭代语句,保证循环条件有变为False的时候,否则这个循环将成为一个死循环。负责改变循环“条件”的变量就叫循环控制变量(或称迭代变量)。
【例3-14】 打印1~100中的所有整数。使用while语句实现代码如下:

运行程序,发现程序只输出了1~99,却没有输出100,这是因为当循环至n的值为100时,此时条件表达式为False(100<100不成立),就不会再去执行循环体中的语句,因此不会输出100,而是结束循环。正确的条件是n<=100。
如果把上面while语句中的n=n+1代码注释掉再运行,会输出什么?将一直输出“n=1”,除非关闭解释器。这是因为循环体中没有使循环条件变为False的语句。
2.while语句使用实例
【例3-15】 用while语句计算1+2+3+…+99+100的值。
分析:本程序需要一个生成1~100这100个数的循环控制变量count,count从1开始循环,循环控制变量的初始值是count=1。循环的条件是count<=100。循环体中的迭代语句是count=count+1,每循环一次,count的值加1。累加的整数放在变量sum中,sum的初始值是0。sum=sum+count语句作为迭代语句放在循环体中。编写程序如下:

运行结果如图3-6所示。

图3-6 例3-15运行结果
如果要计算100+99+…+3+2+1,该如何编写循环体呢?可以把循环控制变量的初始值设置为count=100,循环条件为count>0(循环结束条件是count<=0),循环控制变量改成递减count=count-1。请读者编写程序实现其功能。
如果计算1~100之间的偶数之和、100~1之间的奇数之和,请读者编写程序。
【例3-16】 已知m=1×2×3×…×n,计算出m不大于5000时的最大n值。
分析:本题是利用循环进行累乘运算。设循环控制变量为i,循环体中的迭代语句为m=s*i、i=i+1,循环条件是m<=5000。由于求的是最大i值,输出语句应在循环体外。

运行结果如图3-7所示。

图3-7 例3-16运行结果
【例3-17】 输出100~200之间不能被3整除的数。
分析:根据题意,某数不能被3整除,可以用x Mod 3<>0表示。循环控制变量从100开始,到200终止。

运行结果如图3-8所示。

图3-8 例3-17运行结果
【例3-18】 通过设置条件表达式永远为True来实现无限循环。

使用<Ctrl+C>键中断当前的无限循环。