如何评估具有多个条件的条件语句?

时间:2016-09-19 04:04:56

标签: python

我希望以相同的方式评估以下两个代码块,但似乎并非如此。例如,有了这个:

if True or False and False:
    print('True')                                                               
else:                                                                           
    print('False')

打印为True。但有了这个:

if (True or False) and False:
    print('True')
else:                                                                           
    print('False')

打印错误。这是我对逻辑的细分:

  • True or False = True
  • True and False = False

通过替换,(True or False) and False = True and False = False

为什么会这样?

3 个答案:

答案 0 :(得分:3)

这是因为operator precedence。根据Python 2.x和3.x文档,and运算符的优先级高于or运算符。另外,看一下布尔真值表:

enter image description here

这意味着在你的表达中:

if True or False and False:

在表达式中,False and False因优先级而组合在一起。这意味着Python将其评估为:

if True or (False and False):

现在,它从左到右进行评估。由于第一个条件是True,它会短路并跳过第二个条件并评估为True打印'True'。 (这种短路是因为如果第一方是真的,必须是真的。)

现在在你的第二个例子中:

if (True or False) and False:

这会先True or False进行评估,从而得到True。然后它True and False False,打印'False'。

>>> print(True or False)
True
>>> print(True and False)
False

答案 1 :(得分:1)

(True or False)评估为True。因此(True or False) and False评估为True and False,评估为False

这个答案很好地解释了布尔评估的规则:https://stackoverflow.com/a/16069560/1470749

答案 2 :(得分:1)

标准操作顺序使or优先于True or False and False,因此第一个语句True or (False and False) 在逻辑上等同于

True

评估为(True or False) and False

第二个陈述是

False

评估为utils/people.js