我必须编写一个代码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个,它们应该是相同的。
答案 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
我希望这会有所帮助:)