1.作业要求
2.题目选择
命题公式的真值表
用户输入一个命题公式,输出该公式对应的真值表。
例如:输入(p ∨ q) → ¬r,输出:
题目描述
关于为什么选择了这个题目,最后会提到 。
3.所需解决的关键问题
4.代码
使用Python完成
注释已经给出。
import itertools
from tabulate import tabulate # 导入 tabulate 用于美化表格格式
# 处理蕴含操作的函数
def handle_implications(expression):
# 在蕴含符号 '→' 上分割表达式
parts = expression.split('→')
# 用正确的逻辑重新组合表达式,将 "A → B" 转换为 "not A or B"
new_expression = ' or '.join(['(not (' + part.strip() + '))' if i < len(parts) - 1 else part.strip() for i, part in enumerate(parts)])
return new_expression
# 生成真值表的函数
def generate_truth_table(expression):
# 从表达式中识别独特的变量
variables = set(filter(str.isalpha, expression))
variables = sorted(variables) # 排序以确保一致的顺序
# 将逻辑符号替换为 Python 的等价符号
expression = expression.replace('∧', ' and ').replace('∨', ' or ').replace('¬', ' not ')
# 使用处理蕴含操作的函数
expression = handle_implications(expression)
# 为变量生成所有可能的真值组合
truth_values = list(itertools.product([False, True], repeat=len(variables)))
# 对于每种组合,计算并存储结果
truth_table = []
for values in truth_values:
# 创建一个字典,将变量名映射到其真值
env = dict(zip(variables, values))
# 在这个环境中计算表达式的结果
result = eval(expression, {}, env)
truth_table.append((values, result))
return variables, truth_table
# 主程序入