You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python将真值表转换为布尔表达式?

真值表转布尔表达式的Python实现

问题分析

你需要将真值表中结果为1的每一行转换为变量的合取式(用∧表示逻辑与),再将所有合取式用析取(∨表示逻辑或)连接,最终得到布尔表达式。比如示例中两行结果为1,对应生成(¬a ∧ b) ∨ (a ∧ ¬b)。

你之前的代码问题在于:直接全局替换0或1时,没有关联到对应的列名,无法区分不同变量的0/1,自然生成错误的表达式。

实现步骤

  1. 整理真值表的结构化数据:列名列表 + 各行的数值列表(明确结果列的位置)
  2. 遍历所有结果为1的行,对每个变量生成对应表达式:
    • 变量值为1:直接使用列名
    • 变量值为0:使用¬+列名
  3. 将每行的变量表达式用∧连接,包裹括号
  4. 把所有行的表达式用∨连接起来

代码示例

def truth_table_to_boolean_expr(columns, rows, result_col_idx=-1):
    # 存储所有结果为1的行对应的合取式
    conjunctions = []
    for row in rows:
        # 跳过结果为0的行
        if row[result_col_idx] != 1:
            continue
        # 生成当前行的合取项
        terms = []
        for col_name, val in zip(columns[:result_col_idx], row[:result_col_idx]):
            terms.append(f"¬{col_name}" if val == 0 else col_name)
        # 组合当前行的合取式并加括号
        conj = f"({' ∧ '.join(terms)})"
        conjunctions.append(conj)
    # 用析取连接所有合取式
    return ' ∨ '.join(conjunctions)

# 示例真值表数据
columns = ['a', 'b', 'a+b>0']
rows = [
    [0, 1, 1],
    [1, 0, 1]
]

# 生成并打印表达式
expr = truth_table_to_boolean_expr(columns, rows)
print(expr)  # 输出:(¬a ∧ b) ∨ (a ∧ ¬b)

代码说明

  • columns是真值表的列名列表,rows是每行的数值列表(用整数0/1表示)
  • result_col_idx指定结果列的索引,默认取最后一列
  • 代码会自动过滤结果为0的行,只处理需要生成合取式的行
  • 最终生成的表达式与示例期望输出完全匹配

内容的提问来源于stack exchange,提问作者Sena j

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 02:01:12