首先创建一个类,利用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))# 添加到上面的列表中

使用一个递归函数输出真值表,用于对每个对象赋值并打印真值表

此处关于递归的算法,我借鉴了大佬的代码,在此声明https://blog.csdn.net/Kprogram/article/details/83686154

def give_value(i):global formulaif i == len(variables):for v in variables:print(v.value, end="  ")print(eval(formula))returnvariables[i].value = 0# 先赋值为0give_value(i+1)# 递归调用自己variables[i].value = 1# 后赋值为1give_value(i+1)# 递归调用自己

先输出真值表的第一行

for v in variables:print(v, end="  ")
print(formula)

显示真值表里面的内容

give_value(0)

效果截图

有很多小伙伴的离散数学可能会需要做实验,一般要求是使用c语言或者是matlab,而我们的老师说python也是可以接受的,但是不能使用人家已经写好的模块,而对输入的公式(一个字符串)进行解析又是一件十分复杂的事情,还需要对括号进行匹配等,我个人不喜欢那么复杂,所以我用了eval()函数,直接把字符串两端的引号给去掉,从而执行里面的内容,所以我的代码:

首先解析输入的字符串,使用集合工具去掉相同的变量,再转换成列表;

根据列表里面的字符使用exec()函数直接生成对应的变量,从而每个变量的内容就是字符本身;

把得到的每一个Variable对象都添加到一个列表中便于管理;

使用递归对列表里面的每一个对象的value属性进行赋值,同时输出真值表。

使用python输出真值表相关推荐

  1. python输出结果空格分割_python 输出列表元素实例(以空格/逗号为分隔符)

    给定list,如何以空格/逗号等符号以分隔符输出呢? 一般的,简单的for循环可以打印出list的内容: l=[1,2,3,4] for i in l: print(i) 输出结果一行一个元素: 1 ...

  2. python输出去空格_python输出怎么取消空格

    python输出怎么取消空格?下面给大家介绍几种不同的方法: 1:strip()方法,去除字符串开头或者结尾的空格>>> a = " a b c " >&g ...

  3. python输出特别的矩阵

    这里举例python输出一些特别的矩阵 1,输出如下6*2矩阵 code如下: A = mat(np.zeros([2*3,2])) #建6*2矩阵 for i in range(2*3) #遍历各个 ...

  4. python函数注释 参数 省略号_解决python 输出是省略号的问题

    这个问题非常非常重要,搞了一晚上都没解决好,但是真的很简单很简单, 如果你也 是用的numpy array, 如果你也想得到输出矩阵的全部内容,而不是省略形式, [[ 0.10284943 0.095 ...

  5. python输出个人信息_Python如何输出警告信息

    问题 你希望自己的程序能生成警告信息(比如废弃特性或使用问题). 解决方案 要输出一个警告消息,可使用 warning.warn()函数.例如: import warnings def func(x, ...

  6. python输出乘法口诀-python以不同方式打印输出九九乘法表

    参考:http://www.cnblogs.com/suiy-160428/p/5594389.html python输出 9*9 乘法口诀表 矩形输出九九乘法表: for i in range(1, ...

  7. python输出乘法口诀-【每日一练】python输出 9*9 乘法口诀表

    原标题:[每日一练]python输出 9*9 乘法口诀表 无论学哪种程序,哪一门语言都对输出9*9 乘法口诀表情有独钟,记得学VB的时候,需要好长一段代码才实现,那么你知道用Python输出,需要几行 ...

  8. Linux质数合数的脚本,python输出100以内的质数与合数实例代码

    python输出100以内的质数与合数实例代码 具体代码如下所述: __author__ = 'Yue Qingxuan' # -*- coding: utf-8 -*- #求质数 p=[2] for ...

  9. Excel:python结合Excel使用技巧经验总结之(将python输出的等间隔列数据直接粘贴复制存到物理表格内等)图文教程之详细攻略

    Excel:python结合Excel使用技巧经验总结之(将python输出的等间隔列数据直接粘贴复制存到物理表格内等)图文教程之详细攻略 目录 Excel使用技巧经验总结 将pandas.DataF ...

最新文章

  1. Runtime-消息发送和消息转发
  2. OSChina 周六乱弹 —— 这辈子最丢脸的事
  3. Quartus中常见错误·
  4. 关于eclipse 中文注释时中文字体太小的问题解决
  5. 从Gmail故障看SaaS的服务风险
  6. 实现、设置-Android TabWidget-by小雨
  7. PAT1070. 结绳
  8. python Image 安装
  9. MySQL server has gone away报错原因分析
  10. UBLOX配置/GPS配置设置/u-center使用
  11. js中定义变量时单引号和双引号的区别
  12. 百度 LBS 开放平台,开发人员众測计划正式启动
  13. ALTER PLUGGABLE DATABASE xxx CLOSE卡住
  14. J-Link RTT使用
  15. 论文写作课程内容总结
  16. CTF--告诉你个秘密
  17. ScriptManager的用法
  18. Unity3D制作LED滚动字幕(跑马灯)效果
  19. 国民技术N32G032 PWM+DMA 8路输出
  20. php企业网站带模块,DouPHP模块化企业网站管理v1.6系统含小程序/公众号源码

热门文章

  1. 接口测试 - 构造伪数据/测试数据(Faker)
  2. 题目:我立志成为一名好销售,万万没想到,我还是走了程序员的路,原因竟然是....
  3. centos查看进程及结束掉
  4. 多线程为什么会出现安全问题
  5. SVM(支持向量机)(一)基本形式推导
  6. 数据库--02--数据模型--层次模型.网状模型.关系模型
  7. TCP协议及三次握手的过程
  8. linux 打包zip
  9. 如何在Windows下统计代码行数
  10. Python综合评价模型(二)灰色关联度法