以下代码的Python True / False

时间:2015-04-01 11:22:03

标签: python boolean

如何评估Python代码:

not not True or False and not True

就我自己而言,我有两个猜测:

方法1:

  

步骤代码
   1 不是真或假而不是真实的    2 False 或False False
   3 True 或False和FUE    4 True 和False
   5 错误

方法2:

  

步骤代码
   1 不是真或假而不是真实的    2 False 或False False
   3 True False
   4 True

2 个答案:

答案 0 :(得分:3)

Python's operators precedence

的表格中
  • or的优先级低于
  • and其优先级较低
  • 而不是not

据说:

  not not True or False and not True

等同于

  ((not (not True)) or (False and (not True)))

编辑:正如Martijn Pieters在下面的评论中所注意到的,值得一提的是Python有短路运营商。这意味着andor可以保证从左到右进行评估:

  • 如果or的左项是True,则永远不会评估正确的术语(因为True or whatever在布尔逻辑中是True
  • 如果and的左项是False,则永远不会评估正确的术语(因为False and whatever在布尔逻辑中是False

所以,举个例子:

  1. 第一步是评估not TrueFalse

     ((not (not True)) or (False and (not True)))
            ^^^^^^^^
             False
    
  2. 然后not False评估为True

     ((not    False  ) or (False and (not True)))
       ^^^^^^^^^^^^^^
           True
    
  3. 因为我们没有True or ... Python立即停止使用结果True进行评估:

     (     True        or (False and (not True)))
           ^^^^^^^^^^^^^^ ......................
                      True         (right-hand side ignored)
    

答案 1 :(得分:0)

要理解这一点,您应该看到Operator precedence

您的代码相当于:

((not (not True)) or (False and (not True)))

现在你应该能够说出答案是正确的以及为什么。