- Python基础及应用
- 吕云翔 姚泽良 张扬等编著
- 872字
- 2025-02-16 03:32:42
3.2 循环结构
Python的循环结构有两个关键字可以实现,分别是while和for。
3.2.1 While循环
while循环的常见语法是:

这个代码块表达的含义就是,如果条件满足就执行代码块,直到条件不满足为止;如果条件一开始不满足,那么代码块一次都不会被执行。
我们看一个例子:

运行这段代码可以得到输出如下:

对于while循环,其实和if语句的执行结构非常接近,区别就是从单次执行变成了反复执行,以及条件除了用来判断是否进入代码块以外,还被用来判断是否终止循环。
对于上面这段代码,结合输出不难看出,前五次循环的时候a<5为真,因此循环继续,而第六次经过的时候,a已经变成了5,条件就为假,自然也就跳出了while循环。
3.2.2 For循环
for循环的常见语法是:

Python的for循环比较特殊,它并不是C系语言中常见的for语句,而是一种foreach(其他语言中用于遍历迭代对象的语法)的语法,也就是说本质上是遍历一个可迭代的对象,这听起来实在是太抽象了,我们看一个例子:

运行后这段代码输出如下:

for循环实际上用到了迭代器的知识,但是在这里展开还为时尚早,我们只要知道用range配合for可以写出一个循环即可,比如计算整数0~100的和:

那如果想计算整数50~100的和呢?实际上range产生区间的左边界也是可以设置的,只要多传入一个参数:

有时候我们希望循环是倒序的,比如从10循环到1,那该怎么写呢?只要再多传入一个参数作为步长即可:

也就是说range的完整用法应该是range(start,end,step),循环变量i从start开始,每次循环后i增加step,直到超过end跳出循环。
3.2.3 两种循环的转换
其实无论是while循环还是for循环,本质上都是反复执行一段代码,这就意味着二者是可以相互转换的,比如之前计算整数0~100的代码,也可以用while循环完成,如下所示:

但是这样写之后至少存在三个问题:
● while写法中的条件为i<=100,而for写法是通过range( )来迭代,相比来说后者显然更具可读性。
● while写法中需要在外面创建一个临时的变量i,这个变量在循环结束依旧可以访问,但是for写法中i只有在循环体中可见,明显while写法增添了不必要的变量。
● 代码量增加了两行。
当然这个问题是辩证性的,有时候while写法可能是更优解,但是对于Python来说,大多时候推荐使用for这种可读性强也更优美的代码。