我希望使用下面的if语句检测一个字符串,但它给了我错误的输出。我无法检测到ARR
。当我使用下面的if语句时,输出将是"错误"。当输入为ARR
时,它应该会通过。
我的数据是这样的,我希望编辑我的if语句,而不是编辑我放置数据的方式。
['TPA']
['TPI']
['ABC']
if MM[0] == ('\'ARR\'' or '\'ABC\'' or '\'SAC\''):
pass
else:
print('wrong')
答案 0 :(得分:1)
那是因为以下部分的结果是"'ARR'"
:
>>> ('\'ARR\'' or '\'ABC\'' or '\'SAC\'')
"'ARR'"
基本上,当两个操作数都为True时,or
运算符将返回左操作数,因为所有字符串都被python评估为True,因此链接or
操作的结果是第一个字符串。< / p>
为了解决这个问题,您可以使用in
运算符和具有O(1)复杂度的set
来简单检查成员资格:
if MM[0] in {"'ARR'", "'ABC'", "'SAC'"}
答案 1 :(得分:1)
我认为不是单引号会使代码输出意外,这是因为你使用了错误的if语句。
如果您想检查MM[0]
是'ARR'还是'ABC'或'SAC',您需要使用
MM[0] == 'ARR' or MM[0] == 'ABC' or MM[0] == 'SAC'
或
MM[0] in ('ARR', 'ABC', 'SAC')
否则,('ARR' or 'ABC' or 'SAC')
是一个总是返回'ARR'的表达式,所以
if MM[0]==('\'ARR\'' or '\'ABC\'' or '\'SAC\''):
仅当True
为“ARR”时,才会返回MM[0]
。如果MM[0]
为'ABC',那么if
语句会返回False
,您会看到'错误'打印出来。
答案 2 :(得分:0)
您应该使用in
进行搜索。
if MM[0] in {"'ARR'", "'ABC'", "'SAC'"}
然后,不要用反斜杠逃到处处,这很难看。如果你知道你的字符串中有单引号,用双引号分隔它,它将更具可读性。
答案 3 :(得分:0)
我认为这应该有用
MM[0] in ('ARR', 'ABC','SAC')
干杯
答案 4 :(得分:0)
您应该将所有有效选项放在列表中,并执行列表成员资格检查,如下所示:
wanted = r"'ARR'"
if wanted in [r"'ARR'", r"'ABC'", r"'SAC'"]:
print("Given value was a member of the list.")
字符串前面的r
将它们表示为raw
个字符串,它们将它们表示为具有不同规则的字符串,用于转义其中的某些字面值。
答案 5 :(得分:0)
MM=['ARR', 'ABC','SAC','WWW','ZZZ']
if MM[0] in ('ARR', 'ABC', 'SAC'):
pass
else:
print('wrong')
工作得很好。你过度思考它。你不必指定MM是一个数组,因为python可以解决这个问题。你也不必逃避单引号。您没有尝试匹配字符串'ARR'
,而是尝试匹配ARR
这适用于你提供的字符串...你试图遍历它们吗?:
MM = ['ARR', 'ABC', 'SAC', 'WWW', 'ZZZ']
for i in MM:
if i in ('ARR', 'ABC', 'SAC'):
print "Winner %s" % i
else:
print('wrong')
给出
Winner ARR
Winner ABC
Winner SAC
wrong
wrong
答案 6 :(得分:0)
\&#39; 会使&#39; 成为字符串的一部分。例如:
>>> str1 = '\'demo_string\''
>>> str1
"'demo_string'"
整个str1
是 'demo_string'
。
如果您想匹配 ARR
或 ABC
......
data = 'ABC'
if data in ('ARR', 'ABC', 'SAC'):
pass
else:
print('wrong')
您还可以使用 "
来引用字符串,例如:
if data in ("ARR", "ABC", "SAC"):
pass
else:
print('wrong')
如果您想匹配'ABC'
,请尝试:
if data in ("'ARR'", "'ABC'", "'SAC'")
pass
else:
print('wrong')