Python: Извлечение символов из строки
Иногда нужно получить один символ из строки. Например, если сайт знает имя и фамилию пользователя и нужно вывести их в сокращенном формате вида A. Ivanov. Для этого потребуется взять первую букву имени.

В Python для доступа к символам строки используют индексацию. Индексация означает, что у каждого символа в строке есть свой номер, то есть индекс. Индексация начинается с нуля: у первого символа индекс 0, у второго 1 и так далее. Представим, что у нас есть строка:
first_name = 'Alexander'Чтобы получить первую букву, указываем ее позицию (индекс) в квадратных скобках:
print(first_name[0]) # => AИндексы в Python (и во многих языках) начинаются с нуля:
Символ A l e x a n d e r
Индекс 0 1 2 3 4 5 6 7 8Длина строки Alexander равна 9, поэтому индекс последнего символа равен 8, то есть 9 - 1.
Чтобы получить, например, последний символ, можно написать:
print(first_name[8]) # => rЕсли изменится длина строки, то последний элемент тоже сдвинется и придется указывать новый индекс, по которому расположен этот символ.
А если выйти за границы строки, то мы получим ошибку:
print(first_name[9])
# IndexError: string index out of rangeПоэтому в программировании принято проверять длину строки и обращаться к ее символам только если это безопасно. Мы до этого дойдем в будущих уроках.
Укороченное извлечение с конца
Для получения элементов с конца лучше пользоваться отрицательными индексами. В таком случае отсчет начинается с конца.
print(first_name[-1]) # => r, последний символ
print(first_name[-2]) # => e, предпоследний символСтрока: 'H' 'e' 'x' 'l' 'e' 't'
Индекс: 0 1 2 3 4 5
С конца: -6 -5 -4 -3 -2 -1Отрицательные индексы работают так:
- -1 соответствует последнему символу
- -2 соответствует предпоследнему
- и так далее
Это удобно и безопасно, потому что работает правильно даже если строка меняет свою длину.
Индекс можно хранить в переменной:
index = 0
print(first_name[index]) # => AТакой подход полезен, когда индекс вычисляется где-то в коде, а потом используется для доступа к нужному символу.
Спецсимволы
При индексации учитываются обычные буквы, знаки и спецсимволы. Все они занимают позицию в строке и имеют свой индекс, даже если их "не видно" на экране.
Например, в строке \nyou первый символ представляет собой \n (перенос строки), а под индексом 1 уже идет буква y. Поэтому обращение magic[1] вернет именно y.
Подумайте: что выведет этот код?
magic = '\nyou'
print(magic[1]) # => ?Вывод будет:
yЗадание
В переменной text хранится строка Python programming.
Извлеките из нее символы по индексам, соедините их и выведите на экран слово grip.
Команда проекта находится в телеграм-сообществе. Там можно задать любой вопрос и повлиять на проект
Если вы зашли в тупик, то самое время поговорить с нашим асситентом Тота во вкладке "ИИ-помощник":
Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.
Это нормально 🙆, в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи. В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.
Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в обратной связи нашего сообщества
Ваше упражнение проверяется по этим тестам
import runpy
def test(capsys):
expected = "grip"
runpy.run_module('solution')
out, _ = capsys.readouterr()
assert out.strip() == expectedРешение учителя откроется через:
20:00
