在某次研讨会的中间休息时间,三名与会者根据王教授的口音对他是哪个省市的人判断如下:
甲:王教授不是苏州人,是上海人。
乙:王教授不是上海人,是苏州人。
丙:王教授既不是上海人,也不是杭州人。
听完这三人的判断后,王教授笑着说,你们三人中有一人说得全对,有一人说对了一半,另一人说得全不对,试用逻辑演算分析王教授到底是哪里人。
Python程序实现:
'''在某次研讨会的中间休息时间,三名与会者根据王教授的口音对他是哪个省市的人判断如下:
甲:王教授不是苏州人,是上海人。
乙:王教授不是上海人,是苏州人。
丙:王教授既不是上海人,也不是杭州人。
听完这三人的判断后,王教授笑着说,你们三人中有一人说得全对,有一人说对了一半,另一人说得全不对,试用逻辑演算分析王教授到底是哪里人。
'''
'''
设命题:
p:王教授是苏州人
q:王教授是上海人
r:王教授是杭州人
'''
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来表示
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:
if p == 1:
print('王教授是苏州人')
elif q == 1:
print('王教授是上海人')
else:
print('王教授是杭州人')
结果如下:
D:\lenrnpython\venv\Scripts\python.exe D:/lenrnpython/王教授是哪里人.py
王教授是上海人
Process finished with exit code 0