2014-09-27 19 views
0

多個字符串聲明我如果一直這樣statment必須檢查,如果這兩個String存在於self.line.lower(),可以是例如:123abc567或blaxyzbla:如果可以用Python

 if 'abc' or 'xyz' in self.line.lower(): 
      print ('Present') 
     else: 
      print ('Not Present') 

爲什麼如果self.line.lower()在字符串中不包含abc或xyz,那麼這會返回真(Print Present)。

我必須使用此工作:

 if self.line.lower().find('abc') != -1: 
     print ('Present') 
    elif self.line.lower().find('xyz') != -1: 
     print ('Present') 
    else: 
     print ('Not Present') 

非常感謝

回答

1

你有什麼等價於:

if 'abc' or ('xyz' in self.line.lower()): 

優先順序表的順序可以在這條巨蟒documentation被發現。在圖表底部,您將看到inor(或and)具有更高的優先級,因此'xyz'被檢查爲self.line.lower(),然後結果爲or''abc'。由於'abc'的計算結果爲非零值,因此整個表達式始終爲真。

我可以這樣想的一種方法整齊地是嵌套的for in,它根據我們正在搜索的字符串查找目標列表中的項目。

if any(x in line.lower() for x in ['abc', 'xyz']): 
    print ('Present') 
else: 
    print ('Not Present') 

x in line.lower() for x in ['abc', 'xyz']產生的發電機,將返回真或假的每個元素。您使用any來確定生成列表中的任何元素是否爲true,這意味着至少找到其中一個元素。如果您想檢查是否在字符串中找到所有項目,您可以用all替換any

+0

只有當我發現嚴格字符串「ABC」或「某某」這項工作,但不工作,如果我上線檢查存在:123abc456或blaxyzbla – rocherz 2014-09-27 03:23:23

+0

你是正確。即使我們考慮優先順序,它仍然不會做你想要的。我提供了一個應該做你想做的事情的班輪。 – 2014-09-27 03:32:10

+0

非常感謝,用這種方法工作:) – rocherz 2014-09-27 03:46:03

0
if 'abc' or 'xyz' in self.line.lower(): 

正被分解爲兩個不同的條件,然後與or一起評估。

  • 'abc'
  • 'xyz' in self.line.lower()

前兩將始終評估爲真,因爲它不是一個空字符串。

所以你有if True or 'xyz' in self.line.lower()這將永遠評估爲真。出於這個原因,您的代碼將始終爲print ('Present'),永遠不會是print ('Not Present')

我想你想使用

if 'abc' in self.line.lower() or 'xyz' in self.line.lower(): 
    print('Present') 
else: 
    print('Not Present')