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

python+离散数学→逻辑演算

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

前言

        本篇探讨的是一道逻辑演算推理题。有两种方法,一种是常规的离散数学逻辑演算,另一种则是用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
代码运行次数:0
运行
AI代码解释
复制
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)

         #符合王教授所的Eif 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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
matrix3d()
用途 matrix3d 规定3D转换,使用 16 个值的 4×4 矩阵。 语法 matrix3d(a1, b1, c1, d1, a2, b2, c2, d2, a3, b3, c3, d3, a4, b4, c4, d4) 值 值 描述 a1、b1、c1、d1、a2、b2、c2、d2、a3、b3、c3、d3、d4 规定线性转换。 a4、b4、c4 规定适用的转换 例子 <div class="stage"></div> /* CSS */ .stage{ color:#fff;
Html5知典
2019/11/26
4820
【python】详解pandas库的pd.merge函数「建议收藏」
本篇详细说明merge的应用,join 和concatenate的拼接方法的与之相似。
全栈程序员站长
2022/08/11
2.1K0
这几道const和iota的面试题你能做对吗?
const 用于定义常量,定义之后不能修改,不能再次赋值,在程序运行期间不会改变。
王中阳Go
2022/10/26
2190
python数据分析之pandas超详细学习笔记
join参数的属性,如果为’inner’得到的是两表的交集,如果是outer,得到的是两表的并集。
远方的星
2021/07/31
1.6K0
python数据分析之pandas超详细学习笔记
解一道经典的腾讯算法面试题(小白也能看懂)
算法,对于一个程序员还是非常重要的,它不单单能体现你的数学思维,还能体现出一种逻辑能力,如果你要进BAT这样的大厂,请一定重视算法,它是你的必经之路。
帅地
2019/07/17
2.7K0
解一道经典的腾讯算法面试题(小白也能看懂)
我以为热图只能画数值型数据,万万没想到...
今天在群里看到一个非常漂亮的热图,我以为是什么奇怪的新R包画的,转了一圈发现原来还是大名鼎鼎的ComplexHeatmap丫。今天的代码都是在作者写的书基础上探索学习的,书在:https://jokergoo.github.io/ComplexHeatmap-reference/book/
科研菌
2021/02/19
1.9K0
我以为热图只能画数值型数据,万万没想到...
JVM性能
JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。
顾翔
2019/12/23
4600
JVM性能
Pandas高级教程之:Dataframe的合并
Pandas提供了很多合并Series和Dataframe的强大的功能,通过这些功能可以方便的进行数据分析。本文将会详细讲解如何使用Pandas来合并Series和Dataframe。
程序那些事
2021/06/14
5.5K0
SSE图像算法优化系列四:图像转置的SSE优化(支持8位、24位、32位),提速4-6倍
本文介绍了如何利用SSE/AVX指令集进行CPU并行加速,以解决图像转置中存在的内存访问瓶颈问题。首先介绍了图像转置的算法和实现过程,然后通过具体示例展示了如何使用SSE/AVX指令集进行CPU并行加速,最后给出了针对不同CPU架构的优化策略。
用户1138785
2018/01/03
2.1K0
pandas dataframe的合并(append, merge, concat)
创建2个DataFrame:>>>df1=pd.DataFrame(np.ones((4,4))*1,columns=list('DCBA'),inde
Java架构师必看
2021/12/24
3.1K0
Python Pandas merge 的使用
1. 通过key(一个)合并两个DataFrame ---- import pandas as pd # 通过key(一个)合并两个DataFrame left = pd.DataFrame({'key':['K0', 'K1', 'K2', 'K3'], 'A': ['A0', 'A1', 'A2', 'A3'], 'B': ['B0', 'B1', 'B2', 'B3']}) right = pd.DataFrame(
山海散人
2021/03/03
7520
全栈软件测试工程师宝典连载(12)
https://item.m.jd.com/product/10023427978355.html
顾翔
2021/02/02
5730
全栈软件测试工程师宝典连载(12)
c++开发面试问题(java面试app)
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/127604.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/25
1990
【说站】python merge()的连接
pandas提供了一个类似于关系数据库的连接(join)操作的方法merage,可以根据一个或多个键将不同DataFrame中的行连接起来。
很酷的站长
2022/11/23
7740
【前端词典】有趣的大厂算法面试题
昨天看到 TingRongGao 大佬发了关于一道算法题的一篇文章,觉得着实有趣,但不知为何我看到题后首先想到的是田忌赛马。今天我也试着解释下这题,当做是一个学习的过程。
小生方勤
2019/07/18
7260
【前端词典】有趣的大厂算法面试题
pandas之concat and merge
pandas 表横竖合concat,参考官方链接 竖合 # Merge, join, and concatenate import pandas as pd df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3', 'A4'], 'B': ['B0', 'B1', 'B2', 'B3', 'B4'], 'C': ['C0', 'C1', 'C2', 'C3', 'C4'],
用户1733462
2018/06/01
9880
【Python】详解pandas库中pd.merge函数与代码示例
在数据科学和分析领域,经常需要处理来自不同源的数据集,并将它们合并为一个统一的数据结构以进行进一步的分析。Pandas库中的pd.merge()函数提供了一种灵活的方式来合并两个或多个DataFrame,类似于SQL中的JOIN操作。本文将详细介绍pd.merge()函数的用法,并通过多个代码示例展示其在不同场景下的应用。
程序员洲洲
2024/06/13
1.7K0
【Python】详解pandas库中pd.merge函数与代码示例
????无了,人傻了
请听题: 有64匹🐴,一共8个赛道,需要多少次比赛可以知道当中最快的4匹🐴 最近偶然看帖子看到了这么一个算法问题,我因为一直都是在写业务,对算法这块也没有太研究过,知道的也就只有什么二分查找,二叉树,冒泡排序啥的,所以看到这个题的第一反应就是递归。。。。。。。好吧,我是真滴🥬 好在原文有配图,看起来不费力,我终于是理解到了原理,故我自己记录一下加深理解。 解题思路: 先把64匹🐴分成[A, B, C, D, E, F, G, H]8组,每组8匹 image.png 每组各跑一次,可以得到每组的第一名🐴
零式的天空
2022/03/28
2070
????无了,人傻了
2天学会Pandas
0.导语1.Series2.DataFrame2.1 DataFrame的简单运用3.pandas选择数据3.1 实战筛选3.2 筛选总结4.Pandas设置值4.1 创建数据4.2 根据位置设置loc和iloc4.3 根据条件设置4.4 按行或列设置4.5 添加Series序列(长度必须对齐)4.6 设定某行某列为特定值4.7 修改一整行数据5.Pandas处理丢失数据5.1 创建含NaN的矩阵5.2 删除掉有NaN的行或列5.3 替换NaN值为0或者其他5.4 是否有缺失数据NaN6.Pandas导入导出6.1 导入数据6.2 导出数据7.Pandas合并操作7.1 Pandas合并concat7.2.Pandas 合并 merge7.2.1 定义资料集并打印出7.2.2 依据key column合并,并打印7.2.3 两列合并7.2.4 Indicator设置合并列名称7.2.5 依据index合并7.2.6 解决overlapping的问题8.Pandas plot出图9.学习来源
公众号guangcity
2019/09/20
1.6K0
2天学会Pandas
Pandas 2.2 中文官方教程和指南(十三)
写时复制将成为 pandas 3.0 的默认设置。我们建议现在就启用它以从所有改进中受益。
ApacheCN_飞龙
2024/04/25
5630
相关推荐
matrix3d()
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验