Python编程判断谁是小偷

谁是小偷

‎小区发生盗窃案,有四个人嫌疑最大,警察找来讯问。‌

‎A说:不是我。‌

‎B说:是C。‌

‎C说:是D。‌

‎D说:他冤枉人。‌

‎四人中有一人说了假话,编程分析谁是小偷。

        此题主要考察抽象概括能力、逻辑思维能力和数据处理能力,将题目总结概括为数学问题是抽象概括能力,将数学问题剖析分解为运算公式为逻辑思维能力,将运算公式变换为Python程序为数据处理能力。

        乍一看题目觉得高深莫测,但把题目分析拆解后会有一种“山重水复疑无路,柳暗花明又一村”的感觉。首先,根据题目描述分析可得:1)四人中有一人说了假话,说明A、B、C、D说的话中只有一人说的是假话,其他都是真话,三人的真话之间不能产生矛盾;2)有四个嫌疑人,只有一个小偷,说假话的一定是小偷。这是抽象概括能力。

        四人中三人说的是真话,一人说的是假话,那么他们四个人的话加起来应该是:真+真+真+假,转换为逻辑语言就是True+True+True+False,也相当于1+1+1+0=3,此可作为判断谁是小偷的条件。接下来就是将四个人的话转换为对应的逻辑表达式。‎“A说:不是我”的意思是:“A说A不是小偷”,也就是“小偷不是A”,如果小偷是thief,那么转换为逻辑表达式就相当于“thief!=A”。‎“B说:是C”的意思是“B说小偷是C”,转换为逻辑表达式就相当于“thief==C”。“‎C说:是D”的意思是“C说小偷是D”,转换为逻辑表达式就相当于“thief==D”。“‎D说:他冤枉人”的意思是“D说C冤枉自己,自己不是小偷”,转换为逻辑表达式就相当于“thief!=D”。那么判断谁是小偷的问题就转换为了判断表达式(thief!=A)+(thief==C)+(thief==D)+(thief!=D)==3成立的条件问题,thief的取值范围是A、B、C、D中的一个。这是逻辑思维能力。

       thief的取值范围是A、B、C、D中的一个,如何在Python中为thief规定取值范围,可以联想到ord()和chr()函数,ord('A')=65,ord('B')=66,ord('C')=67,ord('D')=68,chr(65)='A',chr(66)='B',chr(67)='C',chr(68)='D',可以使用range()函数为thief规定取值范围,程序编写如下:

for thief in range(65,69):
    if ((thief!=65)+(thief==67)+(thief==68)+(thief!=68))==3:
        thief=chr(thief+64)
        print("小偷是{}".format(thief))

为了程序简便,也可将thief的取值范围改为range(1,5),修改后程序编写如下:

for thief in range(1,5):
    if ((thief!=1)+(thief==3)+(thief==4)+(thief!=4))==3:
        thief=chr(thief+64)
        print("小偷是{}".format(thief))

‌ 结果都为

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值