Хорошо, поскольку вы используете if
, а не в цикле, это означает, что либо условие равно True
, и, таким образом, вы увеличиваете count
, либо это False
, в этом случае вы не выполняететело.
Если вы хотите посчитать числа, вам понадобится какой-нибудь механизм «зацикливания».Это не обязательно должно быть явным, например, in
также скрывает цикл.Но это только приводит к True
или False
.
Неперекрывающиеся (count_seqence('aaaa', 'aa')
is 2
)
Для непересекающихся отсчетов мы можем использовать str.count
:
def count_seqence(text, seq):
return text.count(seq)
в этом случае определение конкретной функции, конечно, довольно бесполезно.Обратите внимание, что выше будет учитываться только непересекающихся совпадений.Например, при подсчете 'aa'
в 'aaaa'
вы получите 2
, а не 3
.
Перекрытие (count_seqence('aaaa', 'aa')
равно 3
)
Для перекрытия мыпотребуется выполнить str.find
и обновлять «окно поиска» до тех пор, пока мы больше не найдем совпадение, например:
def count_seqence(text, seq):
cnt = 0
idx = text.find(seq)
while idx >= 0:
cnt += 1
idx = text.find(seq, idx+1)
return cnt
Таким образом, у нас есть idx
, в котором хранится индекс, в котором находится новое совпадениепроисходит, и каждый раз, когда idx
больше или равно 0
(мы нашли совпадение), мы увеличиваем cnt
и меняем idx
на следующее совпадение.