Циклы подходят не только для обработки чисел, но и при работе со строками. В первую очередь благодаря возможности получить конкретный символ по его индексу. Ниже пример кода, который распечатывает буквы каждого слова на отдельной строке:
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).
Вам ответят команда поддержки Хекслета или другие студенты.
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно.
Наши выпускники работают в компаниях:
С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.
Зарегистрируйтесь или войдите в свой аккаунт