0

当我认为它应该返回 true 时,以下脚本返回 false。知道这里发生了什么吗?非常感谢,伙计们!

test=['Pop']
test1='Pop'

if (test==('POP' or 'Pop' or 'pop' or ['POP'] or ['Pop'] or ['pop'])):    
    print "yes"
else:
    print "no"

目前,输出为“否”。

4

5 回答 5

7

您不了解 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')
于 2012-06-27T17:46:37.627 回答
2

如果你这样写,当你使用testor时 if 语句将是真的test1

test=['Pop']
test1='Pop'
if (test in ('POP', 'Pop', 'pop', ['POP'], ['Pop'], ['pop'])):
    print "yes"
else:
    print "no"

您基本上是在创建一个包含所有可能性的大元组:三个字符串和三个列表。如果您的变量存在于其中,则 if 语句为真。

于 2012-06-27T17:33:54.620 回答
1

test == (a or b)不同于test == a or test == b.

(a or b)返回aiffbool(a)为 True,b否则返回。因此,对于 Python 中的任何其他非空字符串,因为是 Truetest == ('POP' or whatever)等价于。test == 'POP'bool('POP')

要测试多个值,您可以使用:value in [a, b].

注意:['a'] != 'a'– 后者是一个字符串,而前者是一个包含字符串的列表。

在你的情况下,你可以test[0].lower() == 'pop'

于 2012-06-27T17:59:15.977 回答
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"

每一个都是一个单独的测试。

于 2012-06-27T17:36:34.497 回答
0

看起来用户只是想进行不区分大小写的比较:

if test1.lower() == 'pop':
    print 'yes'
else:
    print 'no'
于 2012-11-16T10:01:54.970 回答