让我们说a ='hi'
我想知道a是否是以下“hi”,“yes”或“no”中的任何一个 我可以跑了
a='hi'
a=='hi' or a=='yes' or a=='no'
>>>True
但是,让我们说这是一个很长的可能性列表,所以我只是说
a='hi'
a==('hi' or 'yes')
当我这样做时,我得到答案为真 但是,当我做这样的事情时:
a==('yes' or 'hi')
>>>False
然后这也很奇怪
a==('yes' and 'hi')
>>>True
但如果我再次切换它们
a==('hi' and 'yes')
>>>False
有人可以解释这里发生的事情
答案 0 :(得分:7)
您的某些行评估为True
而其他行评估为False
的原因仅仅归因于how and
/or
work in Python:
表达式
x and y
首先评估x;如果x为false,则为其值 被退回;否则,评估y并得到结果值 返回。表达式
x or y
首先评估x;如果x为真,则其值为 回;否则,评估y并得到结果值 返回。
因此,让我们来看看你的案例。
('hi' or 'yes')
'hi'
是真实的,因此此表达式的计算结果为'hi'
。 a == 'hi'
评估为True
。
('yes' or 'hi')
相同的推理,除了它现在评估为'yes'
。 a == 'yes'
为False
。
('yes' and 'hi')
由于'yes'
是真实的,因此表达式的结果为'hi'
,a == 'hi'
为True
。
('hi' and 'yes')
最后,由于评估结果为'yes'
,a == 'yes'
为False
。
如果你想测试一个字符串是否是多个事物中的一个,测试它是否在一个集合中:
if a in {'hi', 'yes', 'no'}:
# Do something
答案 1 :(得分:3)
这应该回答你的问题:
Python 2.7.6 (default, Dec 3 2013, 09:19:11)
[GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.2.79)] on darwin
>>> ("yes" or "hi")
'yes'
>>> ("hi" or "yes")
'hi'
>>> ("yes" and "hi")
'hi'
>>> ("hi" and "yes")
'yes'
答案 2 :(得分:0)
这是关于布尔运算的python文档位,它解释了这种行为https://docs.python.org/2/library/stdtypes.html
These are the Boolean operations, ordered by ascending priority:
Operation Result Notes
x or y if x is false, then y, else x (1)
x and y if x is false, then x, else y (2)
not x if x is false, then True, else False (3)
Notes:
(1) This is a short-circuit operator, so it only evaluates the second argument if the first one is False.
(2) This is a short-circuit operator, so it only evaluates the second argument if the first one is True.
(3) not has a lower priority than non-Boolean operators, so not a == b is interpreted as not (a == b), and a == not b is a syntax error.