Python_真值表求解器(逻辑表达式的求解)(eval实现求解)【2022-01-22】

  • 1.TruthValueSolver.py
  • 2.结果示例
    • 2.1 含有非规定字符的输入
    • 2.2 &&、||不完整输入
    • 2.3 正确输入与结果

【注】实现了一个输入逻辑表达式,求解其真值表——真值表求解器
实现思路:
1.输入检查。
2.提取表达式中的不同变量,放入lvar列表中。
3.按照lvar中变量的个数,生成变量的真值组合,采用生成集合全部子集的手段实现。
4.将生成的真值组合每组替换相应的变量,在将该字符串放入eval函数中即可得到该组合下的逻辑值,最后形成结果列表,输出即可。

【1可输入逻辑符号】&&、||、!
【2可输入的逻辑变量】a–z(不能输入a、n、d、n、o、t、r)只能英文小写字符
【3可输入的运算优先级括号】只能是()
【4其他可输入字符】只有空格
除上述1234所指的字符,都是非法输入,且逻辑符号是一对的但是只输入了一个也视为错误输入!

【注】该功能之后会集成在MathToolsPaint中。

MathToolsPaint回顾:
Python_数学绘图工具MathToolsPaint[项目](动态组件与PaneWindow)(tkinter实现)

1.TruthValueSolver.py

s = input("输入一个逻辑表达式:")
#print("s = ",s)
ts = s#开始输入检查
no_yes = True
i = 0varset = ['b','c','e','f','g','h','i','j','k','l','m','p','q','s','u','v','w','x','y','z']while i < len(s):if (s[i] not in varset) and s[i] not in ['(',')',' ']:if s[i] not in ['&','|','!']:print("逻辑表达式[非规定字符]输入错误![发生错误位置]-->",i)no_yes = Falsebreakelse:if s[i+1] != s[i] and i + 1 < len(s) - 1 and s[i] != '!':print("逻辑表达式[运算符]输入错误![发生错误位置]-->",i)no_yesno_yes = Falsebreakelse:i = i + 2else:i = i + 1
print("检查结果-->",no_yes)
#完成输入检查if no_yes == True:#开始提取所有不同的变量符号,放入列表lvar中lvar = []for i in list(s):if (i >= 'a' and i <= 'z') and (i not in lvar):lvar.append(i)lvar_len = len(lvar)print("\n提取的变量lvar-->",lvar)#提取所有不同的变量符号完成#开始生成变量符号的真值组合,即生成含有lvar_len个元素集合的全部子集print("\n输出变量真值组合:")lt = []max = 2**lvar_lenfor i in range(0,max):tlt = list(bin(i))tlt.pop(0)tlt.pop(0)tlt_len = len(tlt)for j in range(0,lvar_len - tlt_len):tlt.insert(0,'0')print(tlt)lt.append(tlt)#print("lt = ",lt)#生成变量符号的真值组合完成#开始将生成的真值组合中的每一组,带入到相应的变量值,调用eval函数得到表达式真值#并添加到结果列表s_result,同时输出该表达式及其值print("\n输出变量真值组合的值:")s_result = []for i in lt:ts = sts = ts.replace('&&',' and ')  #将&&、||、!替换成python的逻辑运算符ts = ts.replace('||',' or ')ts = ts.replace('!',' not ')for j in range(0,lvar_len):#print(ts,lvar[j],i[j])ts = ts.replace(lvar[j],i[j]) #将每个变量的位置用对应的真值组合中的0或1代替s_result.append(int(eval(ts))) #使用eval函数计算print(ts,":-->",int(eval(ts)))#生成该逻辑表达式真值表完成#开始输出真值表k = 0print("\n\t\t<<<真值表>>>")for i in lvar:print(i,"\t",end='')print(s,"")for i in lt:for j in range(0,lvar_len):print(i[j],"\t",end='')print(s_result[k])k = k + 1#输出真值表完成

2.结果示例

2.1 含有非规定字符的输入

2.2 &&、||不完整输入

2.3 正确输入与结果

(q && p || q) && !w

m || (q && p || q) && !w

Python_真值表求解器(逻辑表达式的求解)(eval实现求解)【2022-01-22】相关推荐

  1. matlab求解器是什么,Matlab理解ode求解器

    我有一个链接微分方程组,我用ode23求解器求解 . 当达到某个阈值时,其中一个参数会改变,这会改变我的函数的斜率 . 我使用调试功能跟踪了ode的行为,并注意到它在这个点附近开始跳回"时间 ...

  2. 组合求解器 + 深度学习 =?这篇ICLR 2020论文告诉你答案

    2020-01-26 20:17:46 选自TowadsDataScience 作者:Marin Vlastelica Pogančić 机器之心编译 参与:郭元晨.魔王 如何将组合求解器无缝融入深度 ...

  3. matlab中solver函数_Simulink求解器(Solver)相关知识

    更多精彩内容参见专业MATLAB技术交流平台--MATLAB技术论坛http://www.matlabsky.com 1.变步长(Variable-Step)求解器 可以选择的变步长求解器有:ode4 ...

  4. matlab 读取图片后分区域编号_你的第一个有限元求解器——仅十行MATLAB代码

    有限元分析话题中有不少讨论有限元求解器的问题,但大都停留在概念层面,未见实际代码.望本文能略起抛砖引玉之作用. 以下代码是基于MATLAB编写. 问题描述 考虑一平面有界区域 ,设其边界为 .我们求解 ...

  5. 【工具笔记】Microsoft数学求解器Math Solver

    [工具笔记]Microsoft数学求解器Math Solver 工具笔记用于记录各种有用的工具,这里记录的是一个由Microsoft提供的数学求解器Math Solver. 可以用于求解代数,三角学, ...

  6. C++数独求解器与生成器

    前几天笔者外出培训,刚刚学习了深度优先搜索,突然想到了数独的求解其实也可以用深搜实现,遂写了数独求解器与生成器. 1 数独求解器 1.1 预备 一开始,当然是头文件~ #include <ios ...

  7. CST入门——求解器简介与时域、频域和积分求解器设置

    目录 1. 高频电磁仿真求解器简介 1.1. 时域求解器 Time Domain Solver(主) 1.2. 频域求解器 Frequency Domain Solver(主) 1.3. 本征模求解器 ...

  8. 市面上的数学规划求解器都有哪些?

    运筹学从形成到发展,在此过程中积累的大量理论和方法在国防.能源.制造.交通.金融.通信等各个领域发挥着越来越重要的作用.我们在生产生活中遇到的很多实际问题,都可以通过运筹学所涉及的优化方法对其进行数学 ...

  9. 【JY】No.7.1力学架构结构力学求解器(SM)使用教程

    软件讲解示例之理论(电算/手算)分析思路: 1.结构建模,并完成结构假定,如定义梁端弯矩释放(详见第二章). 2.线性屈曲分析(是否失稳破坏分析): 3.强度/挠度计算:(构件本身强度是否达标) 4. ...

  10. 求解器:助力智能决策的利器

    在工业化发展进程中,底层基础技术和软件的发展非常重要,这其中有一项技术被认为是运筹优化领域的"皇冠"--求解器. 求解器技术属于典型的底层技术领域,技术门槛高.研发难度大.投入时间 ...

最新文章

  1. 宇宙和你,本质上其实只是个八维数字?
  2. centos7二进制安装php,Centos7下编译安装配置Nginx+PHP+MySql环境
  3. c#window服务程序
  4. 取得NSDate实例各个字段的数字
  5. 严格模式 华为_华为千元机虽然好,但是千万别乱选,这三款才是内行人的最爱...
  6. LeetCode Algorithm 剑指 Offer 06. 从尾到头打印链表
  7. 软件测试白皮书-判定表法
  8. Extjs发票管理系统
  9. 微信开放平台Android应用的签名
  10. PHP的类中的常量,静态变量的问题。
  11. jtm 一键安装mysql_MySQL数据实时增量同步到Redis
  12. 消除if-else/switch语句块来聚合模型的设计与实现
  13. 深入理解linux网络pdf,深入理解Linux网络技术内幕 pdf epub mobi txt 下载
  14. C#控件的事件(鼠标单击等)没反应?
  15. SELECT list is not in GROUP BY clause and contains nonaggregated column 异常
  16. iOS-高德地图点击地图获取点击点对应的地理位置,并添加自定义的大头针
  17. 读论文 A search-classify approach for cluttered indoor scene understanding
  18. 中文真伟大!竟然有只能看,不能读的文章
  19. 关于const关键字
  20. 基于java的springboot多用户商城(类淘宝京东)系统毕业设计springboot开题报告

热门文章

  1. trados怎么导出html,[转载]关于Trados的组成和界面
  2. 基于SpringBoot、Layuimini、echarts的仓库管理系统(附源码)
  3. java ArrayList按照某个属性升序排序
  4. 卷积神经网络及YOLO算法 相关
  5. 大数据、云计算和人工智能的深度剖析与相互关系,值得入行者典藏
  6. Signature of method ‘XXXX.parse()‘ does not match signature of the base method in class ‘Spider‘
  7. 适用于arduino uno物联网学习套件智能家居系统scratch图形化编程
  8. Unity接IronSource聚合广告sdk 报错 65535
  9. 射频电路设计常见问题以及经验总结
  10. 大型B/S系统并发问题