Python while循环语句详解

Python中,while 循环和 if 条件分支语句类似,即在条件(表达式)为真的情况下,会执行相应的代码块。不同之处在于,只要条件为真,while 就会一直重复执行那段代码块。

while 语句的语法格式如下:

while 条件表达式:
    代码块

这里的代码块,还是指的缩进格式相同的多行代码,不过在循环结构中,它又称为循环体

while 语句执行的具体流程为:首先判断条件表达式的值,其值为真(True)时,则执行代码块中的语句,当执行完毕后,再回过头来重新判断条件表达式的值是否为真,若仍为真,则继续重新执行代码块...如此循环,直到条件表达式的值为假(False),才终止循环。

while 循环结构的执行流程如图 1 所示。

while 循环语句执行流程示意图
图 1 while 循环语句执行流程示意图

例如,打印 1~100 的所有数字,就可以使用 while 循环,实现代码如下:
# 循环的初始化条件
num = 1
# 当 num 小于100时,会一直执行循环体
while num < 100 :
    print("num=", num)
    # 迭代语句
    num += 1
print("循环结束!")
运行程序会发现,程序只输出了 1~99,却没有输出 100。这是因为,当循环至 num 的值为 100 时,此时条件表达式为假(100<100),当然就不会再去执行代码块中的语句,因此不会输出 100。

注意,在使用 while 循环时,一定要保证循环条件有变成假的时候,否则这个循环将成为一个死循环,永远无法结束这个循环。

例如,将上面 while 循环中的num += 1代码注释掉再运行,你会发现,Python 解释器一直在输出"num= 1",除非我们强制关闭解释器。

另外,与 if 分支语句类似的是,while 循环的循环体中所有代码必须使用相同的缩进,否则 Python 也会引发错误。例如如下程序:
# 循环的初始化条件
num = 1
# 当 num 小于100时,会一直执行循环体
while num < 100 :
    print("num=", num)
    # 迭代语句
num += 1
print("循环结束!")
运行上面程序,将会看到执行一个死循环。这是由于num += 1代码没有缩进,这行代码就不属于循环体。这样程序中的 num 将一直是 1,从而导致 1 < 100 一直都是 True,因此该循环就变成了一个死循环。

使用while循环遍历列表和元组

由于列表和元组的元素都是有索引的,因此程序可通过 while 循环、列表或元组的索引来遍历列表和元组中的所有元素。例如如下程序:
a_tuple = ('fkit', 'crazyit', 'Charli')
i = 0
# 只有i小于len(a_list),继续执行循环体
while i < len(a_tuple):
    print(a_tuple[i]) # 根据i来访问元组的元素
    i += 1
运行上面程序,可以看到如下输出结果:

fkit crazyit Charli

按照上面介绍的方法,while 循环也可用于遍历列表。

下面示范一个小程序,实现对一个整数列表的元素进行分类,能整除 3 的放入一个列表中;除以 3 余 1 的放入另一个列表中;除以 3 余 2 的放入第三个列表中:
src_list = [12, 45, 34,13, 100, 24, 56, 74, 109]
a_list = [] # 定义保存整除3的元素
b_list = [] # 定义保存除以3余1的元素
c_list = [] # 定义保存除以3余2的元素
# 只要src_list还有元素,继续执行循环体
while len(src_list) > 0:
    # 弹出src_list最后一个元素
    ele = src_list.pop()
    # 如果ele % 2不等于0
    if ele % 3 == 0 :
        a_list.append(ele) # 添加元素
    elif ele % 3 == 1:
        b_list.append(ele) # 添加元素
    else:
        c_list.append(ele) # 添加元素
print("整除3:", a_list)
print("除以3余1:",b_list)
print("除以3余2:",c_list)