![Python基础及应用](https://wfqqreader-1252317822.image.myqcloud.com/cover/836/41309836/b_41309836.jpg)
3.2 循环结构
Python的循环结构有两个关键字可以实现,分别是while和for。
3.2.1 While循环
while循环的常见语法是:
![](https://epubservercos.yuewen.com/82BE21/21511156608178806/epubprivate/OEBPS/Images/55_01.jpg?sign=1739242362-5pUc1EzybIAco3qofefIY2vQQQAy1mpi-0-2beacb19710f4bef25a81c0976620d07)
这个代码块表达的含义就是,如果条件满足就执行代码块,直到条件不满足为止;如果条件一开始不满足,那么代码块一次都不会被执行。
我们看一个例子:
![](https://epubservercos.yuewen.com/82BE21/21511156608178806/epubprivate/OEBPS/Images/55_02.jpg?sign=1739242362-yCMu979bmbRkq3QpajXDhKTAOscxysTT-0-28cfbda6c715ddb41d9318173f453679)
运行这段代码可以得到输出如下:
![](https://epubservercos.yuewen.com/82BE21/21511156608178806/epubprivate/OEBPS/Images/55_03.jpg?sign=1739242362-vRLLIuPPGzmgeo4vvDQBB4fcDGYAj2s0-0-6bb34089466182a38968c616655a4d58)
对于while循环,其实和if语句的执行结构非常接近,区别就是从单次执行变成了反复执行,以及条件除了用来判断是否进入代码块以外,还被用来判断是否终止循环。
对于上面这段代码,结合输出不难看出,前五次循环的时候a<5为真,因此循环继续,而第六次经过的时候,a已经变成了5,条件就为假,自然也就跳出了while循环。
3.2.2 For循环
for循环的常见语法是:
![](https://epubservercos.yuewen.com/82BE21/21511156608178806/epubprivate/OEBPS/Images/55_04.jpg?sign=1739242362-VmYsZgihtLef139FELu9KtP4OcliHODd-0-355876bf781f9ef45179d0b872afb7dd)
Python的for循环比较特殊,它并不是C系语言中常见的for语句,而是一种foreach(其他语言中用于遍历迭代对象的语法)的语法,也就是说本质上是遍历一个可迭代的对象,这听起来实在是太抽象了,我们看一个例子:
![](https://epubservercos.yuewen.com/82BE21/21511156608178806/epubprivate/OEBPS/Images/55_05.jpg?sign=1739242362-DlaHcM5zziGRAGbiaFbMs10AKs13sqFv-0-7243558296bab39ea9206663a8445e3c)
运行后这段代码输出如下:
![](https://epubservercos.yuewen.com/82BE21/21511156608178806/epubprivate/OEBPS/Images/56_01.jpg?sign=1739242362-wE9B6o0ZSTmh8w1wMAeQ2q7jcJ1gjRx9-0-f8c47fb1395064e7d543af32adfbc221)
for循环实际上用到了迭代器的知识,但是在这里展开还为时尚早,我们只要知道用range配合for可以写出一个循环即可,比如计算整数0~100的和:
![](https://epubservercos.yuewen.com/82BE21/21511156608178806/epubprivate/OEBPS/Images/56_02.jpg?sign=1739242362-f9SCJaqsXbnda951IrPeqbzJwralxhFj-0-d9b59e480fd2c87601169f22c16863d3)
那如果想计算整数50~100的和呢?实际上range产生区间的左边界也是可以设置的,只要多传入一个参数:
![](https://epubservercos.yuewen.com/82BE21/21511156608178806/epubprivate/OEBPS/Images/56_03.jpg?sign=1739242362-1zvsTFonQpSJCBKoK7arVLvCBqsuZQm6-0-c3814526b7ffd2da92cfa0ea4d5536e9)
有时候我们希望循环是倒序的,比如从10循环到1,那该怎么写呢?只要再多传入一个参数作为步长即可:
![](https://epubservercos.yuewen.com/82BE21/21511156608178806/epubprivate/OEBPS/Images/56_04.jpg?sign=1739242362-mWBogav0gOhRe9Ix8z9iKWw9pRFhel2P-0-18ca15676de54ae2b1f330c9e2eae224)
也就是说range的完整用法应该是range(start,end,step),循环变量i从start开始,每次循环后i增加step,直到超过end跳出循环。
3.2.3 两种循环的转换
其实无论是while循环还是for循环,本质上都是反复执行一段代码,这就意味着二者是可以相互转换的,比如之前计算整数0~100的代码,也可以用while循环完成,如下所示:
![](https://epubservercos.yuewen.com/82BE21/21511156608178806/epubprivate/OEBPS/Images/56_05.jpg?sign=1739242362-Dji36hngbSU3tdoqTOosSNxIpWKpDa9V-0-206e3d20e766ae92d12312b29a2f476e)
但是这样写之后至少存在三个问题:
● while写法中的条件为i<=100,而for写法是通过range( )来迭代,相比来说后者显然更具可读性。
● while写法中需要在外面创建一个临时的变量i,这个变量在循环结束依旧可以访问,但是for写法中i只有在循环体中可见,明显while写法增添了不必要的变量。
● 代码量增加了两行。
当然这个问题是辩证性的,有时候while写法可能是更优解,但是对于Python来说,大多时候推荐使用for这种可读性强也更优美的代码。