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