使用 3 个或更多变量评估布尔逻辑

Posted

技术标签:

【中文标题】使用 3 个或更多变量评估布尔逻辑【英文标题】:Evaluating Boolean logic with 3 or more variables 【发布时间】:2020-06-09 21:43:26 【问题描述】:

我在评估三个布尔变量时试图了解 Python 的行为。

>>> True and True and False == False
True

评估为 'True',这是我所期望的。

然而

>>> True and False and True == False
False
>>> False and True and True == False
False

当我预期 True 时,两者都评估为 'False'。有人可以帮助我了解我在这里缺少什么。我尝试过搜索,但找不到在单个语句中评估 3 个布尔变量的示例。

谢谢!

【问题讨论】:

【参考方案1】:

这是我能想到的解释

False and True and True == False
False and True and False        ( because True == False results in False)
(False and True) and False
False and False                 ( because 0 and 1 is 0)
False                           ( because 0 and 0 is 0)


True and False and True == False
True and False and False        ( because True == False results in False)
(True and False) and False      
False and False                 ( because 0 and 1 is 0)
False                           ( because 0 and 0 is 0)

【讨论】:

【参考方案2】:

它假设像三个输入和门表

A   B   C   output
0   0   0   0
0   0   1   0
0   1   0   0
0   1   1   0
1   0   0   0
1   0   1   0
1   1   0   0
1   1   1   1


True and True and False == False  # 0 and 0 and 0 the answer is 0 (False)
False and True and True == False  # 0 and 1 and 0 the answer is 0 (False)
False and True and True == False  # 0 and 1 and 0 the answer is 0 (False)

如果您想了解更多变量

True and True and True and True and False  
 # 1 and 1 and 1 and 1 and 0  output will be 0 (False)
 # 1 * 1 * 1 * 1 * 0 output will be 0 (False)

True and True and True and True and True 
 # 1 and 1 and 1 and 1 and 1  output will be 1 (True)
 # 1 * 1 * 1 * 1 * 1 output will be 1 (True)

True and False or True or True or True 
# 1 and 1 or 1 or 1 or 1  output will be 1 (True)
# 1 * 1 + 1 + 1 + 1 output will be 1 (True)

【讨论】:

Ananth,你所描述的是我所期望的行为。但是,如果您在 python 控制台中输入“False and True and True == False”,它将评估为“False”。 我已经用行为截图更新了我的原始帖子 @ilmatic9000 当然是假的,你能告诉我你不明白的地方吗?【参考方案3】:

好的,我已经解决了。

'==' 运算符具有优先权,并首先被评估。

如果我将左边的语句括在括号中,那么我会得到https://***.com/users/10384101/ananth-p 发布的响应中指定的预期行为

带括号

Python 3.7.4 (default, Aug 13 2019, 15:17:50) 
[Clang 4.0.1 (tags/RELEASE_401/final)] :: Anaconda, Inc. on darwin
Type "help", "copyright", "credits" or "license" for more information.

>>> (True and True and False) == False
True
>>> (True and False and True) == False
True
>>> (False and True and True) == False
True

不带括号

>>> True and True and False == False
True
>>> True and False and True == False
False
>>> False and True and True == False
False
>>> 

【讨论】:

对了,我帮你了吗? 问题是我没有将左边的语句括在括号中。 Python 在评估导致我在最初帖子中观察到的行为的“和”之前评估了“==”。所以是的,你有助于确认我对布尔运算的理解。例如除了 LHS 上的括号外,以下两个陈述是相同的。第一个评估为“假”,第二个评估为“真”。 >>> 假和真和真 == 假假 >>>(假和真和真) == 假真 是的,优先级和括号在这里起了作用 “'==' 运算符优先且首先被评估”不,== 被最后且懒惰地评估。您缺少的是布尔运算符位于“顶部”(因为您通常希望 a == b and c == d 成为 (a == b) and (c == d) 而不是 a == (b and c) == d),因此 True and False and True == False 被解析为 (True) and (False) and (True == False),这显然是False x and False and x 必然是 False。 Masklinn - 所以声明 "True and True and False == False" 被分解成 1.)"True and True" , 2.) “假 == 假”1.), 2.) 先求值,再求 1.), 2.) 的结果为 "1.) 和 2.) " 返回 'True'?

以上是关于使用 3 个或更多变量评估布尔逻辑的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 中动态评估简单的布尔逻辑

将对象评估为布尔值

第3集 布尔逻辑和逻辑门

布尔变量在项目中的应用

什么是布尔变量,要如何使用?

在 Haskell 中为逻辑表达式生成真值表