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