2015-11-04 43 views
0

我是python的新手,一直在努力嘗試和學習一些編程問題。我的問題在於這個程序的第二個功能。我希望程序返回的是每個要查找的子字符串位於input_string中的位置。自制find函數運行但不返回

multifind("Ni! Ni! Ni! Ni!", "Ni", 0, 20) 

應該返回"0,4,8,12"

然而,當我在IDE中運行它,程序運行,但沒有返回。我想知道是否有人可以告訴我在程序中導致這一點的地方/什麼? 最好以初學者可以理解的方式。

def find(input_string, substring, start, end): 

    x = (len(substring)) 

    for i in range(0, len(input_string)): 
     if input_string[i:(i+x)] == substring: 
      return i 
     else: 
      i += 1 
    return -1 


def multi_find(input_string, substring, start, end): 

    loop = True 
    nulist = "" 
    r = start - 1 
    while loop: 
     r = find(input_string,substring, r + 1, end) 
     if r != -1: 
      if nulist == "": 
       nulist += str(r) 
      else: 
       nulist += "," + str(r) 
     else: 
      loop = False 
    return nulist 
+0

您確定要在find函數中返回-1嗎? – kuskmen

+1

函數的主體需要縮進。在python縮進中你不能馬虎。 – Barmar

+1

你的'find'函數不使用'start'和'end',它總是從頭開始搜索。 – Barmar

回答

0

您還沒有找到使用開始,嘗試:

def find(input_string, substring, start): 

    x = (len(substring)) 

    for i in range(start, len(input_string)): 
     if input_string[i:(i+x)] == substring: 
      return i 
     else: 
      i += 1 

    return -1 


def multi_find(input_string, substring, start): 

    loop = True 
    nulist = "" 
    r = start - 1 
    while loop: 
     r = find(input_string,substring, r + 1) 
     if r != -1: 
      if nulist == "": 
       nulist += str(r) 
      else: 
       nulist += "," + str(r) 
     else: 
      loop = False 
    return nulist 

print multi_find("Ni! Ni! Ni! Ni!", "Ni", 0) 
+1

你正在使用'start',但不是'end'。 – Barmar

+0

@Barmar我做了更正,刪除結束,我認爲它不是必需的。 –

+0

謝謝,但不幸的是,最終的價值需要在那裏......但我想,因爲你刪除它,這將意味着該功能並沒有真正使用它? – prance

0

我知道這是不是正是你想要什麼,但我會發佈一個襯墊功能此使用常規expresions

def multifind(input_string, substring): 
    return [m.start() for m in re.finditer(input_string, substring)] 

這找到全部input_string第一次索引匹配子串和retu將其列爲清單。

+1

他正試圖學習如何自己實現這些功能。使用內置函數會影響目標。 – Barmar

+0

我不認爲學習Python意味着在思考C++或Java代碼的同時編寫Python。首先想到學習Python就像Python開發人員一樣思考。個人想法。 – kuskmen

+1

他正在嘗試使用Python來學習編程基礎知識。 – Barmar

相關問題