在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)
>>>bool(1)
True
>>>bool(2)
True
>>>bool(0)
False
>>>bool(-1)
True
布尔类型也可以做算数运算,在计算的工程中隐式的将布尔类型转为整型。
>>>True+True
2
>>>5-True
4
>>>False*100
>>>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是凶手
有了这种通用的枚举方法,我们就可以把烧脑的“谁是凶手”推理题,转化成可以让电脑帮我们解决的简单问题。