前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python+离散数学→逻辑演算

python+离散数学→逻辑演算

作者头像
Flaneur
发布2020-03-25 11:19:40
2.8K0
发布2020-03-25 11:19:40
举报

前言

        本篇探讨的是一道逻辑演算推理题。有两种方法,一种是常规的离散数学逻辑演算,另一种则是用python程序来解决。本篇将探究两种方法: python+离散数学→逻辑演算。

问题         在某次研讨会的中间休息时间,3名与会者根据王教授的口音对他是哪个省市的人判断如下:                 甲:王教授不是苏州人,是上海人                 乙:王教授不是上海人,是苏州人                 丙:王教授既不是上海人,也不是杭州人         听完这3人的判断后,王教授笑着说,你们3人中有一人说得全对,有一人说对了一半,另一人全不对。试用逻辑演算分析王教授到底是哪里人.

常规推理

设命题    p:王教授是苏州人;                 q:王教授是上海人;                 r:王教授是杭州人;

用p,q,r表示甲乙丙的观点如下:

                        甲:¬p∧q

                        乙:p∧¬q

                        丙:¬q∧¬r

其中一人全对,一人对一半,另一人全错。

即其中一个真命题,两个假命题。先找真命题

                        甲全对:B1=¬p∧q

                        甲对一半:B2=(¬p∧¬q) ∨(p∧q)

                        甲全错:B3=p∧¬q

                        乙全对:C1= p∧¬q

                        乙对一半:C2=(¬p∧¬q) ∨(p∧q)

                        乙全错:C3=¬p∧q

                        丙全对:D1=¬q∧¬r

                        丙对一半:D2=(q∧¬r) ∨( ¬q∧r)

                        丙全错:D3=q∧r

有王教授那句话可以写:

                E=(B1∧C2∧D3)∨(B1∧C3∧D2) ∨(B2∧C1∧D3) ∨(B2∧C3∧D1) ∨(B3∧C1∧D2) ∨(B3∧C2∧D1)

是真命题

而B1∧C2∧D3⇔(¬p∧q) ∧((¬p∧¬q) ∨(p∧q)) ∧(q∧r)

                   ⇔(¬p∧q) ∧((¬p∧¬q) ∧(q∧r) ∨ (p∧q) ∧(q∧r))

                   ⇔(¬p∧q) ∧(0∨(p∧q∧r))

                   ⇔(¬p∧q)∧(p∧q∧r)

                   ⇔0

其他同理类似可得:

                        B1C3D2⇔¬p∧q∧¬r

                        B2C1D3⇔0

                        B2C3D1⇔0

                        B3C1D2⇔p∧¬q∧r

                        B3C2D1⇔0

所以E⇔(¬p∧q∧¬r) ∨(p∧¬q∧r)

而pqr中只能有一个是真的,所以p∧q⇔0,p∧r⇔0,q∧r⇔0

                        E⇔(¬p∧q∧¬r) ∨0

                          ⇔¬p∧q∧¬r

                          ⇔1

所以p为假,q为真,r为假,王教授是上海人。

python程序实现         以下是上述过程的代码实现,并附有代码详解,有兴趣的小伙伴可以看一看。

代码语言:javascript
复制
for p in range(2):                                  #p:王教授是苏州人
    for q in range(2):                              #q:王教授是上海人
        for r in range(2):                          #r:王教授是杭州人
         #以下三行表示p,q,r不可能同时为真的情况
         if (p == 1 and q == 1): continue
         if (p == 1 and r == 1): continue
         if (q == 1 and r == 1): continue
         
         Jia = (not p) and q                        #甲的判断
         Yi = p and (not q)                         #乙的判断
         Bing = (not q) and (not r)                 #丙的判断
       
         B1 = (not p) and q                         #甲的判断全对
         B2 = ((not p) and (not q))or (p and q)     #甲的判断一半对
         B3 = p and (not q)                         #甲的判断全错
         
         C1 = p and (not q)                         #乙的判断全对
         C2 = (p and q) or ((not p) and (not q))    #乙的判断一半对
         C3 = (not p) and q                         #乙的判断全错
         
         D1 = (not q) and (not r)                   #丙的判断全对
         D2 = ((not q) and r) or (q and(not r))     #丙的判断一半对
         D3 = q and r                               #丙的判断全错

         #王教授所说的话
         E = (B1 and C2 and D3) \
           or(B1 and C3 and D2) \
           or(B2 and C1 and D3) \
           or(B2 and C3 and D1) \
           or(B3 and C1 and D2) \
           or(B3 and C2 and D1)

         #符合王教授所的E值
         if E==1 :
           print("%d,%d,%d E=%d,Jia=%d,Yi=%d,Bing=%d"%(p,q,r,E,Jia,Yi,Bing))

总结         其实用python解决离散数学的逻辑推理题比直接推理效率更高而且准确性也高,并且在遇到复杂的逻辑推理时,很容易把自己绕晕,半天也解不出来,倒不如我们可以让计算机帮我们解决,只需写几十行代码,就可以罗列出复杂的关系,何乐而不为呢,所以我们可以多学学这种解题方法!?

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
相关产品与服务
图像处理
图像处理基于腾讯云深度学习等人工智能技术,提供综合性的图像优化处理服务,包括图像质量评估、图像清晰度增强、图像智能裁剪等。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档