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