当我认为它应该返回 true 时,以下脚本返回 false。知道这里发生了什么吗?非常感谢,伙计们!
test=['Pop']
test1='Pop'
if (test==('POP' or 'Pop' or 'pop' or ['POP'] or ['Pop'] or ['pop'])):
print "yes"
else:
print "no"
目前,输出为“否”。
当我认为它应该返回 true 时,以下脚本返回 false。知道这里发生了什么吗?非常感谢,伙计们!
test=['Pop']
test1='Pop'
if (test==('POP' or 'Pop' or 'pop' or ['POP'] or ['Pop'] or ['pop'])):
print "yes"
else:
print "no"
目前,输出为“否”。
您不了解 python 如何处理该语句。Python 不是自然语言。
if (test==(['Pop'] or 'Pop')):
因为在or
括号内,所以它首先处理它。所以它看起来
['Pop'] or 'Pop'
由于 ['Pop'] 被认为是 True,python 将整个语句简化为:
if (test==['Pop']):
此时,它测试是否test
等于['Pop']
你真正想做的是:
(test == ['Pop']) or (test == 'Pop')
这完全不同于
test == (['Pop'] or 'Pop')
如果你这样写,当你使用test
or时 if 语句将是真的test1
:
test=['Pop']
test1='Pop'
if (test in ('POP', 'Pop', 'pop', ['POP'], ['Pop'], ['pop'])):
print "yes"
else:
print "no"
您基本上是在创建一个包含所有可能性的大元组:三个字符串和三个列表。如果您的变量存在于其中,则 if 语句为真。
test == (a or b)
不同于test == a or test == b
.
(a or b)
返回a
iffbool(a)
为 True,b
否则返回。因此,对于 Python 中的任何其他非空字符串,因为是 Truetest == ('POP' or whatever)
等价于。test == 'POP'
bool('POP')
要测试多个值,您可以使用:value in [a, b]
.
注意:['a'] != 'a'
– 后者是一个字符串,而前者是一个包含字符串的列表。
在你的情况下,你可以test[0].lower() == 'pop'
。
test=['Pop']
test1='Pop'
if test1 == 'POP' or test1 == 'Pop' or test1 == 'pop' or test1 == ['POP'] or test1 == ['Pop'] or test1 == ['pop']:
print "yes"
else:
print "no"
每一个都是一个单独的测试。
看起来用户只是想进行不区分大小写的比较:
if test1.lower() == 'pop':
print 'yes'
else:
print 'no'