我正在努力教自己基礎程式設計.
一個簡單的項目是查找字元串中子字元串的重複索引.是以例如,在字元串“abcdefdef”和子串“def”中,我希望輸出為3和6.我有一些代碼寫,但我沒有得到我想要的答案.以下是我寫的
注意:我知道可能有更簡單的方法來生成結果,利用該語言的内置功能/包,例如正規表達式.我也知道我的方法可能不是最佳算法.從來沒有,在這個時候,我隻是在尋求修複以下邏輯的建議,而不是使用更多慣用的方法.
import string
def MIT(String, substring): # "String" is the main string I'm searching within
String_list = list(String)
substring_list = list(substring)
i = 0
j = 0
counter = 0
results = []
while i < (len(String)-1):
if [j] == [i]:
j = j + 1
i = i + 1
counter = counter + 1
if counter == len(substring):
results.append([i - len(substring)+1])
counter = 0
j = 0
i = i+1
else:
counter = 0
j = 0
i = i+1
print results
return
我的推理是這樣的.我将String和子字元串轉換為清單.這允許索引字元串中的每個字母.我設定i和j = 0 – 這些将分别是我在String和substring索引中的第一個值.我還有一個新的變量counter,我将其設定為0.基本上,我使用計數器來計算位置[i]中的字母等于位置[j]中的元素的次數.如果counter等于substring的長度,那麼我知道[i-len(substring)1]是我的子串開始的位置,是以我将它添加到名為results的清單中.然後我重置計數器和j并繼續搜尋更多的子串.
我知道代碼很尴尬,但我認為我仍然可以得到答案.相反,我得到:
>>> MIT("abcdefghi", "def")
[[3]]
>>> MIT("abcdefghi", "efg")
[[3]]
>>> MIT("abcdefghi", "b")
[[1]]
>>> MIT("abcdefghi", "k")
[[1]]
有什麼想法嗎?