2015-05-08 2 views
0

Только что начал изучать Python. Пришлось создать функцию для подсчета подстроки внутри строки. Решил использовать функцию count() строкового модуля, но он не делает то, на что я надеялся.Как вы рассчитываете на вариации подстроки в строковом модуле?

Кажется, функция count() будет перебирать строку, и если она найдет подстроку, она будет перемещать добавление в счетчик, но продолжит ее итерацию в конце подстроки.

Ниже приведен код и тест я бегу:

def count(substr,theStr): 
    counter = 0 
    counter = theStr.count(substr, 0, len(theStr)) 
    return counter 



print(count('is', 'Mississippi'))   
# Expected count: 2  pass 

print(count('an', 'banana'))     
# Expected count: 2  pass 

print(count('ana', 'banana'))   
# Expected count: 2  test failed: count: 1 

print(count('nana', 'banana'))   
# Expected count: 1  pass 

print(count('nanan', 'banana'))    
# Expected count: 0  pass 

print(count('aaa', 'aaaaaa'))   
# Expected count: 5  test failed: count: 2 

ответ

0

Попробуйте принимать отдельные подгруппы строк длины нужной строки и проверять их:

def count(sub, whole): 
    total = 0 
    for i in range(0, len(whole)-len(sub)+1): 
      if sub == whole[i:i+len(sub)]: 
        total+=1 
    return total 

>>> print(count('is', 'Mississippi'))   
2 
>>> # Expected count: 2  pass 
... 
>>> print(count('an', 'banana'))     
2 
>>> # Expected count: 2  pass 
... 
>>> print(count('ana', 'banana'))   
2 
>>> # Expected count: 2  pass 
... 
>>> print(count('nana', 'banana'))   
1 
>>> # Expected count: 1  pass 
... 
>>> print(count('nanan', 'banana'))    
0 
>>> # Expected count: 0  pass 
... 
>>> print(count('aaa', 'aaaaaa'))   
4 
>>> # Expected count: 4  pass 
... 
Смежные вопросы