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