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)