Python while循环

我们之前学习过条件语句,如果一个条件为真,就允许执行后面的代码块一次。而循环则是,如果一个条件持续为真,就允许将同一段代码执行多次。例如,只要还没有放学,我们就要一节课接着一节课地上下去;在马拉松比赛中,只要还没有到最后的冲刺,运动员就要一直跑下去。

循环实际上就是根据条件来重复执行一段代码。有时,它重复执行一定的次数;有时它一直重复执行直到某个条件为 True;有时,它一直重复执行直到用户让它停止。在本教程中,我们将学习 while 循环。

while 循环

while 循环是最简单的循环类型,就是当某个条件为 True 时重复执行代码。也就是说,while 循环重复执行它的主体,直到特定条件不再为 True。编写 while 循环,就像是在说:“当这个条件为真时,一直这么做;当条件变为假时,停止这么做。”

在 Python 中,while 语句包含以下部分:
  • while 关键字;
  • 条件;
  • 冒号;
  • 从下一行开始,缩进的代码块。

就像 if 语句一样,如果条件为 True,就会执行 while 循环的代码块。但是和 if 语句不同的是,while 循环在执行完代码块之后,还会再次检查条件,如果条件仍然为 True,会再次运行代码块。循环往复,直到条件为 False。

while循环示例

我们来看一个示例。假设你在夜里难以入睡,想要数羊。但是,你是一名程序员,可以编写一段代码来替你数羊,当数到 30 的时候,你就能够进入睡眠状态。代码如下。
sheepCounted=0
while sheepCounted<30:
    print("I have counted "+str(sheepCounted)+ " sheep.")
    sheepCounted=sheepCounted+1
print("I fall asleep.")

我们首先创建一个名为 sheepCounted 的变量,并且把它的值设置为 0。当开始 while 循环的时候,查看 sheepCounted 是否小于 30。因为 sheepCounted 现在的值是 0,是小于 30 的,所以执行代码块(循环的主体)中的语句。
  • 首先,语句 "I have counted "+str(sheepCounted)+ " sheep." 将在屏幕上显示 "I have counted 0 sheep.";
  • 接下来,语句 sheepCounted=sheepCounted+1 会把 sheepCounted 的值加上 1;
  • 现在,sheepCounted 的值是 1。然后回到循环的起始位置,再次判断 sheepCounted 是否小于 30。

如此一遍又一遍地循环往复,直到 sheepCounted 变为 30,此时条件变为假(30是不小于 30 的),程序就跳出了循环。这时,会打印出 "I fall asleep.",如图 1 所示。

跳出循环
图 1

当要求用户输入正确的输入时, while 循环也非常有用。我们可以持续判断,直到用户输入正确。假设我们想让用户输入 Johnson,只要用户没有输入正确的内容(或者输入的内容格式不符合要求),我们就可以一直让用户重新输入,代码如下。
name=input("Please input my son's name: ")
while name!="Johnson":
    print("I'm sorry, but the name is not valid.")
    name=input("Please input my son's name: ")
print("Yes. "+name+" is my son.")
在上面这个例子中,while 循环下面的代码块将继续运行,直到语句 name!="Johnson"为 False。也就是说,这个循环将持续运行,直到用户输入的内容是 Johnson,也就是 name!="Johnson" 的结果是 False。图 2 是该程序输出的示例。

while循环输出示例
图 2

无止尽的while循环

当使用循环时,要记住:如果我们设置的条件永远都不会是 False,那么循环就会进入到无限循环中(除非关闭或退出 Python)。

例如,在数羊的示例程序中,如果去掉 sheepCounted=sheepCounted+1 这一句,那么 sheepCounted 将永远保持为 0,程序就无法结束了。得到的结果如图 3 所示。

while循环无法结束
图 3
 
我们再来看之前另一个例子,只有当用户输入 Johnson 时,才会退出循环。代码如下。
name=""
while name!="Johnson":
    name=input("Please input a name: ")
但是如果用户永远不能正确地输入 Johnson,那么程序就会永远“问”下去,如图 4 所示。

while不能停止
图 4