自学Python:找出谁在说谎

作者: 小强聊成长 | 来源:发表于2022-01-08 08:07 被阅读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______________

    相关文章

      网友评论

        本文标题:自学Python:找出谁在说谎

        本文链接:https://www.haomeiwen.com/subject/rdypqrtx.html