Python:布尔值做加法巧解逻辑推理题

144 篇文章 0 订阅
15 篇文章 0 订阅

在Python的官方文档中写到:Python中的布尔值是作为整数的子类实现的。

在Python语言中布尔类型的True和False与整型的1和0完全一样。

True==1
True

True==2
False

False==0
True

还可以对布尔类型和整型之间进行类型转换。布尔类型转整型,True转换成1,False转换成0。整型转布尔类型,0转换成False,除了0以外的数字都转为True。

int(True)
1

int(False)
0

bool(1)
True

bool(2)
True

bool(0)
False

bool(-1)
True

布尔类型也可以做算数运算,在计算的工程中隐式的将布尔类型转为整型。

True+True
2

5-True
4

False*100
0

1/False
ZeroDivisionError:divisionbyzero

有了以上的基础知识,我们就可以用Python解一道“谁是凶手”的推理题。题目如下:

日本发生谋杀案,警察通过排查确定杀人凶手必为四个嫌疑犯之一,以下为供词:

A说:不是我。

B说:是C。

C说:是D。

D说:C在胡说。

三人说真话,一人说假话。谁是凶手?

首先我们列出来四个嫌疑人供词的关系表达式。

A说:murder!=‘A’

B说:murder==‘C’

C说:murder==‘D’

D说:murder!='D’

然后把真正的凶手代入murder变量,4个供词表达式相加应该等于3。因为题目说“三人说真话,一人说假话”。我们可以用一个循环来测试所有的嫌疑人。

formin[‘A’,‘B’,‘C’,‘D’]:
if(m!=‘A’)+(m==‘C’)+(m==‘D’)+(m!=‘D’)==3:
print(f’{m}是凶手’)

C是凶手

有了这种通用的枚举方法,我们就可以把烧脑的“谁是凶手”推理题,转化成可以让电脑帮我们解决的简单问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值