使用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))# 添加到上面的列表中
使用一个递归函数输出真值表,用于对每个对象赋值并打印真值表
此处关于递归的算法,我借鉴了大佬的代码,在此声明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输出真值表相关推荐
- python输出结果空格分割_python 输出列表元素实例(以空格/逗号为分隔符)
给定list,如何以空格/逗号等符号以分隔符输出呢? 一般的,简单的for循环可以打印出list的内容: l=[1,2,3,4] for i in l: print(i) 输出结果一行一个元素: 1 ...
- python输出去空格_python输出怎么取消空格
python输出怎么取消空格?下面给大家介绍几种不同的方法: 1:strip()方法,去除字符串开头或者结尾的空格>>> a = " a b c " >&g ...
- python输出特别的矩阵
这里举例python输出一些特别的矩阵 1,输出如下6*2矩阵 code如下: A = mat(np.zeros([2*3,2])) #建6*2矩阵 for i in range(2*3) #遍历各个 ...
- python函数注释 参数 省略号_解决python 输出是省略号的问题
这个问题非常非常重要,搞了一晚上都没解决好,但是真的很简单很简单, 如果你也 是用的numpy array, 如果你也想得到输出矩阵的全部内容,而不是省略形式, [[ 0.10284943 0.095 ...
- python输出个人信息_Python如何输出警告信息
问题 你希望自己的程序能生成警告信息(比如废弃特性或使用问题). 解决方案 要输出一个警告消息,可使用 warning.warn()函数.例如: import warnings def func(x, ...
- python输出乘法口诀-python以不同方式打印输出九九乘法表
参考:http://www.cnblogs.com/suiy-160428/p/5594389.html python输出 9*9 乘法口诀表 矩形输出九九乘法表: for i in range(1, ...
- python输出乘法口诀-【每日一练】python输出 9*9 乘法口诀表
原标题:[每日一练]python输出 9*9 乘法口诀表 无论学哪种程序,哪一门语言都对输出9*9 乘法口诀表情有独钟,记得学VB的时候,需要好长一段代码才实现,那么你知道用Python输出,需要几行 ...
- Linux质数合数的脚本,python输出100以内的质数与合数实例代码
python输出100以内的质数与合数实例代码 具体代码如下所述: __author__ = 'Yue Qingxuan' # -*- coding: utf-8 -*- #求质数 p=[2] for ...
- Excel:python结合Excel使用技巧经验总结之(将python输出的等间隔列数据直接粘贴复制存到物理表格内等)图文教程之详细攻略
Excel:python结合Excel使用技巧经验总结之(将python输出的等间隔列数据直接粘贴复制存到物理表格内等)图文教程之详细攻略 目录 Excel使用技巧经验总结 将pandas.DataF ...
最新文章
- Runtime-消息发送和消息转发
- OSChina 周六乱弹 —— 这辈子最丢脸的事
- Quartus中常见错误·
- 关于eclipse 中文注释时中文字体太小的问题解决
- 从Gmail故障看SaaS的服务风险
- 实现、设置-Android TabWidget-by小雨
- PAT1070. 结绳
- python Image 安装
- MySQL server has gone away报错原因分析
- UBLOX配置/GPS配置设置/u-center使用
- js中定义变量时单引号和双引号的区别
- 百度 LBS 开放平台,开发人员众測计划正式启动
- ALTER PLUGGABLE DATABASE xxx CLOSE卡住
- J-Link RTT使用
- 论文写作课程内容总结
- CTF--告诉你个秘密
- ScriptManager的用法
- Unity3D制作LED滚动字幕(跑马灯)效果
- 国民技术N32G032 PWM+DMA 8路输出
- php企业网站带模块,DouPHP模块化企业网站管理v1.6系统含小程序/公众号源码