布尔表达式的值只有两个:真和假。在Python语言中,真值为1,假 值为0。下面是Python语言中较常用的比较两个数大小运算符:
x == y #x等于y
x != y #x不等于y
x > y #x大于y
x < y #x小于y
x >= y #x大于等于y
x <= y #x小于等于y
下面是这些运算符的例子:
>>> x = 3.4
>>> y = 9
>>> z = 4.55
>>> x == y
0
>>> x != z
1
>>> x > y
0
>>> y > x
1
>>> z <= y
1
Python语言中大部分比较操作符的意义与数学中类似。有两个操作符 的用法容易混肴,就是赋值操作符“=”和比较操作符中“==”。在比较两个数是否相等时,经常错误的用赋值操作符“=”作比较,而忘记了 它的真正含义是赋值操作,操作符“==”才是真正比较这两个数是否相 等的运算符。另外,还要注意大于等于和小于等于操作符的写法,不要将 它们写成这样的形式:“=<”和“=>”。
Python有三种逻辑操作:and、or、not。这三个操作符的语义与其英 语意义相同,分别是:与、或、非。
例如,(x > 0)and(x < 10)这个表达式,and操作符连接两个条件表达 式,只有x大于0,并且x小于10的时候,整个表达式才为真。
再看这个表达式,(n%2 == 0)or(n%3 == 0),or 连接两个判断是否 等于0的表达式,只要n能够被2整除,或是被3整除,这两个表达式只要有 一个为真,整个表达式就为真。
最后,not操作符对表达式的值取反。not(x > y),如果x大于y,取反 后整个表达式的值为假,否则,为真。
严格来说,逻辑操作符的操作数应该为布尔表达式,但Python对此处 理的比较灵活,即使操作数是数字,解释器也把他们当成“表达式”。 非0的数字的布尔值为1,0的布尔值是0。看下面的例子:
>>> a = 1
>>> b = 0
>>> a and b
0
>>> a or b
1
>>> not a
0
>>> not 0
1
在python中空字符串为假,非空字符串为真。非零的数为真。我们研 究一下数字和字符串之间、字符串之间的逻辑操作规律。首先看and操作符:
>>> 9 and "OK"
‘OK’
>>> "OK" and 9
9
>>> "OK" and "ME"
‘ME’
>>> "" and 9
’’
>>> "" and "OK"
’’
>>> 0 and "OK"
0
只要左边的表达式为真,整个表达式返回的值是右边表达式的值。否则, 返回左边表达式的值。
or操作符的规则是:只要两边的表达式都为真,整个表达式的结果是 左边表达式的值;如果是一真一假,返回真值表达式的值。特别注意的是空值和0的情况,这时候返回的是右边的0或空值:
>>> "" or 0
0
>>> 0 or ""
’’
not的情况比较简单:
>>> not 0
1
>>> not ’’
1
在程序执行的过程中,时常依据一些条件的变化,改变程序的执行流 程。改变程序流程的功能,主要由条件语句配合布尔表达式来完成。例如:
if (x>0):
print x
当x大于0时,执行print语句;若x小于或等于0,print语句不被执行。
if语句由“头”和“块”组成,它的书写方式在Python中具有典型的 代表性:
Header:
First Statement
Second Statement
......
Last Statement
Other Statement
“头”是if语句的开始,以冒号结束。在“头”里进行条件判断,以确定 是否执行if语句的“块”部分。在if语句的“块”的每一行,必须至少有一 个空格的缩进,缩进表示这一行是属于if语句的一部分。第一个没有缩进 的语句标志着if语句的结束。“块”内至少有一条语句,如果暂时还没有 任何操作,你可以加一条语句pass,它什么都不做,是一条空语句。
需要注意的是if语句行以冒号结束。可能是习惯了C+ +和java中写 法,这个冒号我总是忘了写。这个冒号与文章中冒号的用法类似。例如:
这部手机的特点是:
待机时间长;
价格便宜;
......
操作方便。
所以我买了它。
冒号用以引出要说的内容,if语句同样是引出要执行的语句;在上一个例 子中,手机的特点写完后,缩进结束,表示这一部分内容已经写完了,再 往后就是别的的内容了。同样,if语句后面第一个没有缩进的语句行,就 不属于它的“块”了,而是程序要执行的其它内容了。
第二种if语句的形式是有两个执行流程,关键字else(否则)引出另一 个程序流程。例如:
if x%2 == 0:
print x, "is even"
else:
print x, "is odd"
如果x除以2的余数是0,则x是偶数,执行第一条打印语句;如果x是奇 数,就执行第二条打印语句,也就是else引出的语句。因为x不是奇数就 是偶数,只能二者居其一,所以这两条打印语句只能执行其中的一条, 即这段代码的执行流程有两个分枝。这段代码可用语言表述成:如果x是 偶数,则执行第一条打印语句;否则,x必定是奇数,执行第二条打印语 句。高级程序语言是不是和自然语言很接近?
我们也可以将这段代码“封装”成一个检验奇偶的函数:
def isParity(x):
if x%2 == 0:
print x, "是偶数"
else:
print x, "是奇数
该函数的执行结果如下:
>>> import sys
>>> sys.path.append(’c:\python’) #设定此脚本文件的路径。
>>> from isparity import isParity #从脚本文件中引入函数。
>>> isParity(8)
8 是偶数
>>> isParity(9)
9 是奇数
有时候,程序的分支不止两个,可能是三个,或更多。此时,就需 要elif语句引出更多的分支。elif语句是“else if”的缩写,每一个elif语句为 程序引出一个分支。elif语句的数量没有限制,但最后的分支必须是else语 句,并且只能是最后一个程序分支。请看下面的脚本文件:
def largeNumber(x, y):
if x < y:
print x, "小于", y
elif x > y:
print x, "大于", y
else:
print x, "等于", y
程序按顺序检查条件表达式,当找到第一个满足要求的表达式后,执行此 分支内的语句。剩下的条件,即使有满足要求的,也不做检查。请看上一 函数执行的结果:
>>> import mylib
>>> mylib.largeNumber(3, 9)
3 小于 9
>>> mylib.largeNumber(4, 1.2)
4 大于 1.2
>>> mylib.largeNumber(0, 0)
0 等于 0