理解Python3中的布尔逻辑

来自菜鸟教程
跳转至:导航、​搜索

介绍

布尔数据类型可以是 TrueFalse 这两个值之一。 我们在编程中使用布尔值来进行比较并确定给定程序中的控制流。

布尔值表示与数学逻辑分支相关的真值,它为计算机科学中的算法提供信息。 以数学家乔治布尔命名,布尔这个词总是以大写的 B 开头。 值 TrueFalse 也总是分别使用大写的 T 和 F,因为它们是 Python 中的特殊值。

在本教程中,我们将介绍了解布尔值如何在 Python 中工作所需的内容,并探索比较运算符、逻辑运算符和真值表。

先决条件

您应该在您的计算机或服务器上安装 Python 3 并设置编程环境。 如果您没有设置编程环境,您可以参考本地编程环境或服务器上的编程环境适合您的操作的安装和设置指南系统(Ubuntu、CentOS、Debian 等)

比较运算符

在编程中,比较运算符用于比较值并评估为 True 或 False 的单个布尔值。

Info: 要跟随本教程中的示例代码,请通过运行 python3 命令在本地系统上打开 Python 交互式 shell。 然后,您可以通过在 >>> 提示符后添加示例来复制、粘贴或编辑示例。


下表是布尔比较运算符。

操作员 这是什么意思
== 等于
!= 不等于
< 少于
> 比...更棒
<= 小于或等于
>= 大于或等于

为了理解这些运算符的工作原理,让我们将两个整数分配给 Python 程序中的两个变量:

x = 5
y = 8

在本例中,由于 x 的值为 5,它小于 y 的值为 8

使用这两个变量及其相关值,让我们通过上表中的运算符。 在我们的程序中,我们将要求 Python 打印出每个比较运算符的计算结果是 True 还是 False。 为了帮助我们和其他人更好地理解这个输出,我们会让 Python 也打印一个 string 来向我们展示它正在评估什么。

x = 5
y = 8

print("x == y:", x == y)
print("x != y:", x != y)
print("x < y:", x < y)
print("x > y:", x > y)
print("x <= y:", x <= y)
print("x >= y:", x >= y)

当我们运行这个程序时,我们将收到以下输出。

Outputx == y: False
x != y: True
x < y: True
x > y: False
x <= y: True
x >= y: False

按照数学逻辑,在上面的每个表达式中,Python 已评估:

  • 5 (x) 是否等于 8 (y)?
  • 5不等于8吗?
  • 5 小于 8 吗?
  • 5大于8吗?
  • 5 是否小于或等于 8?
  • 5不小于等于8吗?

虽然我们在这里使用了整数,但我们可以用浮点值替换它们。

字符串也可以与布尔运算符一起使用。 它们区分大小写,除非您使用额外的 字符串方法

以下是在实践中如何将字符串与布尔运算符进行比较:

Sammy = "Sammy"
sammy = "sammy"

print("Sammy == sammy: ", Sammy == sammy)

上述程序的输出返回以下内容。

OutputSammy == sammy:  False

上面的字符串 "Sammy" 不等于字符串 "sammy",因为它们不相同; 一个以大写 S 开头,另一个以小写 s 开头。 但是,如果我们添加另一个赋值为 "Sammy" 的变量,那么它们的计算结果将等于:

Sammy = "Sammy"
sammy = "sammy"
also_Sammy = "Sammy"

print("Sammy == sammy: ", Sammy == sammy)
print("Sammy == also_Sammy", Sammy == also_Sammy)

运行上述程序后,我们将得到以下输出。 这表明只要字符串绝对相同(包括大小写),那么从布尔逻辑的角度来看,它们将评估为相等。

OutputSammy == sammy:  False
Sammy == also_Sammy:  True

您还可以使用其他比较运算符,包括 >< 来比较两个字符串。 Python 将使用字符的 ASCII 值按字典顺序 比较这些字符串

我们还可以使用比较运算符评估布尔值:

t = True
f = False

print("t != f: ", t != f)

上面的程序将返回以下内容。

Outputt != f:  True

如上面的输出所示,我们编写的代码评估 True 不等于 False

请注意两个运算符 === 之间的区别。

x = y    # Sets x equal to y
x == y  # Evaluates whether x is equal to y

第一个,= 是赋值运算符,它将设置一个值等于另一个值。 第二个,== 是一个比较运算符,它将评估两个值是否相等。

逻辑运算符

有三个逻辑运算符用于比较值。 它们将表达式计算为布尔值,返回 TrueFalse。 这些运算符是 andornot,并在下表中定义。

操作员 这是什么意思 例子
and 如果两者都为真,则为真 x and y
or 如果至少有一个为真,则为真 x or y
not 仅当为假时为真 not x

逻辑运算符通常用于评估两个或多个表达式是否为真。 例如,它们可用于确定学生在课程中注册的成绩是否通过 。 如果这两种情况都成立,那么系统将为学生分配一个成绩。 另一个示例是根据用户在过去 6 个月内是否有商店信用 进行购买来确定用户是否是在线商店的有效活跃客户。

要了解逻辑运算符的工作原理,让我们评估三个表达式:

print((9 > 7) and (2 < 4)) # Both original expressions are True
print((8 == 8) or (6 != 6)) # One original expression is True
print(not(3 <= 1))         # The original expression is False
OutputTrue
True
True

在第一种情况下,print((9 > 7) and (2 < 4)),由于使用了 and 运算符,因此 9 > 72 < 4 的计算结果都为 True。

在第二种情况下,print((8 == 8) or (6 != 6)),由于 8 == 8 评估为 True,因此 6 != 6 评估为 False 并没有什么不同,因为使用了 or 运算符. 如果我们使用了 and 运算符,这将评估为 False。

在第三种情况下,print(not(3 <= 1))not 运算符否定 3 <=1 返回的 False 值。

让我们用浮点数代替整数并针对 False 评估:

print((-0.2 > 1.4) and (0.8 < 3.1))    # One original expression is False
print((7.5 == 8.9) or (9.2 != 9.2)) # Both original expressions are False       
print(not(-5.7 <= 0.3))                # The original expression is True

在上面的例子中,

  • and 必须至少有一个 False 表达式评估为 False,
  • or 两个表达式的计算结果必须为 False,
  • not 的内部表达式必须为 True,新表达式才能计算为 False。

如果上面的结果对您来说似乎不清楚,我们将通过下面的一些 真值表 来帮助您快速了解。

您还可以使用 andornot 编写复合语句:

not((-0.2 > 1.4) and ((0.8 < 3.1) or (0.1 == 0.1)))

让我们先看看最里面的表达式:(0.8 < 3.1) or (0.1 == 0.1)。 该表达式的计算结果为 True,因为两个数学语句都是 True。

现在,我们可以获取返回值 True 并将其与下一个内部表达式组合:(-0.2 > 1.4) and (True)。 此示例返回 False,因为数学语句 -0.2 > 1.4 为 False,而 (False) and (True) 返回 False。

最后,我们有外部表达式:not(False),它的计算结果为 True,所以如果我们打印这个语句,最终的返回值是:

OutputTrue

逻辑运算符 andornot 计算表达式并返回布尔值。

真值表

数学的逻辑分支有很多需要学习的地方,但我们可以选择性地学习其中的一些,以提高我们在编程时的算法思维。

下面是比较运算符 == 和每个逻辑运算符 andornot 的真值表。 虽然您可能能够将它们推理出来,但努力记住它们也很有帮助,因为这可以使您的编程决策过程更快。

== 真值表

x == y 退货
真的 == 真的 真的
真的 == 错误的 错误的
错误的 == 真的 错误的
错误的 == 错误的 真的

与真值表

x y 退货
真的 真的 真的
真的 错误的 错误的
错误的 真的 错误的
错误的 错误的 错误的

或真值表

x 或者 y 退货
真的 或者 真的 真的
真的 或者 错误的 真的
错误的 或者 真的 真的
错误的 或者 错误的 错误的

不是真值表

不是 x 退货
不是 真的 错误的
不是 错误的 真的

真值表是逻辑中常用的数学表,在计算机编程中构造算法(指令)时有助于记忆或牢记。

使用布尔运算符进行流控制

要以流控制语句的形式控制程序的流和结果,我们可以使用 条件 后跟 子句

condition 的计算结果为布尔值 True 或 False,表示在程序中做出决定的点。 也就是说,一个条件会告诉我们某事物的计算结果是 True 还是 False。

子句 是遵循 条件 并指示程序结果的代码块。 也就是说,它是构造“如果 x 为真,则执行此操作”的 do this 部分。

下面的代码块显示了一个比较运算符与 条件语句 协同工作以控制 Python 程序流程的示例:

if grade >= 65:                   # Condition
    print("Passing grade")       # Clause

else:
    print("Failing grade")

该计划将评估每个学生的成绩是通过还是不及格。 以83分的学生为例,第一条语句求值为True,触发Passing grade的打印语句。 对于成绩为 59 的学生,第一条语句的计算结果为 False,因此程序将继续执行与 else 表达式相关的打印语句:Failing grade

因为 Python 中的每个对象都可以被评估为 True 或 False,所以 PEP 8 样式指南 建议不要将值与 TrueFalse 进行比较,因为它的可读性和会经常返回一个意想不到的布尔值。 也就是说,您应该 避免 在程序中使用 if sammy == True:。 相反,将 sammy 与另一个将返回布尔值的非布尔值进行比较。

布尔运算符提供的条件可用于通过流控制语句来决定程序的最终结果。

结论

本教程讨论了属于布尔类型的比较和逻辑运算符,以及真值表和使用布尔值进行程序流控制。

您可以在我们的“了解数据类型”教程中了解有关其他数据类型的更多信息,并可以在我们的“如何编写条件语句”教程中阅读有关条件语句的信息。

我们还有一本免费的 Python 电子书,How To Code in Python,它可以同时支持初学者和需要快速参考的人。