![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=1738856203-iGBdyqk3M16sCsv4GYKyWysa9e5CXVKZ-0-d5e0a1627ff89b89b9eef0ce4ee3c374)
这个代码块表达的含义就是,如果条件满足就执行代码块,直到条件不满足为止;如果条件一开始不满足,那么代码块一次都不会被执行。
我们看一个例子:
![](https://epubservercos.yuewen.com/82BE21/21511156608178806/epubprivate/OEBPS/Images/55_02.jpg?sign=1738856203-w5rHAKioMDVb9cnpXPFGsJM4QnsYmgkU-0-c23f83cfb5c6668f41c68a081e09852e)
运行这段代码可以得到输出如下:
![](https://epubservercos.yuewen.com/82BE21/21511156608178806/epubprivate/OEBPS/Images/55_03.jpg?sign=1738856203-ObG9UtaBDVzRn9ONTrLwWA3uKHXMjDRV-0-e82226bfdffad13eb8e679010f3bd58d)
对于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=1738856203-nLgJDGhLDjzWhB9fDwohBgePVPZNU4UT-0-9c5b92e664d81abca1780947f26b8d97)
Python的for循环比较特殊,它并不是C系语言中常见的for语句,而是一种foreach(其他语言中用于遍历迭代对象的语法)的语法,也就是说本质上是遍历一个可迭代的对象,这听起来实在是太抽象了,我们看一个例子:
![](https://epubservercos.yuewen.com/82BE21/21511156608178806/epubprivate/OEBPS/Images/55_05.jpg?sign=1738856203-6XA1D0x50ZgLdVRmECf6CzA0ljULthaM-0-71c65e047858dd64e37473ecae1d388e)
运行后这段代码输出如下:
![](https://epubservercos.yuewen.com/82BE21/21511156608178806/epubprivate/OEBPS/Images/56_01.jpg?sign=1738856203-A90MZoeaUUWJQ7znpUwBtbzwabpv252V-0-e5639a18345da51d653d0d4168da207d)
for循环实际上用到了迭代器的知识,但是在这里展开还为时尚早,我们只要知道用range配合for可以写出一个循环即可,比如计算整数0~100的和:
![](https://epubservercos.yuewen.com/82BE21/21511156608178806/epubprivate/OEBPS/Images/56_02.jpg?sign=1738856203-nQvAdXZpXVzwEyyEFPgdyGnRN1jCn9Uv-0-6d708df7a02f345b7fc70874b0cc39a8)
那如果想计算整数50~100的和呢?实际上range产生区间的左边界也是可以设置的,只要多传入一个参数:
![](https://epubservercos.yuewen.com/82BE21/21511156608178806/epubprivate/OEBPS/Images/56_03.jpg?sign=1738856203-tAs4Xo4bfPWmF2x3Fml53bAstefOLmRZ-0-6fe1c8d8c67f450ae59c10d3a74f484b)
有时候我们希望循环是倒序的,比如从10循环到1,那该怎么写呢?只要再多传入一个参数作为步长即可:
![](https://epubservercos.yuewen.com/82BE21/21511156608178806/epubprivate/OEBPS/Images/56_04.jpg?sign=1738856203-ngxRuZISijpt8MtBHI6xLT6l2cprlh5R-0-6db947e199c810fe54a349ab438fd351)
也就是说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=1738856203-BBqIi9aIN3q6lnD0rfyVETwcUn8h3usd-0-b91dcf82c645e00e7dd847cecddb9ddc)
但是这样写之后至少存在三个问题:
● while写法中的条件为i<=100,而for写法是通过range( )来迭代,相比来说后者显然更具可读性。
● while写法中需要在外面创建一个临时的变量i,这个变量在循环结束依旧可以访问,但是for写法中i只有在循环体中可见,明显while写法增添了不必要的变量。
● 代码量增加了两行。
当然这个问题是辩证性的,有时候while写法可能是更优解,但是对于Python来说,大多时候推荐使用for这种可读性强也更优美的代码。