2017-07-19 154 views
-1

我已經寫了下面的代碼來查找變量中的文本。它是爲外部條件而不是內部條件(與外部條件相同)工作。Python字符串find()方法

name = "Sachin" 

if name.find("chin"): 
    print("Text Presented") 
    print(name) 
    if name.find("Sac"): 
     print("Sac is prsented") 
     print(name) 

O/P: 文本提交 薩欽

但它會爲下面的代碼(尋找下檔字符)工作:

name = "Sachin" 

if name.find("chin"): 
    print("Text Presented") 
    print(name) 
    if name.find("sac"): 
     print("Sac is prsented") 
     print(name) 

O/P: 文本提交 薩欽 Sac is ptedted Sachin

有人可以告訴我爲什麼發生這種情況?

+3

的代碼兩片相同使用正則表達式在字符串搜索。 –

+2

這與'pip'或'pycharm'有什麼關係? –

+0

更新了問題。 – jaibalaji

回答

4

正在發生的事情是,name.find("Sac")回報0其中有False一個布爾值,因此if -clause不會觸發他們你想要的方式。

嘗試此代替:

name = "Sachin" 

if "chin" in name: 
    print("Text present") 
    print(name) 
    if "Sac" in name: 
     print("Sac is present") 
     print(name) 

注:0name.find("Sac")因爲"Sac""Sachin"開始於位置0(Python使用0索引)返回。

除了0指數,Python也區分大小寫的意義name.find("sac")回報-1(這是當你試圖findstr ING是那裏會發生什麼)。但是,bool(-1) = 1因此if確實會觸發並且其下面的代碼執行。

+0

爲了擴大這個範圍,第二個小寫''sac''返回'-1',因爲它不存在,它在if語句中計算爲'True'。 –

+0

我改變了問題。你可以ü現在檢查 – jaibalaji

+0

我使用unpythonic方式? – jaibalaji

2

name.find("chin")將返回值2,其值爲python中的布爾值True

name.find("Sac")將返回值0,它在python中的布爾值爲False

name.find("sac")將返回值-1,它的Python中的布爾值爲True

使用in運營商,我認爲這會給你你想要的功能。 見下圖:

name = "Sachin" 

if "chin" in name: 
    print("Text Presented") 
    print(name) 
    if "Sac" in name: 
     print("Sac is prsented") 
     print(name) 
+0

非常感謝你:) – jaibalaji

1

的Python find(sub)方法返回在子子被發現,返回最低索引 -1,如果它不是。

  • 在第一段代碼中,由於Sachin中「S」的索引爲「0」,所以name.find(「Sac」)返回「0」。因此,'if'的主體沒有執行。
  • 在第二段代碼中,name.find(「sac」)返回「-1」,但是如果(-1)爲真,那麼這段代碼中的'if'正文會被執行。我希望你現在能得到這個概念。
0

您可以只導入re

import re 
name = "Sachin" 
if re.search("chin",name): 
    print("Text Presented") 
    print(name) 
    if re.search("Sac",name): 
     print("Sac is prsented") 
     print(name)