2017-09-10 64 views
-2

我必須編寫一個代碼substrn,它接受字符串參數sup和sub,並返回整數(可能重疊)的次數可以在sup中找到。編寫一個需要兩個字符串參數的代碼,並返回在另一個參數中可以找到參數的次數的整數count

我寫了這個代碼

def substrn(sup,sub): 
    if sub in sup: 
     x = 0 
     for i in sup: 
     if sub in sup[sup.index(i):(int(len(sub))+int(sup.index(i)))]: 
      x = x +1 
     return x 
    else: 
     return 0 

print(substrn("wooloomooloo", "oo")) 
print(substrn("wablabmablab", "ab")) 

誰能幫助我理解了什麼錯我的代碼,以及如何我可以改變它?我的第一份印刷聲明出版了8份,但我的第二份印刷聲明出版了4份,它們應該是相同的。

回答

-1

這裏試試這個:

def substrn(sup,sub): 
     # if sub in sup: # this is redundant since you are already checking 
     x = 0 
     for i in range(len(sup)): 
     if sub == sup[i:int(len(sub))+i]: 
     # try not to use a in b as this indicates partial search 
     # so to make your logic more explicit you use a == b 
      sup[i:int(len(sub))+i] 
      x = x +1 
     return x 


print(substrn("wooloomooloo", "oo")) # prints 4 
print(substrn("wablabmablab", "ab")) # prints 4 

在初始代碼的主要問題是這部分for i in sup:sup.index(i)

for i in sup:遍歷每個字母在supsup.index(i)只會發現第一發生的isup指數。它不在乎i來自哪裏,但只有i是。

如果你真的打印出來sup.index(i),你會發現,sup.index(i)永遠是1每個循環,因此當u執行substrn("wooloomooloo", "oo")它將始終拍攝第一oo。既然你有8個o S,你substrn("wooloomooloo", "oo")將返回8

我希望這有助於:)

相關問題