DamiRocK

Python: условие внутри while и подсчёт символов #

Считаем каждое вхождение решётки в строке, обновляя индекс независимо от совпадения. Не подменяем подсчёт символов полноценным выделением хештегов.

Два независимых решения

Условие 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. Алгоритм сохранён; смысл подсчёта уточнён.

Reading preferences

Appearance
Contrast
More options

Saved only in this browser. Your device’s reduced-motion setting is always respected. Browser zoom works throughout the site.