Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Обход строк Основы языка Python

Циклы подходят не только для обработки чисел, но и при работе со строками. В первую очередь благодаря возможности получить конкретный символ по его индексу. Ниже пример кода, который распечатывает буквы каждого слова на отдельной строке:

def print_name_by_symbol(name):
    i = 0
    # Такая проверка будет выполняться до конца строки
    # включая последний символ. Его индекс `length - 1`.
    while i < len(name):
        # Обращаемся к символу по индексу
        print(name[i])
        i += 1

name = 'Arya'
print_name_by_symbol(name)
# => 'A'
# => 'r'
# => 'y'
# => 'a'

Самое главное в этом коде, поставить правильное условие в while. Это можно сделать сразу двумя способами: i < len(name) или i <= len(name) - 1. Оба способа приводят к одному результату.

Формирование строк в циклах

Ещё одно использование циклов – формирование строк. Подобная задача нередко встречается в веб-программировании. Она сводится к обычной агрегации с применением интерполяции или конкатенации.

Переворот строки (запись её задом-наперёд) — простейшая алгоритмическая задача, которую иногда задают на собеседованиях. Правильный способ перевернуть строку — использовать функцию из стандартной библиотеки. Но в целях обучения полезно реализовать её самостоятельно. Один из алгоритмов выглядит так: строим новую строку, перебирая символы исходной строки в обратном порядке.

def reverse_string(string):
    index = len(string) - 1
    reversed_string = ''

    while index >= 0:
        current_char = string[index]
        reversed_string = reversed_string + current_char
        # То же самое через интерполяцию
        # reversed_string = f'{reversed_string}{current_char}'
        index = index - 1

    return reversed_string

reverse_string('Game Of Thrones')  # 'senorhT fO emaG'
# Проверка нейтрального элемента
reverse_string('')  # ''

Разберём функцию построчно:

  • index = len(string) - 1 — записываем в новую переменную индекс последнего символа строки (напомним, что индексы начинаются с нуля).
  • reversed_string = '' — инициализируем строку, куда будем записывать результат.
  • while index >= 0: — условие: повторяем тело цикла, пока текущий индекс не дошёл до 0, то есть до первого символа.
  • current_char = string[index] — берём из строки символ по текущему индексу.
  • reversed_string = reversed_string + current_char — записываем в строку-результат новое значение: текущая строка-результат + новый символ.
  • index = index - 1 — обновляем счётчик
  • return reversed_string — когда цикл завершился, возвращаем строку-результат.

Обязательно скопируйте эту функцию в https://repl.it/languages/python3 и поэкспериментируйте с ней.

Работая со строками, программисты часто допускают ошибку «выход за границы строки». При неправильном подборе начального значения счётчика или ошибке в предикате цикла может получиться ситуация, при которой идёт обращение к несуществующему символу. Особенно часто забывают о том, что индекс последнего элемента всегда меньше на единицу размера строки. В строках начальный индекс равен 0, а значит индекс последнего элемента — len(str) - 1 (длина минус 1).


Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты.

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно.

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Даю согласие на обработку персональных данных, соглашаюсь с «Политикой конфиденциальности» и «Условиями оказания услуг»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы

С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.

Иконка программы Python-разработчик
Профессия
Разработка веб-приложений на Django
11 августа 10 месяцев

Используйте Хекслет по максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Даю согласие на обработку персональных данных, соглашаюсь с «Политикой конфиденциальности» и «Условиями оказания услуг»