Python解决钻石小偷问题

题目如下:

A:我没有偷钻石。

B:D就是罪犯。

C:B是盗窃这块钻石的罪犯。

D:B有意诬陷我。

假定只有一个人说的是真话,编程序判断谁偷走了钻石。

答案是:说真话的是D,罪犯是A,逻辑思路可以百度一下,下面只讲一下如何用Python实现对题目的解答

分析思路:

首先,A、B、C、D四个人都是嫌疑犯,我们把这四种可能存放到一个列表result_list = ["A", "B", "C", "D"],

然后分别去遍历这四种情况,由题目可以知道4个人中只有一个人说的是真话,所以我将四个人说的话用代码表示出来:

 

A:我没有偷钻石。

理解为:罪犯不是A

代码表示:result_list[x]!="A"

 

B:D就是罪犯。

理解为:罪犯是D

代码表示:result_list[x]=="D"

 

C:B是盗窃这块钻石的罪犯。

理解为:罪犯是B

代码表示:result_list[x]=="B"

 

D:B有意诬陷我。

理解为:B说的是错的,罪犯不是D

代码表示:result_list[x]!="D"

 

 

完整代码如下:

# -*- coding: utf-8 -*-


def find(result_list, true_man):
    for x in range(len(result_list)): #遍历所有情况
        if ( (result_list[x]!="A") + (result_list[x]=="D") + (result_list[x]=="B") +(result_list[x]!="D") == true_man ):
            print("罪犯是:%s" %result_list[x])




true_man = 1 #说真话的人数
result_list = ["A", "B", "C", "D"] #罪犯是谁的4种情况
find(result_list, true_man)
 

 

posted @ 2018-12-28 02:51  我好高冷  阅读(357)  评论(0编辑  收藏  举报