鱼C论坛

 找回密码
 立即注册
查看: 1569|回复: 15

[已解决]python 中 or 的用法

[复制链接]
发表于 2021-8-12 03:59:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

or 不是表示'或'么,如图,我想表达的意思是,'q' 等于 'N' 或 'n',很明显是False,但是却返回了 'n'
当我将 'N' 与 'n' 交换之后,他又返回了 'N' ,说明系统返回的是最后一位字符

为什么他返回了最后一位字符,而不是False呢
最佳答案
2021-8-12 15:02:00
or是逻辑运算符,==是比较运算符,比较运算符优先级高于逻辑运算符,所以'q' == 'N'会优先执行,返回为False,表达式为False or 'n'

然后就应该了解or运算符的本质了:or运算符的本质是or会寻找为True的表达式并返回,若都为True或都为False的话,则会选择前面的表达式的返回值并返回

在python中:'0', 0, '', False, 返回值为False的表达式, None都可以算作为False,其他都可以算作为True.
所以,False or 'n'的话or会选择'n'并返回
所以,你会看见控制台输出'n'

如果想达到你的这种需求的话,则需要使用()改变'N' or 'n'的优先级,代码为
'q' == ('N' or 'n')
???.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-8-12 06:43:28 From FishC Mobile | 显示全部楼层
python就是这样的规则
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-12 07:51:23 | 显示全部楼层
我认为 'a' == 'q' or 'w' 分为两项 'a' == 'q'和 ‘w’  前者为0, 所以即为 0 + ‘w’  返回 'w'   
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

发表于 2021-8-12 07:52:46 | 显示全部楼层

                               
登录/注册后可看大图
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-12 08:09:08 | 显示全部楼层
用or进行判断的时候,在至少有一个非0时,or会返回第一个非0的值。

这是小甲鱼老师在and 、or那一课的精讲,建议可以回顾一下,了解透了原理。

在你用and or进行非0条件下判断的时候,就不会单一的只返回True或False了。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-12 08:14:30 | 显示全部楼层
首先是运算优先级。==优先于or,要按照你的初衷,应该写为
>>> 'q' == ('N' or 'n')
False
其次为什么你的式子结果为'n'?
>>> 'q' == 'N'
False
>>> False or 'n'
'n'
python中非空的字符都作为True,所以返回'n'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2021-8-12 08:30:05 | 显示全部楼层
要这么写
if 'q' == 'n' or 'q' == 'N':
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-12 09:21:35 | 显示全部楼层
大马强 发表于 2021-8-12 07:51
我认为 'a' == 'q' or 'w' 分为两项 'a' == 'q'和 ‘w’  前者为0, 所以即为 0 + ‘w’  返回 'w'

没错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-12 15:02:00 | 显示全部楼层    本楼为最佳答案   
or是逻辑运算符,==是比较运算符,比较运算符优先级高于逻辑运算符,所以'q' == 'N'会优先执行,返回为False,表达式为False or 'n'

然后就应该了解or运算符的本质了:or运算符的本质是or会寻找为True的表达式并返回,若都为True或都为False的话,则会选择前面的表达式的返回值并返回

在python中:'0', 0, '', False, 返回值为False的表达式, None都可以算作为False,其他都可以算作为True.
所以,False or 'n'的话or会选择'n'并返回
所以,你会看见控制台输出'n'

如果想达到你的这种需求的话,则需要使用()改变'N' or 'n'的优先级,代码为
'q' == ('N' or 'n')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-12 21:12:08 | 显示全部楼层
冬雪雪冬 发表于 2021-8-12 08:14
首先是运算优先级。==优先于or,要按照你的初衷,应该写为

其次为什么你的式子结果为'n'?

正解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-12 23:09:48 | 显示全部楼层
大马强 发表于 2021-8-12 07:51
我认为 'a' == 'q' or 'w' 分为两项 'a' == 'q'和 ‘w’  前者为0, 所以即为 0 + ‘w’  返回 'w'

感谢,我刚刚看了一下,==的优先级比or高,所以他先计算了==
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-12 23:10:21 | 显示全部楼层
临时号 发表于 2021-8-12 15:02
or是逻辑运算符,==是比较运算符,比较运算符优先级高于逻辑运算符,所以'q' == 'N'会优先执行,返回为False,表 ...

感谢,刚刚注意到了优先级
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-12 23:11:12 | 显示全部楼层
heidern0612 发表于 2021-8-12 08:09
用or进行判断的时候,在至少有一个非0时,or会返回第一个非0的值。

这是小甲鱼老师在and 、or那一课的精 ...

感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-12 23:11:45 | 显示全部楼层
冬雪雪冬 发表于 2021-8-12 08:14
首先是运算优先级。==优先于or,要按照你的初衷,应该写为

其次为什么你的式子结果为'n'?

感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-12 23:32:14 From FishC Mobile | 显示全部楼层
短路逻辑,or一真则真,and全真则真
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-15 08:20:43 | 显示全部楼层
没毛病 我在执行if判断时没加括号也遇到这样的事情
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-13 20:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表