现有张三、李四和王五三个人,张三说李四在说谎,李四说王五在说谎,而王五说张三和李四两人都在说谎。
现在问题来了,编程求出这三个人中到底谁说的是真话,谁说的是假话。
张三、李四和王五三个人都可能说真话,也都可能说假话,那么如何来判断他们到底谁在说谎呢?
可以推导出下面三个结论:
01.由于“张三说李四在说谎”,因此,如果张三说的是真话,则李四就在说谎;反之,如果张三在说谎,则李四说的就是真话。
02.由于“李四说王五在说谎”,因此,如果李四说的是真话,则王五就在说谎;反之,如果李四在说谎,则王五说的就是真话。
03.由于“王五说张三和李四两人都在说谎”,因此,如果王五说的是真话,则张三和李四两人就都在说谎;反之,如果王五在说谎,则张三和李四两人至少一人说的是真话。
那用程序穷举,找出符合条件的推理结论就可以了。
下面直接上代码:
########################
if __name__ == "__main__":
# x、y和z分别表示张三、李四和王五三人说话真假的情况
# 当x、y或z的值为1时表示该人说的是真话,值为0时表示该人说的是假话
# 使用三重循环穷举所有情况
for x in range(2):
for y in range(2):
for z in range(2):
if (x and (not y) or (not x) and y) and (y and (not z) or (not y) and z) \
and (z and x ==0 and y==0 or (not z) and x+y != 0):
a = '真' if x == 1 else '假'
b = '真' if y == 1 else '假'
c = '真' if z == 1 else '假'
print("张三说的是" + a + "话")
print("李四说的是" + b + "话")
print("王五说的是" + c + "话")
########################
执行结果如下:
张三说的是假话
李四说的是真话
王五说的是假话
________________END______________
网友评论