3.2.1 while语句
简单的while语句结构如下:
图3.5 while语句简单结构的执行流程
简单的while循环由关键字while、条件表达式、冒号、循环体构成。while语句的执行流程图如图3.5所示。其执行过程如下。
(1)计算while关键词后面的条件表达式值;如果其值为真(包括非零、非空),则转步骤(2),否则转步骤(3)。
(2)执行完循环体,转步骤(1)。
(3)循环结束。
循环开始之前,如果while关键词后面的条件表达式为假(包括零、空),则不会进入循环体,直接跳过循环部分。如果一开始while关键词后面的条件表达式为真(包括非零、非空),则执行循环体;每执行完一次循环体,重新计算while关键词后面的条件表达式值,若为真,则继续执行循环体;循环体执行结束后重新判断while关键词后面的条件表达式;直到该条件表达式的值为假(包括零、空),则结束循环。
与3.1节中介绍的if语句比较,相同点和区别如下:
(1)相同点:两者都由表达式和冒号,以及缩进的语句体组成。并且都是在表达式的值为真时执行语句体。
(2)不同点:if语句执行完语句体后,马上退出if语句。while语句执行完语句体后,立刻又返回到条件表达式重新计算,只要条件表达式的值为真,它会一直重复这一过程,直到条件表达式为假才结束循环。
在使用while语句时,有4点要注意:
(1)组成循环体的各语句必须是以相同的格式缩进。
(2)循环体既可以由单个语句组成,也可以由多条语句组成。如果语句尚未确定,可以暂时使用pass语句表示空操作,但不能没有任何语句。
(3)循环体中要有语句改变某个变量的值,使得条件表达式因为该变量值的改变而可能出现结果为假(包括零、空),从而能够导致循环终止,否则会造成无限循环。这个变量通常被称为循环控制变量。
(4)Python对大小写敏感,关键字while必须小写。
while循环既可以用于解决循环次数确定的问题,也可以用于解决循环次数不确定的问题。下面分别讨论这两种使用方式。
1. 利用计数器,解决循环次数确定的问题
循环次数确定的问题是指循环之前可以预知循环即将执行的次数。为了控制循环次数,通常在程序中设置一个计数变量,每次循环,该变量进行自增或自减操作,当变量值自增到大于设定的上限值或者自减到小于设定的下限值时,循环结束。
【例3-6】 计算并输出小于等于200的所有正偶数之和。
分析:设置变量aInt从1开始计数,每次增长1,直到aInt超过200,循环终止。可以预知循环执行200次。每次判断aInt是否为偶数,若是偶数就累加到sumInt变量中。
图3.6 例3-6流程图
程序执行流程如图3.6所示。
程序代码:
该程序中,aInt是循环控制变量,其初始值设为1,每次循环步进为1,其变化直接控制着循环的推进和次数。sumInt的初始值为0,用来累加1~200以内的偶数之和。
思考:在循环结束后,aInt的值是多少?如果想要降低循环的次数,应该怎样修改程序?
程序的循环体总共执行了200次。在循环结束时,aInt的值是201。如果要降低循环的次数,可以通过修改循环控制变量的初始值和每次增长值来实现。修改后的程序见question3_2.py。
程序测试与思考:如果省略了语句aInt=aInt+2,程序会出现什么运行结果?并请总结该条语句的作用。如果省略了语句sumInt=0,程序会出现什么运行结果;将语句sumInt=0放到循环体内,会产生怎样的结果?并请总结该条语句的作用。如果要求1~200奇数的和,可以怎样修改程序?
2. 利用信号值,解决循环次数不确定的问题
循环次数不确定的问题是指在编写程序或程序运行前无法预知循环执行的次数。为了控制循环,一般在程序中设置一个类似触发器的变量。每次循环,该变量接受一个新值,当该变量值达到某信号值时,循环结束。
【例3-7】 编程从键盘输入公司某商品的订单销售额,并对输入的销售额累加求和。当输入的值小于等于0时终止该操作。
程序代码:
程序的一次运行结果: