Python学习精粹016:布尔型(布尔值、布尔运算符)

布尔型(Boolean,首字母大写)以发明布尔代数的英国数学家乔治·布尔(George Boole)命名,它通常只有两个值:True(真)与False(假),用于非此即彼的逻辑判断,以一个字节存储于内存中,是绝大数编程语言中最简单的数据类型。

在编程语言中,逻辑运算通常也称为布尔运算,布尔运算的结果称为布尔值,布尔变量用来存储布尔值。如下所示:

variable1 = True
variable2 = False
variable3 = variable1 + variable2
print(variable3)

一、布尔值

True与False都为Python关键字,不能用作标识符(如变量名),作为布尔值时,其首字母必须大写而其他字母为小写,且不能用引号包围。

如将True或False作为变量名:

True = 'Yes'
Flase = 'No'

程序执行将失败,并提示错误信息“SyntaxError: can't assign to keyword”。

当True或False作为布尔值时,首字母没有大写且其他字母没有小写,如:

logic_variable1 = TRUE

logic_variable2 = false

logic_variable3 = TruE

logic_variable4 = fALSE

print(type(logic_variable1))

print(type(logic_variable2))

print(type(logic_variable3))

print(type(logic_variable4))

程序执行将失败,并提示错误信息“NameError: name 'TRUE' is not defined”。此时,Python将其视为未定义的变量名。

如将True或False用引号包围起来,则程序执行时Python编译器会将其视为字符串型的值,如下所示:

logic_variable1 = 'True'

logic_variable2 = "False"

print(type(logic_variable1))

print(type(logic_variable2))

将输出:

<class 'str'>

<class 'str'>

在Python中,可用int函数将一个布尔值转换为一个整数值,用float函数将一个布尔值转换为一个浮点数,如下所示:

print(int(True))

print(int(False))

print(float(True))

print(float(False))

输出:

1

0

1.0

0.0

类似的,可用bool函数将一个数值转换为一个布尔值,如将数值0转换为布尔值False,将非0的整数或浮点数转换为布尔值True,如下所示:

print(bool(0))

print(bool(0.0))

print(bool(1))

print(bool(-1))

print(bool(5.0))

print(bool(3.01))

除了前两个返回布尔值False,其他都将返回布尔值True。

那么,能否将一个字符串值转换为一个布尔值吗?接下来,我们试试:

print(bool('This is a string'))

print(bool(''))

分别返回了布尔值True和False,意味着通过bool函数可以将一个非空字符串值转换为一个布尔值True,而将一个空字符串值转换为一个布尔值False。

再看看下面的代码:

print(bool())

print(bool(None))

都将返回布尔值False。

因此,如果bool函数无参数,或参数值为零(整数0或浮点数0)、空字符串('')、空值(None),都将返回布尔值False。

再执行以下代码,会分别返回什么结果?

print(bool(True + False))

print(bool(True - False))

print(bool(True * False))

分别返回了布尔值True、True和False。

为什么会这样呢?我们再试试:

print(bool(True / False))

程序执行失败,并提示错误信息“ZeroDivisionError: division by zero”。

原来,Python对布尔值进行运算时,会将True视为1,将False视为0,故而导致了除零错误。再执行如下代码:

print(int(True + False))

print(int(True - False))

print(int(True * False))

分别返回了数值1、0和0。

再试下:

print(int(1 + True))

print(int(0 + True))

print(int(1 + False))

print(int(0 + False))

将分别返回数值2、1、1、0。

二、布尔运算符

Python提供了三个布尔运算符not、and、or,其运算规则如下:

1. 逻辑非运算(not)

x = True

print(not x)

x = False

print(not x)

如x为True,则not x为False;反之,如x为False,则not x为True。

逻辑非运算(not)的真值表如下:

表3-1 逻辑非运算(not)的真值表

x

not x

True

False

False

True

或如下图所示:

逻辑非运算(not

x

y

True

False

not x

False

True

图3-1 逻辑非运算(not)的真值表

2. 逻辑与运算(and)

如下所示:

x = True

y = True

print(x and y)

x = True

y = False

print(x and y)

x = False

y = True

print(x and y)

x = False

y = False

print(x and y)

如x为True,y为True,则x and y为True;

如x为True,y为False,则x and y为False;

如x为False,y为True,则x and y为False;

如x为False,y为False,则x and y为False。

逻辑与运算(and)的真值表如下:

表3-2 逻辑与运算(and)的真值表

x

y

x and y

True

True

True

True

False

False

False

True

False

False

False

False

或如下图所示:

逻辑与运算(and)

x

True

False

y

True

True

False

False

False

False

图3-2 逻辑与运算(and)的真值表

and是一个短路操作符(short-circuit operator),如果第一个表达式为True,则只计算第二个表达式。如果表达式不必计算所有操作数和运算符即可得出结果,则称为表达式的短路求值。

3. 逻辑或运算(or)

x = True

y = True

print(x or y)

x = True

y = False

print(x or y)

x = False

y = True

print(x or y)

x = False

y = False

print(x or y)

如x为True,y为True,则x or y为True;

如x为True,y为False,则x or y为True;

如x为False,y为True,则x or y为True;

如x为False,y为False,则x or y为False。

逻辑与运算(or)的真值表如下:

表3-3 逻辑或运算(or)的真值表

x

y

x or y

True

True

True

True

False

True

False

True

True

False

False

False

或如下图所示:

逻辑与运算(or

x

True

False

y

True

True

True

False

True

False

图3-3 逻辑或运算(or)的真值表

or也是一个短路操作符,如果第一个表达式为False,则只计算第二个表达式。

综上所述,可以总结为:

逻辑运算

结果

not x

如果x为True,返回False;如果x为False,返回True。

x and y

只有x和y都为True时,才返回True,否则返回False。

x or y

只有x和y都为False时,才返回False,否则返回True。

在使用布尔运算符时,优先级依次从大到小为not、and、or,同一级的则从左至右依次运算。

如下所示:

print((1 < 2) or (1 > 2) and not (1 < 2))

将返回布尔值True。

其中,计算过程如下:

(1)首先,计算not (1 < 2),返回False。

(2)接着,计算(1 > 2) and not (1 < 2),即False and False,返回False。

(3)最后,计算(1 < 2) or False,即True or False,返回True。

需要注意的是,圆括号()中表达式的优先级要高于布尔运算符,如将上例中加入圆括号()来改变相关表达式的优先级:

print(((1 < 2) or (1 > 2)) and (not (1 < 2)))

将返回布尔值False。

具体计算过程如下:

(1)按照从左至右的顺序,首先,计算圆括号中的表达式((1 < 2) or (1 > 2)),返回True。

(2)接着,计算圆括号中的表达式(not (1 < 2)),返回False。

(3)最后,计算True and False,返回False。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值