Python 编写一个接受两个字符串参数的代码,并返回一个参数在另一个参数中被找到的次数的整数计数

Python 编写一个接受两个字符串参数的代码,并返回一个参数在另一个参数中被找到的次数的整数计数,python,function,loops,for-loop,Python,Function,Loops,For Loop,我必须编写一个代码substrn,它接受字符串参数sup和sub,并返回sup中sub可能重叠的次数的整数计数 我写了这段代码 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 e

我必须编写一个代码substrn,它接受字符串参数sup和sub,并返回sup中sub可能重叠的次数的整数计数

我写了这段代码

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个,它们应该是相同的

在这里试试这个:

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
初始代码中的主要问题是sup:和sup.indexi中i的这一部分

对于sup中的i:迭代sup中的每个字母,sup.indexi将只找到sup中i索引的第一个匹配项。它不关心我来自哪里,只关心我是什么

如果您实际打印出sup.indexi,您会发现每个循环的sup.indexi始终为1,因此,当您执行substrnWoolOOOO时,oo将始终捕获第一个oo。因为您有8个操作系统,所以您的子对象将返回8

我希望这有助于: