在前面的章节,我们学习了如何在屏幕上输出文本,例如 Hello world。 那么,如果要输出 3 次 Hello world ,该如何操作呢? 我们可以暴力解决,连写 3 行代码:
|
|
但是,如果要输出 1000 次?10000 次呢?显然,这种方式并不理想。
为了更好地执行重复性任务,循环 语句应运而生。 循环语句是程序控制结构中的一种,可以让计算机重复执行任务。 Python 中有两种不同的循环语句,我们分别介绍:
- for语句
- while语句
for语句
借助 for 循环结构,我们可以这样输出 3 次 Hello world :
|
|
调用 range(3) 得到一个 可迭代对象 ,该对象每次返回一个数字,分别是 0 、1 、2 。 调用 range(n) 得到的可迭代对象,将包含 0 、1 、2 、… 、n-1 ,共 n 个数。
for 语句则用于遍历可迭代对象,它依次取出对象中的每个元素,并执行循环体。 循环体位于 for 语句下方,但比它多缩进一层。 我们可以在循环体中对遍历到的元素进行处理,例如将元素输出到屏幕:
|
|
这样一来,不管可迭代对象中包含多少元素,处理逻辑只需编写一遍。 举个例子,如果我们想输出 100 次 Hello world,只需改动一个数字:
|
|
看到了吧,这就是循环语句的威力!
for语法结构
我们已经对 for 语句有了初步认识,现在回过头来研究它的语法结构:
如图,for 语句包含以下部分:
- 关键字:for 和 in 关键字,是 for 语句的标志。
- 元素:每次遍历依次取出的元素,紧跟在 for 关键字后面。
- 可迭代对象:可用 for 语句遍历,紧跟在 in 关键字后面。
- 循环体:需重复执行的逻辑,比 for 语句多缩进一层。
while语句
while 语句是另一种循环语句,同样可以用来输出 3 次 Hello world :
|
|
那这个程序如何理解呢?我们通过一个等价的流程图进行讲解:
- 变量 i 来记录输出次数,一开始设定 i = 0 ;
- 判断 i 是否小于 3 ;
- 如果 i 小于 3 ,则执行循环体:先输出 Hello world ,再将 i 的值加 1 。
- 重复执行第 2 到 3 步,直到 i 的值等于 3 ;
- 如果 i 等于 3 ,结束循环,执行后续语句;
注解:
i += 1
是i = i + 1
的简写。
while语法结构
while 语句的语法结构如下图:
可以看到,while 语句主要由这几部分组成:
- 关键字:while 关键字,是 while 语句开始的标志;
- 条件表达式:是否进入循环的条件判断,可求值为 真 或 假 ;
- 循环体:同 for 语句;
无限循环
还记得我们之前学过的圆面积计算程序吗? 虽然我们将计算程序保存到一个文件了,但是如果要计算多个面积,需要运行多次程序,未免太繁琐了。 我们希望,每次计算完圆的面积后,程序可以再次询问输入圆半径并计算结果。 那么,有没有办法可以做到呢?
答案是肯定的。 实际上,上述场景可以这样建模:重复执行 输入圆半径 -> 计算圆面积 -> 输出圆面积 这一过程。 因此,我们只要将这一过程,放入循环体里即可。 由于我们希望以上步骤不断重复,可以将条件表达式设为 True ,表示永远为真:
|
|
这个程序,可以等价于下面的流程图:
可以看到,循环的条件永远为真,所以会不断执行循环体的逻辑,即 输入圆半径 -> 计算圆面积 -> 输出圆面积 ,是一个 无限循环。
现在,用 python 命令执行这个程序:
|
|
果然如我们所愿,这样可以轻松应对多个计算了!
跳出循环
当我们愉快地输完最后一个半径数值后,就会发现一个严重的问题:循环无法结束,程序无法退出! 这可怎么办?我们可以按 Ctrl + C ,强行退出程序:
|
|
程序停止了,但是出现一个异常报错 KeyboardInterrupt
,异常我们后续再展开介绍。 显然,强行退出程序,有点暴力,不够优雅。 那么,无限循环该如何退出呢?
我们知道,循环是否结束由条件表达式决定。 由于例子中的循环条件被我们设置为 True,程序会进入不断执行循环体。 因此,我们只能借助 break 语句来 跳出循环 。
如上图,在循环体里面,如果遇见了 break 关键字,会跳出循环,继续执行循环后面的语句。 因此,我们可对程序进行修改,如果检查到输入内容是 -1 ,则跳出循环:
|
|
再次执行程序:
|
|
当我们输入 -1 后,循环结束了,程序也退出了。
【小菜学Python】系列文章首发于公众号【小菜学编程】,敬请关注: