编写一个带有两个字符串参数的代码,并返回一个参数可以在另一个参数中找到的次数的整数计数

时间:2017-09-10 02:28:55

标签: 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 
   else:
      return 0

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

任何人都可以帮助我了解我的代码出了什么问题以及如何更改它?我的第一个印刷语句产生了8个,但我的第二个印刷语句产生了4个,它们应该是相同的。

1 个答案:

答案 0 :(得分:-1)

在这里试试这个:

var sleep = require('system-sleep')
var done = false

setTimeout(function() {
  done = true
}, 1000)

while (!done) {
  sleep(100) // without this line the while loop causes problems because it is a spin wait
  console.log('sleeping')
}

console.log('If this is displayed then it works!')

初始代码中的主要问题是此部分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:中的每个字母,而sup只会在{{1}中找到sup.index(i)索引的第一个出现}}。它并不关心i的来源,而只关心sup是什么。

如果您确实打印出i,那么您会发现每个循环i始终为sup.index(i),因此当您执行sup.index(i)时,它将会1始终捕获第一个substrn("wooloomooloo", "oo")。由于您有oo个,o将返回8

我希望这会有所帮助:)