lo *_*cre 5 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]]]
Run Code Online (Sandbox Code Playgroud)
代表
([x0=0] + [x0=0] + [x0=1]) * ([x0=1] + [x1=1] + [-x2=1]) * ([-x3=0] + [-x3=0] + [-x2=1])
Run Code Online (Sandbox Code Playgroud)
我想计算整个公式的真值。第一步是将每个子句中文字的真值相加。
像这样:
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]
Run Code Online (Sandbox Code Playgroud)
如果clause_truth_value是True在求和之后,则该子句整体为真。
但我没有得到我所期望的:
True + True = 2 这不是预期的
True * True = 1 正如预期的那样
False + False = 0 正如预期的那样
False * False = 0 正如预期的那样
所以... True 只是 1 和 False 是 0 ... 糟透了,我希望算术运算符为布尔代数重载。有没有一种优雅的方法来对布尔变量进行布尔运算?
在 Python 中,True == 1and False == 0、 asTrue和False是 type bool,它是int. 当您使用的运营商+,它是隐式添加的整数值True和False。
int(True)
# 1
int(False)
# 0
Run Code Online (Sandbox Code Playgroud)
您真正想要的是将True和False视为二进制数。
int(False & False)
# 0
int(True & False)
# 0
int(True & True)
# 1
Run Code Online (Sandbox Code Playgroud)
x & y
做一个“按位与”。如果 y 的 x AND 的对应位为 1,则输出的每一位为 1,否则为 0。
× | 是
做一个“按位或”。如果 y 的 x AND 的对应位为 0,则输出的每一位为 0,否则为 1。
| 归档时间: |
|
| 查看次数: |
9212 次 |
| 最近记录: |