日更成长营自学编程Python

自学Python:找出谁在说谎

2022-01-08  本文已影响0人  小强聊成长

现有张三、李四和王五三个人,张三说李四在说谎,李四说王五在说谎,而王五说张三和李四两人都在说谎。

现在问题来了,编程求出这三个人中到底谁说的是真话,谁说的是假话。

张三、李四和王五三个人都可能说真话,也都可能说假话,那么如何来判断他们到底谁在说谎呢?

可以推导出下面三个结论:

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______________

上一篇 下一篇

猜你喜欢

热点阅读