簡體   English   中英

python 中的真值表?

[英]Truth tables in python?

我在 Python 工作,我想以真值表的形式操作數據。 我需要簡化表格,將表格轉換為 boolean 表達式等……我發現了sympy ,但它似乎沒有為真值表提供本機支持。 我還找到了一些其他實用程序,例如pyeda ,但在深入研究其中一個之前,我想知道是否有任何普遍接受的標准 package 來做我需要的事情。

有任何想法嗎? 提前致謝。

使用sympy從 boolean 表達式生成真值表並不難。

在下面的程序中,boolean 表達式用於生成可滿足的模型列表。 對所有可能的可變真值組合使用生成器,它列出了完整的真值表。

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)

Output:

# 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),
# ...

我有一個庫,用於從 boolean 表達式創建真值表: 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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM