>>> 'a' in 'aeiou' or 'steve'
True
>>> 'S' in 'Sam' and 'Steve'
'Steve'
>>> 'a' in 'aeiou' and 'steve'
'steve'
>>> 's' in 'aeiou' or 'AEIOU'
'AEIOU'
我正在为一些学生上课,并对最后三项输出感到惊讶。我期待一个布尔值。任何人都可以对此有所了解吗?
答案 0 :(得分:5)
布尔操作
x或y |如果x为假,则为y,否则为x
演示
>>> 0 or 1
1
>>> 0 or 0
0
x和y |如果x为假,则为x,否则为y
演示
>>> 0 and 1
0
>>> 1 and 0
0
>>> 1 and 1
1
>>>
注意:强> 如果他们的结果需要,他们只评估他们的第二个论点。
当条件满足时,这将返回True
False
。
演示:
>>> "a" in "abc"
True
>>> "a" in "xyz"
False
>>>
关于我们的声明:
1。当'a' in 'aeiou'
返回True
值时,我们正在执行or
操作,因此这将返回True
,因为First(Left)表达式的值为True
。
演示:
>>> 'a' in 'aeiou'
True
>>> 'a' in 'aeiou' or 'steve'
True
>>>
2。当'S' in 'Sam'
返回True
并且我们正在执行and
操作时,这将从表达式中返回第二个值。
演示:
>>> 'S' in 'Sam'
True
>>> 'S' in 'Sam' and 'Steve'
'Steve'
>>>
3. 与第二句话相同。
4。当's' in 'aeiou'
返回False
并且我们正在执行or
操作时,这将从表达式中返回第二个值。
演示:
>>> 's' in 'aeiou'
False
>>> 's' in 'aeiou' or 'AEIOU'
'AEIOU'
>>>
答案 1 :(得分:4)
您的表达式会像这样评估
>>> ('a' in 'aeiou') or ('steve')
True
>>> ('S' in 'Sam') and ('Steve')
'Steve'
>>> ('a' in 'aeiou') and ('steve')
'steve'
>>> ('s' in 'aeiou') or ('AEIOU')
'AEIOU'
or
和and
运算符,评估表达式并返回评估结果。
因此,or
将首先评估LHSE(左手侧表达式),如果它是Truthy(见下文),它将立即返回评估结果(短路)。只有当它是Falsy(见下文)时,它才会评估并返回RHSE的结果。
同样地,and
将评估LHSE,如果是Falsy,它将立即返回该值,否则它将返回RHSE的评估结果。
Truthy and Falsy
在布尔运算的上下文中,以及控制流语句使用表达式时,以下值被解释为false:
False
,None
,所有类型的数字零和空字符串和容器(包括字符串,元组,列表,字典,集合和frozensets)。所有其他值都被解释为true。
因此,在第一种情况下,('a' in 'aeiou')
为True
,因此会立即返回True
。
在第二种情况下,('S' in 'Sam')
为False
,因此它返回的评估结果('Steve')
仅为Steve
。
在第三种情况下,('a' in 'aeiou')
为True
,因此它会返回仅('steve')
评估steve
的结果。
在最后一种情况下,('s' in 'aeiou')
为False
,因此它会返回评估('AEIOU')
的结果,该结果仅为AEIOU
。
除此之外,您可以通过bool
函数了解您的表达式是否真的是Truthy或Falsy,就像这样
>>> bool('a' in 'aeiou' or 'steve')
True
>>> bool('S' in 'Sam' and 'Steve')
True
>>> bool('a' in 'aeiou' and 'steve')
True
>>> bool('s' in 'aeiou' or 'AEIOU')
True
答案 2 :(得分:1)
由于:
'a' in somestring or 'steve'
被解释为:
('a' in somestring) or 'steve'
会向您True
或'steve'
提供,具体取决于a
是否在somestring
中。它适用于'aeiou'
,但不适用于'xyzzy'
:
>>> 'a' in 'aeiou' or 'steve'
True
>>> 'a' in 'xyzzy' or 'steve'
'steve'
如果要检查字母是否在任何一个单词中,请使用:
('a' in 'aeiou') or ('a' in 'steve')
答案 3 :(得分:0)
我相信此页面会解释http://anh.cs.luc.edu/python/hands-on/3.1/handsonHtml/boolean.html。您正在运行有趣的BODMAS规则以及将逻辑运算应用于bool和字符串时会发生什么(字符串计算结果为true - https://docs.python.org/2/library/stdtypes.html)。
操作和订单都很重要:
答案 4 :(得分:0)
在Python中
或:从左到右,如果value为boolean,如果value为true,则返回this或if value all false返回最后一项。 例如:False或3返回3,4或3返回3,''或False或 - 1返回-1。
和:从左到右评估并返回最后一个值!=如果值为False,则为假或第一个值。
示例:
1和2以及3和4和5返回5:因为1,2,3,4,5都不是False然后返回最后一个值是5.
-1和3和4返回4; -1不是假; 3,4也不是假,然后返回最后一个。请记住,负值不是假:D。 0和3返回0. 0为False然后返回False
'aeiou'中的'a'不是假的; '史蒂夫'并非虚假 在或者操作符返回时,第一个值不是False,那么'aeiou'中的'a'是真的。>>> 'a' in 'aeiou' or 'steve' True
'aeiou'中的'a'是真的,'史蒂夫'不是假的 然后返回最后一个值不是False是'steve''Sam'中的'S'是真的; '史蒂夫'并非虚假 在和操作符返回的最后一个值不是False这是'Steve'然后resule是'Steve'>>> 'S' in 'Sam' and 'Steve' 'Steve'
>>> 'a' in 'aeiou' and 'steve' 'steve'
'aeiou'中的's'是假的; 'AEIOU'并非虚假 然后返回第一个值不是False是'AEIOU'>>> 's' in 'aeiou' or 'AEIOU' 'AEIOU'
更多链接:http://www.diveintopython.net/power_of_introspection/and_or.html