python的逻辑推理题,大家可以分享一下思路嘛

甲、乙、丙、丁四人的血型各不相同,甲说:“我是 A 型”。乙说:“我是0型”。丙说:“我是 AB 型”。丁说:“我不是 AB 型”。四个人中只有一个人的话是假的。真实情况如何?
大家可以分享一下思路嘛

假设法,假设甲说假话:结果就是B,O,AB,A
假设乙说假话:结果就是A,B,AB,O
假设丙说假话:无结果
假设丁说假话:无结果

血型一共有四种 A B O AB 用数字 1 2 3 4代表 和为1+2+3+4固定值是10
设真为1 假为0
其他的与排名次问题一样
写三层循环
最内层内部判断逻辑就是满足 四个逻辑值和为1 时跳出循环
用c语言写了可以参考下 如果没有+运算可以用三目运算符转

#include <stdio.h>
//甲、乙、丙、丁四人的血型各不相同,甲说:“我是 A 型”。乙说:“我是0型”。
//丙说:“我是 AB 型”。丁说:“我不是 AB 型”。
//四个人中只有一个人的话是假的。真实情况如何?
int main()
{
   int a,b,c,d;//甲乙丙丁四人   
   // 假设四种血型 A  B  O AB 对应为数字1,2,3,4 
   for(a=1;a<=4;a++)
   {
        for(b=1;b<=4;b++)
        {
            if(a!=b)
            {
                for(c=1;c<=4;c++)
                {
                    if(c!=b && c!=a)
                    {
                        d=10-a-b-c;
                        if(d!=a && d!=b && d!=c)
                        {
                        
                            if( (
                                ((a!=1)&&(b==3)&&(c==4)&&(d!=4))  +//若甲说谎 
                                   ((a==1)&&(b!=3)&&(c==4)&&(d!=4))  +  //若乙说谎 
                                   ((a==1)&&(b==3)&&(c!=4)&&(d!=4))  + //若丙说谎
                                   ((a==1)&&(b==3)&&(c==4)&&(d==4))  )==1 //若丁说谎    只有一人说谎所以四个表达式值加起来为1时能得到正确结果 
                               )
                            {
                                printf("甲:%d\n乙:%d\n丙:%d\n丁:%d\n",a,b,c,d);
                                printf("\n");
                            }
                        }
                    }
                }    
                
            }    
        }
   } 
    
}

img