1. 布尔操作符
3个布尔操作符(and、or和not)用于比较布尔值。
像比较操作符一样,它们将这些表达式求值为一个布尔值。
让我们仔细看看这些操作符,从and操作符开始。
二元布尔操作符
and和or操作符总是接收两个布尔值(或表达式),所以它们被认为是”二元”操作符。
如果两个布尔值都为True,and操作符就将表达式求值为True;否则求值为False。
在交互环境中输入某个使用and的表达式:
>>> True and True
True
>>> True and False
False
另一方面,只要有一个布尔值为真,or操作符就将表达式求值为True。
如果都是False则求值为False:
>>> True or True
True
>>> False or False
False
not操作符
与and和or不同,not操作符只作用于一个布尔值,这使它成为”一元”操作符。
not操作符求值为相反的布尔值:
>>> not True
False
>>> not not not not True
True
就像在说话和写作中使用双重否定一样,你可以嵌套not操作符,虽然在真正的程序中并不经常这样做。
2. 混合布尔和比较操作符
既然比较操作符求值为布尔值,那么就可以和布尔值操作符一起在表达式中使用。
and、or和not操作符称为布尔操作符是因为它们总是操作布尔值。
虽然像4<6这样的表达式不是布尔值,但是可以求值为布尔值。
在交互环境中,尝试输入一些使用比较操作符的布尔表达式:
>>> (4<5)and(5<6)
True
>>> (4<5)and(9<6)
False
>>> (1==2)or(2==2)
True
计算机将先求值左边的表达式,然后求值右边的表达式。
得到两个布尔值后,它又将整个表达式再求值为一个布尔值。
也可以在一个表达式中使用多个布尔操作符,与比较操作符一起使用:
>>> 2+2 == 4 and not 2+2 == 5 and 2*2 == 2+2
True
和算术操作符一样,布尔操作符也有操作顺序。
在所有算术和比较操作符求值后,Python先求值not操作符,然后求值and操作符,最后求值or操作符。
3. if语句
最常见的控制流语句是if语句。
在Python中,if语句包含以下部分:
- if关键字
- 条件
- 冒号
- 在下一行开始,缩进的代码块
if子句后面有时候也可以跟着else语句。
只有if语句的条件为False时,else子句才会执行。
elif语句是”否者如果”,总是跟在if或另一条elif语句后面。
假如,假定有以下代码,用于检查某人的名字是否为Alice

所有控制流语句都以冒号结尾,后面跟着一个新的代码块。
4. while循环语句
利用while循环语句,可以让一个代码块一遍又一遍地执行。
只要while循环语句的条件为True,while子句中的代码就会执行。
例如,检查spam的值,如果它小于5,就输出一条消息。

5. break语句
有一个捷径可以让执行提前跳出while子句。
如果执行遇到break语句,就会马上退出while子句。
6. continue语句
像break语句一样,continue语句用于循环内部。
如果程序执行遇到continue语句,就会马上跳回到巡回开始处,重新对循环条件求值。
7. for循环和range()函数
在条件为True时,while循环就会继续执行。
但如果你想让一个代码块执行固定次数,该怎么办?
可以通过for循环语句和range()函数来实现。
在代码中,for循环语句的形式为for i in range(5):总是包含以下部分:
- for关键字
- 一个变量名
- in关键字
- 调用range()函数,最多传入3个参数
- 冒号
- 从下一行开始,缩进的代码块
让我们创建一个新的程序,命名为fiveTimes.py,看看for循环的效果:

8. rang()函数的开始、停止和步长参数
某些函数可以有多个参数调用,参数之间用逗号分开,range()就是其中之一。
这让你能够改变传递给range()的整数,实现各种整数序列,包括从0以外的值开始的序列。

rang()函数也可以有第三个参数。
前两个参数分别是起始值和终止值,第三个参数是”步长”。
步长是每次迭代后循环变量增加的值:

在为for循环生成序列数据方面,range()函数很灵活。
举例来说,甚至可以用负数作为步长参数,让循环计数逐渐减少,而不是增加:

9. 用sys.exit()函数提前结束程序
要介绍的最后一个控制流概念是如何终止程序。
当程序执行到指令的底部时,总是会终止。
但是,调用sys.exit()函数,可以让程序提前终止或退出。
因此这个函数在sys模块中,以必须先导入sys才能使用它。