Два независимых решения
Условие while определяет, продолжать ли обход строки. Вложенный if решает, что делать с текущим символом. Счётчик позиции должен двигаться дальше независимо от того, подошёл символ или нет.
Задание источника
Верните число символов # в тексте публикации:
def count_hashtags(text: str) -> int:
index = 0
count = 0
while index < len(text):
if text[index] == "#":
count = count + 1
index = index + 1
return count
Проверка примеров
"New post #python #code" даёт 2, "No tags here" — 0, "#start and #finish" — 2. Для пустой строки цикл не выполняется, возвращается начальный ноль.
Почему отступ индекса важен
Если увеличение index поместить внутрь if, на обычной букве индекс перестанет меняться. Условие цикла останется истинным, и программа зациклится. Переменная count меняется только при совпадении, а index — на каждой итерации.
Символы, а не смысловые теги
Название функции взято из упражнения, но реализация считает решётки буквально. Строка "###" даёт 3, а решётка в номере заказа также учитывается. Не проверяются слова после решётки, уникальность тегов или правила социальной сети.
Проверка после цикла
Return расположен после всего обхода. Если поставить его внутри тела без условия, функция завершится после первого символа и не посчитает остальные. Для строки длины n алгоритм выполняет n проверок символа; он не требует заранее знать позиции совпадений.
Встроенный text.count("#") решает тот же узкий подсчёт короче, но здесь цикл сохранён как предмет упражнения.
Hexlet / Code Basics и участники · Исходный урок и решение · GNU AGPL v3. Алгоритм сохранён; смысл подсчёта уточнён.