用Python实现王教授是哪里人的推理(屈婉玲 离散数学P25 例2.6)

一:题目以及对应的分析:

在某次研讨会的中间休息时间,3名与会者根据王教授的口音对他是哪个省市的人判断如下:

甲:王教授不是苏州人,是上海人

乙:王教授不是上海人,是苏州人

丙:王教授既不是上海人,也不是杭州人

听完这三个人的判断后,王教授笑着说,你们三人中有一人说的全对,有一人说对了一半,另一个人说的全不对。试用逻辑演算分析王教授到底是哪里人。

 解:设命题p:王教授是苏州人

                   q:王教授是上海人

                    r:王教授是杭州人

二:代码实现

代码体现如下:其中“┐p”表示为not p,"∨"用or表示

ls = [0,1]
#p表示王教授是苏州人;q表示王教授是上海人;r表示王教授是杭州人
for p in ls:
    for q in ls:
        for r in ls:
            if (p==1 and q==0 and r==0) or (p==0 and q==1 and r==0) \
               or (p==0 and q==0 and r==1):#王教授只可以来自一个地方

                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("王教授是苏州人:{},王教授是上海人:{},王教授是杭州人:{}".format(p,q,r))

运行结果:

Python 3.10.0 (tags/v3.10.0:b494f59, Oct  4 2021, 18:46:30) [MSC v.1929 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license()" for more information.

= RESTART: C:\Users\ASUS\AppData\Local\Programs\Python\Python310-32\王教授是哪里人.py =
王教授是苏州人:0,王教授是上海人:1,王教授是杭州人:0

则根据运行结果可以得出:王教授是上海人

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值