在 Python 中,循环语句指的是在 “满足某个条件下” 循环反复地执行某些操作的语句。这就很有趣了,现在像 “1 + 2 + 3 + ... + 100” 、 “1 + 3 + 5 + ... + 99” 这种计算就可以轻松用程序实现了。
在 Python 中,循环语句只有 2 种:一是 “while 语句”,二是 “for 语句”。需要注意的是,Python 并不存在像 C++、Java 等编程语言中的 do...while 语句。
Python while 语法
在 Python 中,while 语句是最简单的循环语句。
语法:
while 条件 :
……说明:
如果 “条件” 返回为 True,则会执行冒号后的代码块。当执行完冒号后的代码块,会再次判断 “条件”。如果条件依旧还是 True,则会继续重复执行代码块……循环执行直到条件为 False 才结束整个循环,最后才会接着执行 while 语句后面的程序。
在使用 while 语句时,小伙伴们应该清楚以下几点。
- 确保条件最终会变为 False:如果 while 循环中的条件永远不会变为 False,那么该循环就会无限执行(变为死循环)。
- 少用 break 语句:虽然 break 语句可以终止循环,但应该少用。过多使用 break 语句会导致代码可读性比较差。
- 少用 while 循环:优先考虑 for 循环,而不是 while 循环。
Python while 示例
你肯定听过大数学家高斯的故事。老师让班里的小学生们计算 1+2+3...+100 的和。聪明的高斯想到了一个非常巧妙的办法,在很短时间内就算出了答案。现在让我们用 Python 中的循环语句来帮高斯解决这个问题。
示例 1:使用 while 循环来计算 1 + 2 + 3 + ... + 100 的值
n = 1
total = 0
while n <= 100:
total += n # 等价于 total = total + n
n += 1 # 等价于 n = n + 1
print(total)运行结果如下。
5050分析:
在上面的代码中,变量 n 用于递增(也就是不断加 1),其初始值为 1。total 用于求和,初始值为 0。对于 while 循环,我们一步步来给大家分析一下:
第 1 次执行 while 循环之后,total=0 + 1,n = 2。
第 2 次执行 while 循环之后,total=0 + 1 + 2,n = 3。
第 3 次执行 while 循环之后,total=0 + 1 + 2 + 3,n = 4。
……
第 100 次执行 while 循环之后,total = 0 + 1 + ... + 100,n = 101。
记住,每一次执行 while 循环之前,都需要判断条件是否满足。如果满足,则继续执行 while 循环;如果不满足,则退出 while 循环。
当第 101 次执行 while 循环时,由于此时 n = 101,而判断条件 n <= 100 返回 False,此时 while 循环不再执行,也就是退出 while 循环。由于退出了 while 循环,接下来就不会再执行 while 内部的程序,而是执行后面的 print(total)。
对于上面示例的循环来说,用流程图表示如下图所示。

思考: 如何使用 while 循环来计算 1 + 3 + 5 + ... + 99 的和呢?
示例 2:无限 while 循环
while 1 == 1:
print('Hello!')运行结果如下。
Hello!
Hello!
……分析:
这就是最简单的 “死循环”,也叫 “无限循环”。对于死循环而言,它的判断条件一直为 True,因此会一直执行 while 循环,然后不断输出内容。如果想要在 VSCode 中停止死循环,可以按下 “Ctrl + C” 这个快捷键。在实际项目开发中,应该尽量要避免 “死循环” 的出现,因为这是一个很低级的错误。
说明: 死循环也并非一无是处,某些实际应用需要用到死循环。例如 Windows 操作系统下窗口程序中的窗口都是通过一个叫消息循环的死循环实现的。而在单片机、嵌入式编程中也经常用到死循环。在各类编程语言中,死循环都有多种实现的方法。因此,我们不能一味否定死循环。
while 循环中的 else 子句
在学习条件语句时,我们了解到 else 应该和 if 搭配使用。其实在 Python 中,也可以在 while 循环或 for 循环中加入 else 子句。这是一种非常罕见的用法,我只在 Python 这门语言中见过,但这个功能是绝对值得拥有的。
else 用在循环结构中时,只有当循环条件正常结束时,else 子句中的代码才会执行。如果在循环结构中执行了 break 语句或发生了异常(即报错),else 子句中的代码都不会执行。
示例 3:while 循环中使用 else
i = 0
while i < 10:
if i == 5:
print(i)
break
i += 1
else:
print('Normal end!')运行结果如下。
5分析:
从结果可以看出,由于这里的循环中使用了 break 语句,所以并不会执行后面的 else 子句。如果把 “break” 删除,再次运行的结果如下:
5
Normal end!