首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python判断离散数学的合式公式

Python判断离散数学的合式公式

作者头像
Flaneur
发布于 2020-03-25 03:20:05
发布于 2020-03-25 03:20:05
1.9K00
代码可运行
举报
运行总次数:0
代码可运行

前言

        你没有听错,用python程序来解决离散数学的逻辑推理问题,我当我第一次听老师说的时候也很吃惊(再说上学期的Python学的也不咋地…..?),但经老师讲解后才知道,使用python解题不仅效率高,而且准确性也很强的,所以还是有必要学习以下的。

判断是否为合式公式

        第一个题目就是判断一个公式是否为合式公式,这也是最基础的,因为只有当在输入的合式公式正确的情况下,才能进一步的运算解题,所以先讲解一下怎么判断合式公式。         首先要知道什么是合式公式? (1)原子命题常项或变项是合式公式; (2)如果A是合式公式,则(-A)也是合式公式(- 表示非); (3)如果A,B是合式公式,则(AB)、(A+B)、(A < B)、( A ~ B)也是合式公式;(此处 合取 + 析取 < 代表条件 ~ 代表双条件) (4)只有有限次地应用(1)~(3)所包含的命题变元,联结词和括号的符号串才是合式公式。 个人思路: 输入字符串,扫描字符串,把所含的各关联词分区出来,在判断每个关联词使用是否正确 比如不合规则的情况: (1) 关联词所处位置不对 (2) 关联词的连续使用 (3) 括号不匹配 (4) …….. 程序中可能会有bug,希望大佬们多多指教

这道题应该有很多好的方法,但我不太会用,我这里只能暴力判断了。

废话不多说,直接上代码?
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import re
print("定义‘!’为否定联结词")
print("定义‘&’为合取联结词")
print("定义‘-’为析取联结词")
print("定义‘>’为蕴含联结词")
print("定义‘~’为等价联结词")
print("如果公式错误,会指出哪里错误;如果公式正确,则什么也不输出")
S =input("请输入需要判断的公式:")
T = list(S)
if S[0] in ['&','-',')','~','>'] :
    print("不是合式公式")
a ,b,c,d,f ="!" , "&" ,"-" , ">" , "~"
if a in T:
        Q = [m.start() for m in re.finditer(a, S)]
        for i in Q :
            if S[-1] == '!' :
                print ("‘!’联结词使用错误,不是合式公式")
                break
            if S[i+1] in ['&','!','-',')','~','>']:
                print("‘!’联结词使用错误,不是合式公式")
                break
            if S[i-1] in ['!']:
                print("‘!’联结词使用错误,不是合式公式!")
                break
if b in T:
        W = [m.start() for m in re.finditer(b, S)]
        for y in W :
            if S[-1] == '&' :
                print ("‘&’联结词使用错误,不是合式公式")
                break
            if S[y+1] in ['-',')','~','>','&'] :
                print("‘&’联结词使用错误,不是合式公式")
                break
            if S[y-1] in ['-','(','~','>','&'] :
                print("‘&’联结词使用错误,不是合式公式")
                break
if c in T:
        E = [m.start() for m in re.finditer(c, S)]
        for h in E :
            if S[-1] == '-' :
                print("‘-’联结词使用错误,不是合式公式")
                break
            if S[h+1] in (')','>','~','-') :
                print("‘-’联结词使用错误,不是合式公式")
                break
            if S[h-1] in ('&','-','>','~') :
                print("‘-’联结词使用错误,不是合式公式")
                break
if d in T:
        R = [m.start() for m in re.finditer(d, S)]
        for k in R :
            if S[-1] == '>' :
                print ("‘>’联结词使用错误,不是合式公式")
                break
            if S[k+1] in [')','>'] :
                print("‘>’联结词使用错误,不是合式公式")
                break
            if S[k-1] in  ['(','>'] :
                print("‘>’联结词使用错误,不是合式公式")
                break
if f in T:
        O = [m.start() for m in re.finditer(f, S)]
        for v in O :
            if S[-1] == '~' :
                print("‘~’联结词使用错误,不是合式公式")
                break
            if S[v+1] in [')','~'] :
                print("‘~’联结词使用错误,不是合式公式")
                break
            if S[v-1] in ['(','~'] :
                print("‘~’联结词使用错误,不是合式公式")
                break
if '(' or ')' in S :
        e = 0
        klb =[]
        for i in S :
            if i == '(':
                klb.append(i)
            if i == ')':
                if len(klb)==0:
                    e=1
                    break
                else :
                    klb.pop()
        if len(klb)!=0 :
            e = 1
        if e==1:
            print("括号使用错误,不是合式公式")

        我也是小白,程序哪里可能有些不足之处,请多多指教,如果你有更好的解题方法或思路,可以联系我,大家可以一起学习,一起进步的!?

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-03-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
离散数学与组合数学-数理逻辑-01命题与联结词
命题:我们对确定对象做出的陈述句称为命题(propositions and statements 命题或陈述)。当判断为真时,该命题为真,否则为假。
IT从业者张某某
2023/10/16
4170
离散数学与组合数学-数理逻辑-01命题与联结词
Python_正则表达式
re.compile():用于编译正则表达式,生成一个正则表达式对象,供 match() 和 search() 两个函数使用,一般建议使用这种编译方式
py3study
2020/01/19
6890
Python_正则表达式
命题逻辑详解
​ 只有确定了x是某类事物中的具体个体,或对x使用量词进行量化之后才能得到命题。(如:存在整数x,使 x是5的倍数)
From Zero
2021/03/13
2.5K0
离散数学中求合取范式&析取范式
大二上学期时写的代码,用C++实现的。 #include <iostream> #include <cstdlib> #include <string> #include <stack> #include <vector> #include<math.h> using namespace std; //&表示合取,|表示析取,!表示非,>表示条件,=表示双条件 class ForBase { private: static const int MAXN = 92; int numVar; //记录
SuperHeroes
2018/05/30
2.2K0
人工智能导论:第二章 逻辑与推理
“如果p那么q(p⟶q)”定义的是一种蕴涵关系(即充分条件),也就是命题q 包含着命题p ( p是q的子集)。p不成立相当于p是一个空集,空集可被其他所有集合所包含,因此当p不成立时,“如果p那么q”永远为真,真值表对于为 True。
Here_SDUT
2022/09/19
3.7K0
人工智能导论:第二章 逻辑与推理
【计算理论】计算复杂性 ( NP 完全问题 - 布尔可满足性问题 ★ | 布尔可满足性问题是 NP 完全问题证明思路 ) ★
布尔可满足性问题 ( Boolean Satisfiability Problem , SAT ) , 是历史已经找到了一个
韩曙亮
2023/03/28
1.1K0
【计算理论】计算复杂性 ( NP 完全问题 - 布尔可满足性问题 ★ | 布尔可满足性问题是 NP 完全问题证明思路 ) ★
命题逻辑基础
真值: 真,假 命题分类: 真命题、假命题、简单命题(原子命题)、复合命题 命题公式:
yhlin
2023/02/27
6810
离散数学-考纲版-01-命题逻辑
离散数学知识点总结(5):蕴含式;命题的推理理论;逻辑推演的方法;推理的有效性证明
IT从业者张某某
2023/10/16
6590
离散数学-考纲版-01-命题逻辑
Python 正则表达式大全(上)
正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。
Python知识大全
2020/02/13
8550
Latex数学公式符号编写大全
LaTeX是一种标记语言,主要用于创建高质量的学术文档,特别是数学、物理和计算机科学领域的文档。它基于TeX排版系统,由美国数学家Donald E. Knuth开发。在LaTeX中,你可以轻松地编写复杂的数学公式,并控制文档的布局和样式。
皮大大
2023/08/29
3.1K0
Python正则re模块学习笔记
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
没有故事的陈师傅
2019/07/28
7000
python的正则(二):一些高级用法
正则基础请阅读: python的正则(一):简单够用的basic版 以下部分不学也问题不大,不用焦虑。 特殊字符 (?aiLmsux) 等价于re.A, re.I, re.L, re.M, re.S,
ExASIC
2020/07/15
6500
Python:爬虫系列笔记(6) -- 正则化表达(推荐)
在前面我们已经搞定了怎样获取页面的内容,不过还差一步,这么多杂乱的代码夹杂文字我们怎样把它提取出来整理呢?下面就开始介绍一个十分强大的工具,正则表达式! 1.了解正则表达式 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。 正则表达式是用来匹配字符串非常强大的工具,在其他编程语言中同样有正则表达式的概念,Python同样不例外,利用了正则表达式,我们想要从返回的页面内容提取出我们想要的内容
昱良
2018/04/04
1.3K0
Python:爬虫系列笔记(6) -- 正则化表达(推荐)
python 学习笔记(9)——Python 正则表达式
正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。
my_sunshine
2020/10/15
7740
python/pandas 正则表达式 re模块
目录 正则解说 中文字符集 re模块常用方法 1、正则解说 数量词的贪婪模式与非贪婪模式   正则表达式通常用于在文本中查找匹配的字符串。Python里数量词默认是贪婪的(在少数语言里也可能是默认非贪
Echo_fy
2018/06/20
8.5K0
Python 学习之正则表达式
相信你此刻已经感受到了它的强大之处,接下来就让我们开始正则表达式的学习。先来介绍一下 re 模块。
用户4872888
2019/03/17
7260
python3--re模块:正则表达式
根据手机号码一共11位并且只以13,14,15,18开头的数字这些特点,写了一段代码如下:
py3study
2018/08/02
9110
【Python基础】05、Python文
文件系统是OS用于明确磁盘或分区上的文件的方法和数据结构——即在磁盘上组织文件的方法
py3study
2020/01/10
1.1K0
【Python基础】05、Python文
Python 正则表达式
正则表达式(RegularExpression, re) 是一个计算机科学的概念 用于使用单个字符串来描述,匹配符合某个规则的字符串 常常用来检索,替换某些模式的文本 正则的写法 .(点号): 表示任意一个字符,除了\n,比如查找所有的一个字符 . []: 匹配中括号中列举的任意字符,比如L,Y,0, LLY, Y0, LIU \d: 任意一个数字 \D: 除了数字都可以 \s: 表示空格,tab键 \S: 除了空白符号 \w: 单词字符,就是a-z, A-Z, 0-9, _ \W: 除了“\w”表示的都可
ruochen
2021/05/10
3430
Python 正则表达式
离散数学谓词逻辑答案_离散数学逻辑符号
在研究命题逻辑中,原子命题是命题演算中最基本的单位,不再对原子命题进行分解,这样会产生两大缺点:
全栈程序员站长
2022/09/20
1.8K0
离散数学谓词逻辑答案_离散数学逻辑符号
推荐阅读
相关推荐
离散数学与组合数学-数理逻辑-01命题与联结词
更多 >
LV.0
这个人很懒,什么都没有留下~
交个朋友
加入前端学习入门群
前端基础系统教学 经验分享避坑指南
加入腾讯云技术交流站
前端技术前沿探索 云开发实战案例分享
加入云开发企业交流群
企业云开发实战交流 探讨技术架构优化
换一批
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档