只有一个人说了真话!通解代码——python

发布时间 2023-04-10 11:52:14作者: 最冷不过冬夜

不管几个人说了这话,代码逻辑都是一样的,无非参数不同。

大老鼠发现家里的奶酪少了一大块,审问四只小老鼠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干的