python 中 or 的用法
or 不是表示'或'么,如图,我想表达的意思是,'q' 等于 'N' 或 'n',很明显是False,但是却返回了 'n'
当我将 'N' 与 'n' 交换之后,他又返回了 'N' ,说明系统返回的是最后一位字符
为什么他返回了最后一位字符,而不是False呢
python就是这样的规则 我认为 'a' == 'q' or 'w' 分为两项 'a' == 'q'和 ‘w’前者为0, 所以即为 0 + ‘w’返回 'w' https://static01.imgkr.com/temp/d178a084c49345bd8a4955dcf72d970c.jpg 用or进行判断的时候,在至少有一个非0时,or会返回第一个非0的值。
这是小甲鱼老师在and 、or那一课的精讲,建议可以回顾一下,了解透了原理。
在你用and or进行非0条件下判断的时候,就不会单一的只返回True或False了。
首先是运算优先级。==优先于or,要按照你的初衷,应该写为
>>> 'q' == ('N' or 'n')
False
其次为什么你的式子结果为'n'?
>>> 'q' == 'N'
False
再
>>> False or 'n'
'n'
python中非空的字符都作为True,所以返回'n' 要这么写
if 'q' == 'n' or 'q' == 'N': 大马强 发表于 2021-8-12 07:51
我认为 'a' == 'q' or 'w' 分为两项 'a' == 'q'和 ‘w’前者为0, 所以即为 0 + ‘w’返回 'w'
没错 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') 冬雪雪冬 发表于 2021-8-12 08:14
首先是运算优先级。==优先于or,要按照你的初衷,应该写为
其次为什么你的式子结果为'n'?
正解 大马强 发表于 2021-8-12 07:51
我认为 'a' == 'q' or 'w' 分为两项 'a' == 'q'和 ‘w’前者为0, 所以即为 0 + ‘w’返回 'w'
感谢,我刚刚看了一下,==的优先级比or高,所以他先计算了== 临时号 发表于 2021-8-12 15:02
or是逻辑运算符,==是比较运算符,比较运算符优先级高于逻辑运算符,所以'q' == 'N'会优先执行,返回为False,表 ...
感谢,刚刚注意到了优先级 heidern0612 发表于 2021-8-12 08:09
用or进行判断的时候,在至少有一个非0时,or会返回第一个非0的值。
这是小甲鱼老师在and 、or那一课的精 ...
感谢 冬雪雪冬 发表于 2021-8-12 08:14
首先是运算优先级。==优先于or,要按照你的初衷,应该写为
其次为什么你的式子结果为'n'?
感谢 短路逻辑,or一真则真,and全真则真 没毛病 我在执行if判断时没加括号也遇到这样的事情
页:
[1]