True + True = 2.优雅地执行布尔算术?

时间:2016-07-08 23:43:04

标签: python boolean boolean-operations

我有代表SAT论坛的真值的嵌套列表,如下所示:

[[[0, True, False], [0, True, False], [0, True, 1]], [[0, True, True], [2, True, True], [3, False, True]], [[1, False, False], [1, False, False], [3, False, True]]]

([x0=0] + [x0=0] + [x0=1]) * ([x0=1] + [x1=1] + [-x2=1]) * ([-x3=0] + [-x3=0] + [-x2=1])

我想计算整个公式的真值。第一步是在每个子句中加上文字的真值。

像这样:

clause_truth_value = None

for literal in clause:
    # multiply polarity of literal with its value
    # sum over all literals
    clause_truth_value += literal[1]*literal[2]

如果总和后clause_truth_valueTrue,则整个条款为真。

但我没有得到我的预期:

True + True = 2这不是预期的

True * True = 1符合预期

False + False = 0符合预期

False * False = 0符合预期

so ... True只是1而False是0 ......这很糟糕,我预计算术运算符会因为布尔代数而重载。有一种优雅的方法可以做布尔变量的布尔运算吗?

2 个答案:

答案 0 :(得分:3)

在Python中,True == 1False == 0TrueFalsebool类型,int的子类型。当您使用运算符+时,它会隐式添加TrueFalse的整数值。

int(True)
# 1

int(False)
# 0

您真正想要的是将TrueFalse视为二进制数。

int(False & False)
# 0

int(True & False)
# 0

int(True & True)
# 1


来自Bitwise Operators in Python

  

x& y

     

是"按位和"。如果输出的每一位都是1   y的x AND的相应位是1,否则它是0.

     

x | y

     

是"按位还是"。如果对应的位,则输出的每个位都为0   y的x AND为0,否则为1。

答案 1 :(得分:2)

有一种方法可以进行布尔运算。那种方式是使用布尔运算符。

  • 并且,当您调用“*”时,是and
  • 或者,当您调用“+”时,是or
相关问题