只有一个人说了真话!通解代码——python
不管几个人说了这话,代码逻辑都是一样的,无非参数不同。
例
大老鼠发现家里的奶酪少了一大块,审问四只小老鼠ABCD,其实只有一只老鼠偷吃了奶酪。
A说: 我没吃。
B说: 是C吃的。
C说: 肯定是D吃的。
D说: C在冤枉我。
己知四只小老鼠中有一只说的是真话,三只说的是假话。
到底是谁偷吃了奶酪。
### 如果题目变化只要修改这里就好了
# 列出证词,1代表做了,0代表没做
dic = {
"A": {("A", 0)},
"B": {("D", 1)},
"C": {("B", 1)},
"D": {("D", 0)},
}
true_num = 1 # 几个人说了真话
###
# 循环假设是谁做了
for do in dic.keys():
l = {(i, 1 if i == do else 0) for i in dic.keys()} # 列出全场情况
num = 0 # 记录真话的次数
true_list = []
# 用集合判断是否说了真话
# 证词 和 实际情况 取交集 等于 证词,代表说了真话
for dwho, ddo in dic.items(): # 依次判断
if (l & ddo) == ddo:
num += 1
true_list.append(dwho)
if num == true_num: # 判断是否正确
print(f"{'、'.join(true_list)}说了真话,{do}干的")
# ==> D说了真话,A干的