题目描述:在某次研讨会中间休息时间, 3名与会者根据王教授的口音对他是哪个省市的人判断如下:
甲: 王教授不是苏州人, 是上海人
乙: 王教授不是上海人, 是苏州人
丙: 王教授既不是上海人, 也不是杭州人
听完这三个人的判断后, 王教授笑着说, 你们3人中有一人说的全对, 有一人说对了一半, 另一人说得全不对, 试用逻辑演算分析王教授到底是哪里人.
代码如下:
#王教授是哪里人 p:王教授是苏州人 q:王教授是上海人 r:王教授是杭州人 0表示不是 1表示是
for p in range(0,2):
for q in range(0,2):
for r in range(0,2):
B1 = (p == 0 and q == 1) #甲全对
B2 = ((p == 0 and q == 0) or (p == 1 and q == 1)) #甲对一半
B3 = (p == 1 and q == 0) #甲全错
C1 = (p == 1 and q == 0) #乙全对
C2 = ((p == 1 and q == 1) or (p == 0 and q == 0)) #乙对一半
C3 = (p == 0 and q == 1) #乙全错
D1 = (q == 0 and r == 0) #丙全对
D2 = ((q== 0 and r == 1) or (q == 1 and r == 0)) #丙对一半
D3 = (q == 1 and r == 1) #丙全错
if ((B1 and C2 and D3 == True) or (B1 and C3 and D2 == True) or (B2 and C1 and D3 == True) or \
(B2 and C3 and D1 == True) or (B3 and C1 and D2 == True) or B3 and C2 and D1 == True):
print("p:{} q:{} r:{}".format(p,q,r))
运行如下:
p:0 q:1 r:0
p:1 q:0 r:1
因为王教授不能同时为苏州人或杭州人, 故第二种情况排除, 所以甲说得全对, 丙说对了一半, 乙说得全错, 王教授是上海人