如何用Python将真值表转换为布尔表达式?
真值表转布尔表达式的Python实现
问题分析
你需要将真值表中结果为1的每一行转换为变量的合取式(用∧表示逻辑与),再将所有合取式用析取(∨表示逻辑或)连接,最终得到布尔表达式。比如示例中两行结果为1,对应生成(¬a ∧ b) ∨ (a ∧ ¬b)。
你之前的代码问题在于:直接全局替换0或1时,没有关联到对应的列名,无法区分不同变量的0/1,自然生成错误的表达式。
实现步骤
- 整理真值表的结构化数据:列名列表 + 各行的数值列表(明确结果列的位置)
- 遍历所有结果为1的行,对每个变量生成对应表达式:
- 变量值为
1:直接使用列名 - 变量值为
0:使用¬+列名
- 变量值为
- 将每行的变量表达式用
∧连接,包裹括号 - 把所有行的表达式用
∨连接起来
代码示例
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
相关产品推荐
相关产品推荐

