大家好,欢迎来到 Crossin的编程教室 !
上一篇(如何判断多个条件)最后我们留了一个思考题:用代码表示「不会唱跳和打篮球」。
不少人觉得是:
not (会唱跳 and 会打篮球)
但如果代入:
会唱跳 = False会打篮球 = True
上面代码的结果是 True。
翻译一下就是:如果一个人不会唱跳,但是会打篮球,那么他就是不会唱跳和打篮球。
听起来有点怪怪的。
仔细想一下,我们平常口语中说「不会唱跳和打篮球」,其实意思是 不会唱跳 并且 不会打篮球。
所以应该是:
not 会唱跳 and not 会打篮球
这个表达式也可以写成
not (A or B)
这个等价关系叫做逻辑运算的反演律,即:
not A and not B == not (A or B)not (A and B) == not A or not B
为了便于记忆和查找,给大家整理了一下逻辑运算的一些规律:
3个逻辑运算符的优先级并不是相同的,而是
not > and > or
来看一个例子:
3个变量,分别对应 我有没有空 你有没有空 天气好不好
用代码表示以下逻辑:
如果 我有空或者你有空,并且天气好,就下楼去喂猫
一个解答是:
if 我有空 or 你有空 and 天气好: print('去喂')
但如果我们代入:
我有空 = True你有空 = False天气好 = False
天气不好,应该是不去喂猫的,但仍然会有输出。所以这个解答是错误的。
原因在于,代码会先计算出 你有空 and 天气好 的结果,再和 我有空 进行 or 运算,结果就是 True,条件满足。
在实际开发中,如果有类似拿不准的逻辑,建议加上括号来确保执行顺序,例如:
if (我有空 or 你有空) and 天气好: print('去喂')
最后留给大家几个思考题,以下每一行代码的布尔值结果是多少?
bool(-1)bool('0')bool(" ")bool("") == False"" == False1 == True
领取专属 10元无门槛券
私享最新 技术干货