1

我正在尝试检查是否有任何值“GIN”或“未准备好”或“将被放弃或需要重新提交”等于 retrunVal,我注意到对于任何 returnVal,“if”循环“正在获取并且“INSIDE”正在获取打印,我怀疑语法不正确,有人可以提供输入吗?

    if ('GIN'  or 'NOT READY' or 'TO BE ABANDON OR NEEDS RESUBMISSION' == returnVal):
        print "INSIDE"
4

3 回答 3

8

像这样:

if returnValue in ('GIN', 'NOT READY', 'TO BE ABANDON OR NEEDS RESUBMISSION'):
    print 'INSIDE'

这是标准的习惯用法 - 使用in运算符来测试具有所有可能值的元组中的成员资格。比一堆or'ed contitions 干净得多。

于 2013-06-28T00:58:45.677 回答
6

从逻辑上讲,您的代码如下所示:

if 'GIN' exists
or if 'NOT READY' exists
or if 'TO BE ABANDON OR NEEDS RESUBMISSION' is equal to retVal
   do something

阅读有关 python 中真值的链接(这也与 paxdiablo 的答案有关)。

更好的方法是使用 python 的“in”语句:

if retVal in ['GIN', 'NOT READY', 'TO BE ABANDON OR NEEDS RESUBMISSION']:
   do something
于 2013-06-28T01:01:19.030 回答
2

这是一种方法:

if (returnVal == 'GIN')  or (returnVal == 'NOT READY') or returnVal == '...':

虽然更 Pythonic 更好的方法是使用in

if returnVal in ['GIN', 'NOT READY', '...']:

换句话说(对于第一种情况),使用单独的条件并将or它们一起使用。

您总是看到的原因INSIDE是因为在条件上下文中'GIN'被有效地视为一个值:true

>>> if 'GIN':
...     print "yes"
... 
yes

并且true or <anything>true

于 2013-06-28T00:58:49.183 回答