首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Python入门 | 逻辑运算的那些坑

Python入门 | 逻辑运算的那些坑

作者头像
Crossin先生
发布2023-09-21 16:31:14
发布2023-09-21 16:31:14
2140
举报

大家好,欢迎来到 Crossin的编程教室 !

上一篇最后我们留了一个思考题:用代码表示「不会唱跳和打篮球」

不少人觉得是:

代码语言:javascript
复制
not (会唱跳 and 会打篮球)

但如果代入:

代码语言:javascript
复制
会唱跳 = False
会打篮球 = True

上面代码的结果是 True。

翻译一下就是:如果一个人不会唱跳,但是会打篮球,那么他就是不会唱跳和打篮球。

听起来有点怪怪的。

仔细想一下,我们平常口语中说「不会唱跳和打篮球」,其实意思是 不会唱跳 并且 不会打篮球。

所以应该是:

代码语言:javascript
复制
not 会唱跳 and not 会打篮球

这个表达式也可以写成

代码语言:javascript
复制
not (A or B)

这个等价关系叫做逻辑运算的反演律,即:

代码语言:javascript
复制
not A and not B == not (A or B)
not (A and B) == not A or not B

为了便于记忆和查找,给大家整理了一下逻辑运算的一些规律:

3个逻辑运算符的优先级并不是相同的,而是

not > and > or

来看一个例子:

3个变量,分别对应 ①我有没有空 ②你有没有空 ③天气好不好

用代码表示以下逻辑:

如果 我有空或者你有空,并且天气好,就下楼去喂猫

一个解答是:

代码语言:javascript
复制
if 我有空 or 你有空 and 天气好:
    print('去喂🐱')

但如果我们代入:

代码语言:javascript
复制
我有空 = True
你有空 = False
天气好 = False

天气不好,应该是不去喂猫的,但仍然会有输出。所以这个解答是错误的。

原因在于,代码会先计算出 你有空 and 天气好 的结果,再和 我有空 进行 or 运算,结果就是 True,条件满足。

在实际开发中,如果有类似拿不准的逻辑,建议加上括号来确保执行顺序,例如:

代码语言:javascript
复制
if (我有空 or 你有空) and 天气好:
    print('去喂🐱')

最后留给大家几个思考题,以下每一行代码的布尔值结果是多少?

代码语言:javascript
复制
bool(-1)
bool('0')
bool(" ")
bool("") == False
"" == False
1 == True

对于 Python 中的逻辑运算,你还有什么想了解的内容?欢迎在留言区讨论。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-09-18 13:31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Crossin的编程教室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档