命题公式的范式
程序: 输入一个命题公式, 输出合取/析取范式 主合取/析取范式

class Logic:
def __init__(self, expr):
# 合取 & 析取 | 非 ! 单条件 $ 双条件 @ 括号 ()
# 初始化类,设置表达式列表、符号列表、命题元素列表
self.expr_list = [i for i in expr if i != ' ']
self.symbol_list = ['&', '|', '!', '$', '@', '(', ')']
self.element_list = []
for s in self.expr_list:
if s.isalpha() and s not in self.element_list:
self.element_list.append(s)
else:
assert s in self.symbol_list or s.isalpha()
self.prn_list = self.get_prn() # 获取逆波兰表达式
print("PRN: ", self.prn_list)
self.truth_table = self.get_truth_table(self.prn_list, self.element_list) # 获取真值表
self.print_truth_table(self.element_list, self.truth_table) # 打印真值表
def get_prn(self):
# 获取逆波兰表达式
pass
def print_truth_table(self, element_list, truth_table):
# 打印真值表
pass
def get_truth_table(self, rpn_expr, element_list):
# 获取真值表
pass
def get_cnf(self):
# 主合取范式
pass
def get_dnf(self):
# 主析取范式
pass
if __name__ == '__main__':
expr = "(P & R)|(S & R)| !P"
logic = Logic(expr)
print("CNF: ", logic.get_cnf())
print("DNF: ", logic.get_dnf())
expr1 = "(p $ !q) $ r"
logic1 = Logic(expr1)
print("CNF: ", logic1.get_cnf())
print("DNF: ", logic1.get_dnf())
2168

被折叠的 条评论
为什么被折叠?



