了解 Python 3 中的布尔逻辑

介绍

Boolean 数据类型可以是两个值中的一个,即 TrueFalse. 我们在编程中使用 Booleans 来进行比较并确定特定程序中的控制流量。

布尔代表与数学的逻辑分支相关的真理值,该分支为计算机科学中的算法。以数学家乔治·布尔(George Boole)命名,布尔(Boole)一词总是以资本化的B开始。

在本教程中,我们将讨论您需要了解布尔语如何在Python中工作,并探索比较运算符、逻辑运算符和真理表。

前提条件

如果您没有设置编程环境,您可以参考本地编程环境的安装和安装指南(https://www.digitalocean.com/community/tutorial_series/how-to-install-and-set-up-a-local-programming-environment-for-python-3)或适用于您的操作系统(Ubuntu, CentOS, Debian 等)的编程环境(https://www.digitalocean.com/community/tutorial_collections/how-to-install-python-3-and-set-up-a-programming-environment)。

运营商比较

在编程中,比较运算器用于比较值,并评估到一个单一的Boolean值为 True 或 False。

<$>[info] 信息: 要跟进本教程中的示例代码,请在本地系统上运行python3命令,打开Python交互壳。

下面的表是布尔比较运算器。

OperatorWhat it means
==Equal to
!=Not equal to
<Less than
>Greater than
<=Less than or equal to
>=Greater than or equal to

要了解这些运算符是如何工作的,让我们在Python程序中将两个整数分配给两个变量:

1x = 5
2y = 8

在本示例中,由于x具有5的值,所以它比y具有8的值更小。

在我们的程序中,我们将要求Python打印每个比较操作员是否评估为True或False。

1x = 5
2y = 8
3
4print("x == y:", x == y)
5print("x != y:", x != y)
6print("x < y:", x < y)
7print("x > y:", x > y)
8print("x <= y:", x <= y)
9print("x >= y:", x >= y)

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

1[secondary_label Output]
2x == y: False
3x != y: True
4x < y: True
5x > y: False
6x <= y: True
7x >= y: False

按照数学逻辑,在上述每个表达式中,Python 评估了:

  • 5(x)等于8(y)? ** 假**
  • 5不等于8吗? ** 假**
  • 5不等于8吗? ** 假**
  • 5不等于8吗? ** 假**
  • 5不等于8吗? ** 假**
  • 5不等于8吗? ** 假**

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

字符串也可以与布尔运算符一起使用,除非您使用额外的 字符串方法

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

1Sammy = "Sammy"
2sammy = "sammy"
3
4print("Sammy == sammy: ", Sammy == sammy)

上面的程序的输出返回如下。

1[secondary_label Output]
2Sammy == sammy:  False

上面的Sammy字符串不等于sammy字符串,因为它们不是相同的;一个从上面的S字符串开始,另一个从下面的s字符串开始。

1Sammy = "Sammy"
2sammy = "sammy"
3also_Sammy = "Sammy"
4
5print("Sammy == sammy: ", Sammy == sammy)
6print("Sammy == also_Sammy", Sammy == also_Sammy)

在运行上述程序后,我们将获得以下输出,这表明只要字符串是完全相同的(包括案例),那么他们将从布尔逻辑的角度评估为平等。

1[secondary_label Output]
2Sammy == sammy:  False
3Sammy == also_Sammy:  True

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

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

1t = True
2f = False
3
4print("t != f: ", t != f)

上面的程序将返回如下。

1[secondary_label Output]
2t != f:  True

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

请注意两个运算符===之间的差异。

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

第一个, = 是分配运算符,它会设置一个值等于另一个值;第二个, == 是比较运算符,它会评估两个值是否等同。

逻辑操作员

它们将表达式评估到布尔值,返回TrueFalse。这些操作员是and,ornot,并在下表中定义。

运算器 这是什么意思 例如 :------: ------ ------ 是真实的,如果两者都是真实的, x 和 y 或者 是真实的,如果至少一个是真实的,x 或 y 是真实的,只有如果错的,不 x`

逻辑运算器通常用于评估两个或多个表达式是否是真实的或不真实的,例如,它们可以用来确定学生是否在课程中注册的等级是否通过 and 如果这两种情况都是真实的,那么学生将在系统中分配一个等级。

要了解逻辑操作器是如何工作的,让我们评估三个表达式:

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

在第一个案例中,印刷(9 > 7)和(2 < 4)),既9 > 72 < 4都评估为True,因为使用了和`运算符。

在第二种情况下,印刷(8 == 8)或(6!= 6)),因为8 == 8被评估为 True,所以6!= 6被评估为 False 没有任何区别,因为使用了or`运算符。

在第三种情况下,‘打印(不(3 < = 1)’),‘不’运算器否定了‘3 < = 1’返回的错误值。

让我们用整数代替浮点,并瞄准虚假评估:

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

在上面的例子中,

  • and 必须至少有一个 False 表达式评估为 False
  • 必须两个表达式评估为 False
  • not 必须其内部表达式为 True,以便新的表达式评估为 False

如果上述结果看起来对你不清楚,我们将通过下面的一些(真相表)(https://andsky.com/tech/tutorials/understanding-boolean-logic-in-python-3#truth-tables)来提高速度。

您还可以使用,编写复合陈述:

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

让我们先看看最内在的表达式: (0.8 < 3.1)或 (0.1 == 0.1). 这个表达式评估为 True,因为这两个数学陈述都是 True。

现在,我们可以将返回的值True并将其与下一个内部表达式相结合:(-0.2 > 1.4)(True)这个示例返回False,因为数学陈述-0.2 > 1.4False,而(False)和(True)则返回False

最后,我们有外部表达式: not(False),该表达式评估为 True,因此如果我们打印此表达式,最终返回的值是:

1[secondary_label Output]
2True

逻辑运算,评估表达式并返回布尔值。

真理桌面

关于数学的逻辑分支还有很多东西要学习,但我们可以选择性地学习一些,以改善我们在编程时的算法思维。

以下是对比运算符 == 的真相表,以及每个逻辑运算符 and, orno. 虽然您可能能够推理它们,但还可以有助于工作来记住它们,因为这可以使您的编程决策过程更快。

真理桌

x==yReturns
True==TrueTrue
True==FalseFalse
False==TrueFalse
False==FalseTrue

真相桌

xandyReturns
TrueandTrueTrue
TrueandFalseFalse
FalseandTrueFalse
FalseandFalseFalse

真相桌

xoryReturns
TrueorTrueTrue
TrueorFalseTrue
FalseorTrueTrue
FalseorFalseFalse

不是真相桌子

notxReturns
notTrueFalse
notFalseTrue

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

使用布尔运算器来控制流量

为了以流量控制陈述的形式控制程序的流量和结果,我们可以使用 条件,然后是 条款

一个 ** 条件** 评估到一个 Boolean 值为 True 或 False,呈现一个在程序中作出决定的点,即一个条件会告诉我们是否评估到 True 或 False。

条款是继 条件之后的代码块,并决定了程序的结果,也就是说,它是构建如果x是真的,那么做这个do this部分。

下面的代码块显示了与 条件声明协同工作的比较运算器的例子,以控制Python程序的流程:

1if grade >= 65:					# Condition
2    print("Passing grade")		# Clause
3
4else:
5    print("Failing grade")

这个程序将评估每个学生的分数是否通过或失败.在83分的学生的情况下,第一个陈述将评估为真实,并触发了通过级的印刷陈述.在59分的学生的情况下,第一个陈述将评估为,因此程序将继续执行与else表达式相关的印刷陈述:失败级

由于Python中的每个单个对象都可以被评估为True或False,因此PEP 8风格指南(LINK0)建议不要将一个值与TrueFalse进行比较,因为它不那么易读,并且会经常返回意想不到的Boolean。

布尔运算器提供条件,可以通过流量控制陈述来决定程序的最终结果。

结论

本教程讨论了属于布尔式类型的比较和逻辑操作员,以及真理表和使用布尔语用于程序流量控制。

您可以在我们的理解数据类型(LINK0)教程中了解更多有关其他数据类型的信息,并可以在我们的如何编写条件声明(LINK1)教程中阅读有关条件声明的信息。

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

Published At
Categories with 技术
comments powered by Disqus