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 по индексам, соедините их и выведите на экран слово grip.
Ваше упражнение проверяется по этим тестам
import importlib
def test(capsys):
expected = "grip"
expect_output(capsys, expected)
def expect_output(capsys, expected):
importlib.import_module('solution')
out, _err = capsys.readouterr()
actual = out.strip('\n')
with capsys.disabled():
print('\n')
print(out)
assert actual == expectedРешение учителя откроется через:
20:00
