![Python一行流:像专家一样写代码](https://wfqqreader-1252317822.image.myqcloud.com/cover/989/41202989/b_41202989.jpg)
控制流
控制流语句让你能够在代码中做出判断。算法任务通常都由一系列的命令组成,从而常被比作烹饪食谱:把锅装上水,加点盐,加入米,把水倒掉,盛饭。但如果就这样执行,没有任何判断条件,这组命令倒是几秒钟就执行完了,饭是肯定没煮好的,因为你刚加上水、盐、米,马上就进入倒水环节,水还没热,饭也没熟。
需要根据不同的情况做出不同的处理:只有当水热了,才把饭放进去;等到饭熟了,再把水沥掉。在现实世界里,你想要准确预测未来状况,编写完全确定的程序,基本是不可能的。相反,你的程序必须能够在不同条件下做出不同的反应。
if、else和elif
使用关键字if、else和elif(见清单1-10),可以根据条件判断执行不同的代码分支。
![](https://epubservercos.yuewen.com/CBE828/21440188101525806/epubprivate/OEBPS/Images/41968_48_2.jpg?sign=1739439076-L1NmaCoFUQQbxI0uB8XSot42ct5Zwe5u-0-462a4fc961f331f35bfc9af5b162d9b9)
![](https://epubservercos.yuewen.com/CBE828/21440188101525806/epubprivate/OEBPS/Images/41968_49_1.jpg?sign=1739439076-F2OOFW74paf6KFMIfOPQSk947mFm99w0-0-9710a8868377f864fb640224c4bcd7fd)
清单1-10:使用关键字if、else和elif
这里首先把用户的输入值转换为一个整数,并把它存在变量x中➊。然后去检查这个值是比3大➋,还是等于3 ➌,还是比3小➍。换句话说,这段代码会以差异化的方式,对现实世界中不可预测的输入值做出反应。
循环
Python使用两种类型的循环:for循环和while循环,来实现重复执行代码段的功能。使用循环语句,你可以轻松写出一个只有两行代码但可以永远执行下去的程序。不用循环的话,要实现这种重复就会很麻烦(另一个选择是递归)。
从清单1-11中可以看到这两种循环在使用上的差别。
![](https://epubservercos.yuewen.com/CBE828/21440188101525806/epubprivate/OEBPS/Images/41968_49_2.jpg?sign=1739439076-PwufpgXeGjqATUXqKBeoNqHGzHXoF4A0-0-7f13015a56750110e79e88d109de56a1)
清单1-11:使用关键字for和while
这两种循环变体都会在命令行中打印出整数0、1和2,但却是以两种不同的方式来完成这个任务的。
for循环声明了一个循环变量i,它的值会迭代地遍历[0,1,2]中的每一个,直到遍历完。
while循环只要满足一个特定的条件就会一直执行下去,在我们的例子里,这个条件是j<3。
有两种基本的方法可以终止一个循环:可以定义一个最终会返回False的循环条件;或者在循环体内的某个位置使用关键词break。清单1-12是后者的一个例子。
![](https://epubservercos.yuewen.com/CBE828/21440188101525806/epubprivate/OEBPS/Images/41968_50_1.jpg?sign=1739439076-v5O5aOEIiOL03eOVAdKaNgFNPfdTGHXM-0-0516feb01422d294c929dc7f67ab571b)
清单1-12:使用关键字break
这里创建了一个while循环,它的循环条件的值永远为True,乍一看,循环应该会永远执行下去。使用无限while循环是一种常见做法,比如说开发Web服务器的时候,就需要不断重复以下过程:等待一个新的Web请求进来,并且去处理这个请求。不过,在某些情况下,你还是会希望提前退出循环。拿Web服务器的例子来说,当你的服务器正在遭受攻击的时候,可能会考虑安全因素而停止提供文件服务。在这种情况下,你可以使用关键字break来停止循环,并立即执行后面的代码。在清单1-12中,循环提前结束后,会执行print("hello world")。
也可以强制Python解释器跳过循环中的某些部分,而不提前结束循环。比如说你可能希望跳过恶意的Web请求,而不是完全停止服务器。可以使用continue语句来实现这个目的,它会结束当前的循环迭代,并且重新跳回循环条件的位置继续执行(见清单1-13)。
![](https://epubservercos.yuewen.com/CBE828/21440188101525806/epubprivate/OEBPS/Images/41968_50_2.jpg?sign=1739439076-6cy67wyWiFfixFiPy2WSCgHfLxc6UDGq-0-6fa4e03a4c02d545930521e0eb7053e7)
清单1-13:使用关键字continue
这段代码会永远执行下去,但却一次也不会执行print语句。原因是continue语句会结束当前循环并跳回循环开头,所以永远也执行不到print语句,永远不会执行到的代码被称为死代码。因为这个原因,continue语句(以及break语句)通常都会放在if-else的判断分支里,只在一定条件下执行。