离散数学——命题逻辑代码实现

用代码(Python)实现离散数学中有关命题逻辑的习题

例1:张三说李四在说谎,李四说王五在说谎,王五说张三和李四都在说谎

         已知三个人中只有一个人说了真话,那么是谁说了真话?

​
# ls = [0,1]
# for z in ls:
#     for li in ls:
#         for w in ls:
#             s1=(li==1)
#             s2=(w==1)
#             s3=(z+li==2)
#             if(s1+s2+s3==2 and z+li+w==1)\k
#                 or(s1+s2+s3==1 and z+li+w==2)\
#                 or(s1+s2+s3==0 and z+li+w==3):
#                 print("z:{} li:{} w:{}".format(z,li,w))

# 张三说李四在说谎,李四说王五在说谎,王五说张三和李四都在说谎
# 三个人中只有一个人说了真话
# p:张三说了真话
# q:李四说了真话
# r:王五说了真话
# A:not q
# B:not r
# C:(not p) and (not q)

for p in range(2):
    for q in range(2):
        for r in range(2):
            #排除两个人同时说真话的情况
            if (p==1 and q==1): continue
            if (p==1 and r==1): continue
            if (q==1 and r==1): continue

            #将所说三句话表示为A,B,C三个命题
            A = not q
            B = not r
            C = (not p) and (not q)
            
            #用E表示题目,且E为真命题
            E = ((not A) and (not B) and C) \
                 or ((not A) and B and (not C)) \
                 or (A and (not B) and (not C))

            if E == 1:
                print("%d,%d,%d"%(p,q,r))

​

例2:在某次研讨会的中间休息时间,3名与会者根据王教授的口音对他是哪个省市的人判断如下:
         甲:王教授不是苏州人,是上海人
         乙:王教授不是上海人,是苏州人
         丙;王教授既不是上海人,也不是杭州人
         王教授说甲乙丙三人中,有一人说得全对,有一人说对了一半,另一人说得全不对

#在某次研讨会的中间休息时间,3名与会者根据王教授的口音对他是哪个省市的人判断如下:
#甲:王教授不是苏州人,是上海人
#乙:王教授不是上海人,是苏州人
#丙;王教授既不是上海人,也不是杭州人
#王教授说甲乙丙三人中,有一人说得全对,有一人说对了一半,另一人说得全不对
for p in range(2):
    for q in range(2):
        for r in range(2):
            # 以下三行表示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)

            if E==1:
                print("%d,%d,%d E=%d,Jia=%d,Yi=%d,Bing=%d"%(p,q,r,E,Jia,Yi,Bing))

例3: 在某班班委成员的选举中,已知王小红、李强、丁金生三位同学被选进了班委会。该班的甲、乙、丙三名同学预言如下:
          甲说:王小红为班长,李强为生活委员
          乙说:丁金生为班长,王小红为生活委员
          丙说:李强为班长,王小红为学习委员
         班委会公布名单后发现:甲乙丙三人都恰好猜对了一半。问:王小红、李强、丁金生各任何值

# 在某班班委成员的选举中,已知王小红、李强、丁金生三位同学被选进了班委会。该班的甲、乙、丙三名同学预言如下:
# 甲说:王小红为班长,李强为生活委员
# 乙说:丁金生为班长,王小红为生活委员
# 丙说:李强为班长,王小红为学习委员
# 班委会公布名单后发现:甲乙丙三人都恰好猜对了一半。问:王小红、李强、丁金生各任何值
# 设命题:
# a:王小红为班长
# b:李强为生活委员
# c:丁金生为班长
# d:王小红为生活委员
# e:李强为班长
# f:王小红为学习委员

for a in range(2):
    for b in range(2):
        for c in range(2):
            for d in range(2):
                for e in range(2):
                    for f in range(2):
                        if (a == 1 and c == 1): continue
                        if (a == 1 and d == 1): continue
                        if (a == 1 and f == 1): continue
                        if (b == 1 and d == 1): continue
                        if (b == 1 and e == 1): continue

                        Jiang = a and b
                        Yi = c and d
                        Bing = e and f

                        Q = ((not a) and b) or (a and (not b)) #甲猜对了一半
                        R = ((not c) and d) or (c and (not d)) #乙猜对了一半
                        S = ((not e) and f) or (e and (not f)) #丙猜对了一半

                        E = Q and R and S

                        if E ==1:
                            print("%d,%d,%d,%d,%d,%d"%(a,b,c,d,e,f))

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
离散数学命题逻辑是一种研究命题之间关系的数学分支。命题逻辑主要涉及命题的定义、联结词(如非、与、或、蕴含、等价、异或)的运算规则及其真值表、命题的语义等。等价是命题逻辑中重要的概念之一。 当两个命题具有相同的真值时,它们被称为等价命题。例如,命题P与Q分别是“今天是周日”和“明天是周一”,那么这两个命题的真值相同时,即今天是周日的时候明天是周一,它们可以称为等价命题。 在离散数学中,我们可以使用真值表来判断两个命题是否等价。真值表是将所有可能的命题取值列出,并对每个命题的取值进行判断的表格。通过比较真值表中相应的列的取值,可以判断两个命题是否等价。 例如,在真值表的第三列中,如果两个命题的取值均为真(T),那么这两个命题等价。如果两个命题的取值均为假(F),也可以认为这两个命题等价。但如果它们的取值一个为真一个为假,那么它们不等价。 以命题P:“今天天气晴朗”和命题Q:“太阳照耀着”为例,它们的等价关系可以通过真值表进行判断。在真值表中,当天气晴朗时太阳照耀着,因此P和Q的真值列完全相同,即它们是等价的。 综上所述,离散数学中的命题逻辑通过真值表等方法来判断命题的等价关系。等价命题数学和计算机科学中有着广泛的应用,可以帮助我们简化、判断、推导命题逻辑关系。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值