此函数应返回值 2 而不是 3。 它适用于 while 循环,但我想知道为什么它不适用于这个看起来与我非常相似的 for 循环。
def count_words(string, word):
i = 0
count = 0
for i in range(len(string)):
if string[i:i+len(word)] == word:
count +=1
print("count",i)
i += len(word)
else:
i += 1
return count
print(count_words("AAAA","AA"))
答案 0 :(得分:0)
您不能在循环内更改 i,这将修复您的代码:
def count_words(string, word):
j = 0
count = 0
for i in range(len(string)):
if string[j:j+len(word)] == word:
count +=1
print("count",j)
j += len(word)
else:
j += 1
return count
print(count_words("AAAA","AA"))
答案 1 :(得分:0)
因为 for
循环将总是迭代 0
、1
、...直到 len(string) - 1
。您在循环内对 i
所做的分配将被丢弃。
问题在于 range(...)
创建了一个 对象,它将产生一个新值,该值分配给 i
每次循环迭代。您在循环内对 i
进行的赋值不会改变范围对象返回的序列。