python 中的真值表?
Truth tables in python?
我在Python工作,我想以真值表的形式操作数据。我需要简化表格、将表格转换为布尔表达式等...我发现 sympy
,但它似乎不提供对真值表的本机支持。我还找到了一些其他实用程序,例如 pyeda
,但在深入研究其中一个之前,我想知道是否有任何普遍接受的标准包可以满足我的需要。
有什么想法吗?提前致谢。
从布尔表达式生成真值 tables 并不难
sympy
.
在下面的程序中,布尔表达式用于生成
可满足的模型列表。使用生成器
所有可能的变量真值组合,它列出了完整的
真相table.
import itertools
from sympy import *
from sympy.logic import simplify_logic
from sympy.logic.inference import satisfiable
my_names = 'ABCD'
A,B,C,D = symbols(','.join(my_names))
e1 = Nor(Nor(A, B), Or(C, D))
my_symbols = sorted(e1.atoms(Symbol), key=lambda x: x.name)
print('Set of symbols used:', my_symbols)
models = satisfiable(e1, all_models=True)
sat_mods = []
for m in models:
sat_mods.append(dict(sorted(m.items(), key=lambda x: x[0].name)))
truth_tab = []
for c in itertools.product((True, False), repeat=len(my_symbols)):
model = dict(zip(my_symbols, c))
truth_tab.append((model, model in sat_mods))
print(truth_tab)
输出:
# Set of symbols used: [A, B, C, D]
# [({A: True, B: True, C: True, D: True}, False),
# ({A: True, B: True, C: True, D: False}, False),
# ...
我有一个用于从布尔表达式创建真值表的库:https://github.com/salt-die/truth_tables。
用法示例:
>>> from truth_tables import TruthTable
>>> my_table = TruthTable('p or q', '~p -> q', 'T and ~T')
>>> print(my_table)
┌───┬───┬────────┬─────────┬──────────┐
│ p │ q │ p or q │ ~p -> q │ T and ~T │
├───┼───┼────────┼─────────┼──────────┤
│ F │ F │ F │ F │ F │
│ F │ T │ T │ T │ F │
│ T │ F │ T │ T │ F │
│ T │ T │ T │ T │ F │
└───┴───┴────────┴─────────┴──────────┘
>>> print(my_table.ast)
Or
├─Var('p')
╰─Var('q')
Implies
├─Negate
│ ╰─Var('p')
╰─Var('q')
And
├─Const(True)
╰─Negate
╰─Const(True)
我在Python工作,我想以真值表的形式操作数据。我需要简化表格、将表格转换为布尔表达式等...我发现 sympy
,但它似乎不提供对真值表的本机支持。我还找到了一些其他实用程序,例如 pyeda
,但在深入研究其中一个之前,我想知道是否有任何普遍接受的标准包可以满足我的需要。
有什么想法吗?提前致谢。
从布尔表达式生成真值 tables 并不难
sympy
.
在下面的程序中,布尔表达式用于生成 可满足的模型列表。使用生成器 所有可能的变量真值组合,它列出了完整的 真相table.
import itertools
from sympy import *
from sympy.logic import simplify_logic
from sympy.logic.inference import satisfiable
my_names = 'ABCD'
A,B,C,D = symbols(','.join(my_names))
e1 = Nor(Nor(A, B), Or(C, D))
my_symbols = sorted(e1.atoms(Symbol), key=lambda x: x.name)
print('Set of symbols used:', my_symbols)
models = satisfiable(e1, all_models=True)
sat_mods = []
for m in models:
sat_mods.append(dict(sorted(m.items(), key=lambda x: x[0].name)))
truth_tab = []
for c in itertools.product((True, False), repeat=len(my_symbols)):
model = dict(zip(my_symbols, c))
truth_tab.append((model, model in sat_mods))
print(truth_tab)
输出:
# Set of symbols used: [A, B, C, D]
# [({A: True, B: True, C: True, D: True}, False),
# ({A: True, B: True, C: True, D: False}, False),
# ...
我有一个用于从布尔表达式创建真值表的库:https://github.com/salt-die/truth_tables。
用法示例:
>>> from truth_tables import TruthTable
>>> my_table = TruthTable('p or q', '~p -> q', 'T and ~T')
>>> print(my_table)
┌───┬───┬────────┬─────────┬──────────┐
│ p │ q │ p or q │ ~p -> q │ T and ~T │
├───┼───┼────────┼─────────┼──────────┤
│ F │ F │ F │ F │ F │
│ F │ T │ T │ T │ F │
│ T │ F │ T │ T │ F │
│ T │ T │ T │ T │ F │
└───┴───┴────────┴─────────┴──────────┘
>>> print(my_table.ast)
Or
├─Var('p')
╰─Var('q')
Implies
├─Negate
│ ╰─Var('p')
╰─Var('q')
And
├─Const(True)
╰─Negate
╰─Const(True)