sunlechenzxcv 发表于 2021-8-12 03:59:28

python 中 or 的用法


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

为什么他返回了最后一位字符,而不是False呢

wp231957 发表于 2021-8-12 06:43:28

python就是这样的规则

大马强 发表于 2021-8-12 07:51:23

我认为 'a' == 'q' or 'w' 分为两项 'a' == 'q'和 ‘w’前者为0, 所以即为 0 + ‘w’返回 'w'   

大马强 发表于 2021-8-12 07:52:46

https://static01.imgkr.com/temp/d178a084c49345bd8a4955dcf72d970c.jpg

heidern0612 发表于 2021-8-12 08:09:08

用or进行判断的时候,在至少有一个非0时,or会返回第一个非0的值。

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

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

冬雪雪冬 发表于 2021-8-12 08:14:30

首先是运算优先级。==优先于or,要按照你的初衷,应该写为
>>> 'q' == ('N' or 'n')
False
其次为什么你的式子结果为'n'?
>>> 'q' == 'N'
False

>>> False or 'n'
'n'
python中非空的字符都作为True,所以返回'n'

逃兵 发表于 2021-8-12 08:30:05

要这么写

if 'q' == 'n' or 'q' == 'N':

冰清玉洁丸 发表于 2021-8-12 09:21:35

大马强 发表于 2021-8-12 07:51
我认为 'a' == 'q' or 'w' 分为两项 'a' == 'q'和 ‘w’前者为0, 所以即为 0 + ‘w’返回 'w'

没错

临时号 发表于 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')

dragon_xiao 发表于 2021-8-12 21:12:08

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

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


正解

sunlechenzxcv 发表于 2021-8-12 23:09:48

大马强 发表于 2021-8-12 07:51
我认为 'a' == 'q' or 'w' 分为两项 'a' == 'q'和 ‘w’前者为0, 所以即为 0 + ‘w’返回 'w'

感谢,我刚刚看了一下,==的优先级比or高,所以他先计算了==

sunlechenzxcv 发表于 2021-8-12 23:10:21

临时号 发表于 2021-8-12 15:02
or是逻辑运算符,==是比较运算符,比较运算符优先级高于逻辑运算符,所以'q' == 'N'会优先执行,返回为False,表 ...

感谢,刚刚注意到了优先级

sunlechenzxcv 发表于 2021-8-12 23:11:12

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

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

感谢

sunlechenzxcv 发表于 2021-8-12 23:11:45

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

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


感谢

a924436173 发表于 2021-8-12 23:32:14

短路逻辑,or一真则真,and全真则真

Python初学者8号 发表于 2021-8-15 08:20:43

没毛病 我在执行if判断时没加括号也遇到这样的事情
页: [1]
查看完整版本: python 中 or 的用法