注:Û就是等价号;代码水,有点取巧,别介意
在某次研讨会的中间休息时间,3名与会者根据王教授的口音对他是哪个省市的人判断如下:
甲:王教授不是苏州人,是上海人.
乙:王教授不是上海人,是苏州人.
丙:王教授既不是上海人,也不是杭州人.
听完这3人的判断后,王教授笑着说,你们3人中有一人说得全对,有一人说对了一半,另一人说得全不对,试用逻辑演算分析王教授到底是哪里人.
解 设命题:
p:王教授是苏州人.
g:王教授是上海人.
r:王教授是杭州人,
p, q, r中必有一个真命题,两个假命题,要通过逻辑演算将真命题找出来.
甲的判断为:¬p∧q
乙的判断为:p∧¬q
丙的判断为:¬q∧¬r
于是
甲的判断全对为 :B1=¬p∧q
甲的判断一半对为:B2=(¬p∧¬q)V(p∧q)
甲的判断全错为:B3=p∧¬q
乙的判断全对为:C1=p∧¬q
乙的判断一半对为:C2=(p∧q)V(¬p∧¬q)
乙的判断全错为 :C3=¬p∧q
丙的判断全对为:D1=¬q∧¬r
丙的判断一半对为:D2=(¬q∧r)V(q∧¬r)
丙的判断全错为 :D3=q∧r
由王教授所说:
E=(B1∧C2∧D3)V(B1∧C3∧D2)V(B2∧C1∧D3)V(B2∧C3∧D1)V(B3∧C1∧D2)V(B3∧C2∧D1)
为真命题,而
B1∧C2∧D3=(¬p ∧ q)∧((p ∧ q)V(¬p∧¬q))∧(q ∧ r)
Û (¬p ∧ q)∧((p ∧ q ∧ q ∧r)V(¬p∧¬q ∧ q ∧r))
Û(¬p ∧ q)∧((p ∧ q ∧ r)V0)
Û (¬p ∧ q)∧(p ∧ q ∧ r)
Û0
B1∧C3∧D2=(¬p ∧ q)∧(¬p ∧ q)∧((¬q ∧ r)V(q∧¬r))
Û (¬p ∧ q ∧¬q ∧r)V(¬p ∧ q ∧ q ∧ ¬r)
Û ¬p ∧ q∧¬r
B2∧C1∧D3=((¬p ∧¬q)V(p ∧ q))∧(p ∧ ¬q)∧(q ∧ r)
Û ((¬p ∧¬q)V(p ∧ q))∧(p∧¬q ∧ q ∧ r)
Û ((¬p ∧¬q)V(p ∧q))∧0
Û 0
类似可得
B2∧C3∧D1 Û 0
B3∧C1∧D2Û p∧¬q ∧ r
B3∧C2∧D1 Û 0
于是,由同一律可知
E Û (¬p ∧ q∧¬r)V(p∧¬q ∧ r)
但因为王教授不能既是苏州人,又是杭州人,因而p,r必有一个假命题,即p ∧ r Û 0.于
E Û ¬p ∧ q∧¬r
为真命题,因而必有p,r为假命题,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
if (q==1 and p==1 and r==1):
continue
#把三人的判断用命题表示
J=(not p) and q
Y=p and (not q)
B=(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("p=%d,q=%d,r=%d E=%d,J=%d,Y=%d,B=%d"%(p,q,r,E,J,Y,B))
if ((not p)==1 and q==0) or ((not p)==0 and q==1):
if Y==1:
print("其中乙全对,甲对一半的,丙全错。")
else:
print("其中丙全对,甲对一半的,乙全错。")
if (p==0 and (not q)==1)or (p==1 and (not q)==0):
if J==1:
print("其中甲全对,乙对一半,丙全错。")
else:
print("其中丙全对,乙对一半的,甲全错。")
if ((not q)==1 and(not r)==0)or((not q)==0 and(not r)==1):
if J==1:
print("其中甲全对,丙对一半,乙全错。")
else:
print("其中乙全对,丙对一半的,甲全错。")
if p==1:
print("王教授是苏州人")
if q==1:
print("王教授是上海人")
if r==1:
print("王教授是杭州人")