使⽤python输出真值表⾸先创建⼀个类,利⽤python⾃⾝的优势对表达式进⾏解析
# &为合取,v为析取,~为⾮,>为条件联结词,*为双条件联结词
class Variable:
def __init__(self, value=0):
self.value = value
# 返回两个对象的合取
def __and__(self, other):# 对 & 运算符的定义
return Variable(1) if (self.value==1 and other.value==1) else Variable(0)
def __or__(self, other):# 对 | 运算符的定义
return Variable(0) if self.value==other.value==0 else Variable(1)
# 对象的条件连接
def __gt__(self, other):# 对 > 运算符的定义
return Variable(0) if (self.value==1 and other.value==0) else Variable(1)
# 对象的取反
def __invert__(self):# 对 ~ 运算符的定义
return Variable(1) if self.value==0 else Variable(0)
# 对象的双条件连接
def __mul__(self, other):# 对 * 运算符的定义
return Variable(1) if self.value==other.value else Variable(0)
def __str__(self):# 对打印显⽰的重载
return str(self.value)
然后我们输⼊⼀个字符串
formula = input("输⼊你的公式:")
# 所有的变量字符组成的列表,使⽤集合去掉了重复的变量字符
var_chars = list(set(formula).difference(set("()&|>*~")))
variables = []# ⽤来存储所有的Variable对象
for v in var_chars:
# 对于每⼀个解析得到的变量字符为变量名⽣成⼀个Variable对象
exec(v+'=Variable(0)')
variables.append(eval(v))# 添加到上⾯的列表中
使⽤⼀个递归函数输出真值表,⽤于对每个对象赋值并打印真值表
def give_value(i):
global formula
if i == len(variables):
for v in variables:
print(v.value, end="  ")
print(eval(formula))
return
variables[i].value = 0# 先赋值为0
give_value(i+1)# 递归调⽤⾃⼰
variables[i].value = 1# 后赋值为1
give_value(i+1)# 递归调⽤⾃⼰
先输出真值表的第⼀⾏
for v in variables:
print(v, end="  ")
print(formula)
显⽰真值表⾥⾯的内容
give_value(0)
效果截图
eval是做什么的有很多⼩伙伴的离散数学可能会需要做实验,⼀般要求是使⽤c语⾔或者是matlab,⽽我们的⽼师说python也是可以接受的,但是不能使⽤⼈家已经写好的模块,⽽对输⼊的公式(⼀个字符串)进⾏解析⼜是⼀件⼗分复杂的事情,还需要对括号进⾏匹配等,我个⼈不喜欢那么复杂,所以我⽤了eval()函数,直接把字符串两端的引号给去掉,从⽽执⾏⾥⾯的内容,所以我的代码:
⾸先解析输⼊的字符串,使⽤集合⼯具去掉相同的变量,再转换成列表;
根据列表⾥⾯的字符使⽤exec()函数直接⽣成对应的变量,从⽽每个变量的内容就是字符本⾝;
把得到的每⼀个Variable对象都添加到⼀个列表中便于管理;
使⽤递归对列表⾥⾯的每⼀个对象的value属性进⾏赋值,同时输出真值表。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。