前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python判断离散数学的合式公式

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

作者头像
Flaneur
发布2020-03-25 11:20:05
1.8K0
发布2020-03-25 11:20:05
举报
文章被收录于专栏:Flaneur的文章分享

前言

        你没有听错,用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
复制
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 删除。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
    • 判断是否为合式公式
      • 这道题应该有很多好的方法,但我不太会用,我这里只能暴力判断了。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档