Python: Извлечение символов из строки
Иногда нужно получить один символ из строки. Например, если сайт знает имя и фамилию пользователя, и в какой-то момент требуется вывести эту информацию в формате A. Ivanov. Для этого компьютеру потребуется взять первый символ из имени. В Python есть подходящая операция, которую мы изучим сегодня.
Представим, что из имени Alexander нужно вывести на экран только первую букву. Это выглядит так:
first_name = 'Alexander' print(first_name[0]) # => A
Операция с квадратными скобками с цифрой извлекает элемент по индексу — позицией символа внутри строки. Индексы начинаются с 0 почти во всех языках программирования. Поэтому, чтобы получить первый символ, нужно указать индекс 0 . Индекс последнего элемента равен длине строки минус единица. Обращение к индексу за пределами строки приведет к ошибке:
# Длина строки 9, поэтому последний индекс — это 8 first_name = 'Alexander' print(first_name[8]) # => r print(first_name[9]) IndexError: string index out of range
Чтобы лучше закрепить новые знания, посмотрите на код ниже и подумайте, что он выдаст:
magic = '\nyou' print(magic[1]) # => ?
Бывают и нестандартные ситуации. Например, нужно вывести элемент из конца, причем из выражения с большим количеством символов. В этом случае можно воспользоваться отрицательным индексом, который облегчит работу программиста.
Допустимо использовать отрицательные индексы. В этом случае идет обращение к символам, начиная с конца строки. -1 — индекс последнего символа, -2 — предпоследнего и так далее. В отличие от прямой индексации, обратный отсчет идет от -1 :
first_name = 'Alexander' print(first_name[-1]) # => r
Индексом может быть не только конкретное число, но и значение переменной. Посмотрите на пример ниже. Здесь мы записали индекс внутри квадратных скобок не числом, а переменной. Такой код приведет к тому же результату — выводу на экран символа A:
first_name = 'Alexander' index = 0 print(first_name[index]) # => A
Чтобы выводить из выражения лишь некоторые символы, не нужно писать большое количество строк кода — достаточно извлечь элемент с помощью индекса. Также можно пользоваться отрицательным индексом, чтобы легче выводить символы с конца выражения. Далее разберемся, как с помощью этих знаний можно извлекать подстроки из строки.
Задание
Выведите на экран последний символ строки, находящейся в переменной name
Упражнение не проходит проверку — что делать?
Если вы зашли в тупик, то самое время задать вопрос в «Обсуждениях». Как правильно задать вопрос:
- Обязательно приложите вывод тестов, без него практически невозможно понять что не так, даже если вы покажете свой код. Программисты плохо исполняют код в голове, но по полученной ошибке почти всегда понятно, куда смотреть.
В моей среде код работает, а здесь нет
Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.
Мой код отличается от решения учителя
Это нормально , в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи.
В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.
Прочитал урок — ничего не понятно
Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в «Обсуждениях». Идеально, если вы сформулируете непонятные моменты в виде вопросов. Обычно нам нужно несколько дней для внесения правок.
Кстати, вы тоже можете участвовать в улучшении курсов: внизу есть ссылка на исходный код уроков, который можно править прямо из браузера.
Определения
- Индекс — позиция символа внутри строки.
Строки¶
Самый распространённый способ создания строк — с помощью двойных кавычек:
s = "Hello" print(s)
Однако есть несколько других способов, которые имееются в языке:
s = 'Hello' s = """Hello""" s = '''Hello'''
Все 3 способа записи приводят к одному результату — созданию строки hello
Разные способы записи нужны для удобного создания строк с специальными символами:
q = "What's your name" t = 'He said: "Bond, James Bond"'
Если бы в языке не было разных способов создания данных строк, то пришлось бы использовать экранирование:
t = "He said: \", James Bond\""
Некоторые специальные символы, которые могут находиться внутри строки:
Тройные кавычки используются для создания больших строк:
s = """ Здесь может быть написан текст, занимающий любое количество строк """
Операции со строками¶
Получение длины строки:
>>> len("Hello") 5
Конкатенация (объединение) строк:
>>> "Hello " + "World" 'Hello World'
Повторение строки n раз:
>>> "python " * 3 'python python python '
Обращение к символу i строки s . Индексация начинается с нуля. Индексы могут быть отрицательными, тогда отсчет ведется с конца строки:
>>> s = 'abcdef' >>> s[0] 'a' >>> s[5] 'f' >>> s[-1] 'f' >>> s[-2] 'e'
s[begin:end:step]
Получение среза строки от позиции begin до позиции end с шагом step . Любой параметр может быть пропущен:
>>> s = "abcdef" >>> s[1:] 'bcdef' >>> s[:-1] 'abcde' >>> s[1:-1] 'bcde' >>> s[1::2] 'bdf' >>> s[::2] 'ace' >>> s[::-2] 'fdb'
Задачи¶
- Получите от пользователя 2 строки, объедините их и выведите экран
- Получите от пользователя слово, выведите первую и последнюю букву
- Получение от пользователя строку и выведите количество цифр в данный строке
- Получите от пользователя строку, в которой будет несколько слов, выведите их количество. Считать что слова отделены друг от друга одним пробелом
- Дана строка, содержащая путь к файлу:
C:\Python3\python.exe
С помощью срезов вывести отдельно имя файла, его расширение, имя каталога и полный путь к каталогу. Пример вывода:
Имя файла: python.exe Расширение: exe Имя каталога: Python3 Полный путь к каталогу: C:\Python3\
Домашнее задание¶
На вход программе подается строка. Необходимо вывести:
- Сначала выведите третий символ этой строки.
- Во второй строке выведите предпоследний символ этой строки.
- третьей строке выведите первые пять символов этой строки.
- В четвертой строке выведите всю строку, кроме последних двух символов.
- В пятой строке выведите все символы с четными индексами (считая, что индексация начинается с 0, поэтому символы выводятся начиная с первого).
- В шестой строке выведите все символы с нечетными индексами, то есть начиная со второго символа строки.
- В седьмой строке выведите все символы в обратном порядке.
- В восьмой строке выведите все символы строки через один в обратном порядке, начиная с последнего.
- В девятой строке выведите длину данной строки.
Input: Abrakadabra Output: r r Abrak Abrakadab Arkdba baaar arbadakarbA abdkrA 11
© Copyright Revision d00c0df4 .
Built with Sphinx using a theme provided by Read the Docs.
Read the Docs v: latest
Versions latest Downloads html On Read the Docs Project Home Builds Free document hosting provided by Read the Docs.
Как вывести предпоследний символ строки в питоне
— tags: Python — # Практика 8. Строковые величины В случае медленной работы сайта используйте [vpn для Chrome](https://chrome.google.com/webstore/detail/touch-vpn-secure-and-unli/bihmplhobchoageeokmgbdihknkjbknd/related?hl=ru) или браузер [Opera](https://www.opera.com/uk/browsers) с включенным [VPN](https://help.opera.com/en/latest/security-and-privacy/#VPN). ## Базовый уровень ### [Задача 1. Делаем срезы](https://pythontutor.ru/lessons/str/problems/slices/) Дана строка. Сначала выведите третий символ этой строки. Во второй строке выведите предпоследний символ этой строки. В третьей строке выведите первые пять символов этой строки. В четвертой строке выведите всю строку, кроме последних двух символов. В пятой строке выведите все символы с четными индексами (считая, что индексация начинается с 0, поэтому символы выводятся начиная с первого). В шестой строке выведите все символы с нечетными индексами, то есть начиная со второго символа строки. В седьмой строке выведите все символы в обратном порядке. В восьмой строке выведите все символы строки через один в обратном порядке, начиная с последнего. В девятой строке выведите длину данной строки. . spoiler Решение См. пример в [лекции 4](/@YaRo/python-topic08#/2/10)  . ### [Задача 2. Замена подстроки](https://pythontutor.ru/lessons/str/problems/replace_substring/) Дана строка. Замените в этой строке все цифры `1` на слово `one`. . spoiler Решение Воспользоваться [методом replace](/@YaRo/python-topic08#/3/5) для замены `1` на `one`  . ### [Задача 3. Удаление символа](https://pythontutor.ru/lessons/str/problems/delete_char/) Дана строка. Удалите из этой строки все символы `@`. . spoiler Решение Воспользоваться [методом replace](/@YaRo/python-topic08#/3/5) на пустой символ (`»`)  . ### [Задача 4. Количество слов](https://pythontutor.ru/lessons/str/problems/num_words/) Дана строка, состоящая из слов, разделенных пробелами. Определите, сколько в ней слов. Используйте для решения задачи метод `count`. . spoiler Решение Количество слов в строке на один больше, чем количество пробелов (используйте [метод count](/@YaRo/python-topic08#/3/7))  . ## Средний уровень ### [Задача 5. Переставить два слова](https://pythontutor.ru/lessons/str/problems/swap_two_words/) Дана строка, состоящая ровно из двух слов, разделенных пробелом. Переставьте эти слова местами. Результат запишите в строку и выведите получившуюся строку. При решении этой задачи не стоит пользоваться циклами и инструкцией `if`. . spoiler Решение Найти позицию пробела [методом find](/@YaRo/python-topic08#/3/2) и вывести через пробел два среза исходной строки — сначала после пробела, а потом перед  . ### [Задача 6. Удаление фрагмента](https://pythontutor.ru/lessons/str/problems/delete_chunk/) Дана строка, в которой буква `h` встречается минимум два раза. Удалите из этой строки первое и последнее вхождение буквы `h`, а также все символы, находящиеся между ними. . spoiler Решение Найти позиции первого и последнего вхождения `’h’` ([методом rfind](/@YaRo/python-topic08#/3/4)), а затем вывести срезы до первого и после последнего вхождения `’h’`  . ### [Задача 7. Замена внутри фрагмента](https://pythontutor.ru/lessons/str/problems/replace_in_chunk/) Дана строка. Замените в этой строке все появления буквы `h` на букву `H`, кроме первого и последнего вхождения. . spoiler Решение Найти позиции первого и последнего вхождения `’h’`. Затем вывести срезы до этих позиций, а между ними срез, в котором заменить буквы `h` на букву `H`  . ### [Задача 8. Две половинки](https://pythontutor.ru/lessons/str/problems/two_halves/) Дана строка. Разрежьте ее на две равные части (если длина строки — четная, а если длина строки нечетная, то длина первой части должна быть на один символ больше). Переставьте эти две части местами, результат запишите в новую строку и выведите на экран. При решении этой задачи не стоит пользоваться инструкцией `if`. . spoiler Решение Найти средину строки с помощью деления длины строки нацело на 2 + остаток от деления на 2, затем вывести два среза — после и до средины  . ## Повышенный уровень ### [Задача 9. Первое и последнее вхождения](https://pythontutor.ru/lessons/str/problems/first_and_last_occurences/) Дана строка. Если в этой строке буква `f` встречается только один раз, выведите её индекс. Если она встречается два и более раз, выведите индекс её первого и последнего появления. Если буква `f` в данной строке не встречается, ничего не выводите. При решении этой задачи не стоит использовать циклы. . spoiler Решение . ### [Задача 10. Второе вхождение](https://pythontutor.ru/lessons/str/problems/second_occurence/) Дана строка. Найдите в этой строке второе вхождение буквы `f`, и выведите индекс этого вхождения. Если буква `f` в данной строке встречается только один раз, выведите число `-1`, а если не встречается ни разу, выведите число `-2`. . spoiler Решение . ### [Задача 11. Обращение фрагмента](https://pythontutor.ru/lessons/str/problems/reverse_chunk/) Дана строка, в которой буква `h` встречается как минимум два раза. Разверните последовательность символов, заключенную между первым и последним появлением буквы `h`, в противоположном порядке. . spoiler Решение . ### [Задача 12. Удалить каждый третий символ](https://pythontutor.ru/lessons/str/problems/delete_every_third_char/) Дана строка. Удалите из нее все символы, чьи индексы делятся на 3. — (c) Яценко Р.Н., 2018-2022 [Учебный центр компьютерных технологий «Кит»](http://kit.kh.ua/) !-->
Last changed by
Add a comment
Read more
Турнир _Условный оператор_
Задача A: Знак числа . spoiler Решение 0: print(number ** 2) else: print(-number) «` —>
Практика 6. Умовний оператор
© Яценко Р.М., 2018-2023
Практика 5. Линейные программы
В случае медленной работы сайта используйте vpn для Chrome или браузер Opera с включенным VPN.
Практика 3. Об’єкти та типи даних. Введення-виведення
© Яценко Р.М., 2018-2023
Основы работы со строками¶
Строковый литерал может быть записан в одинарных или двойных кавычнах:
>>> "Hello" 'Hello' >>> 'World' 'World'
Разницы между этими двумя формами записи нет. Записывать строки в двойных кавычках удобно в случаях, когда в тексте содержится апостроф:
>>> "What's your name?" "What's your name?"
Запись в апострофах удобна, если в тексте есть кавычки:
>>> 'He said: "Bond, James Bond."' 'He said: "Bond, James Bond."'
Иначе интерпретатор будет считать ближайшие кавычку или апостроф закрывающими, и их нужно экранировать:
>>> 'What\'s your name?' "What's your name?" >>> "He said: \"Bond, James Bond.\"" 'He said: "Bond, James Bond."'
Внутри строки могут быть управляющие последовательности. Некоторые из них:
>>> print("Hello\nWorld") Hello World >>> print("1\t2\n30\t4") 1 2 30 4
В некоторых случаях экранирование обратного слеша может быть неудобно. Можно воспользоваться литералом сырых строк:
>>> print(r"Hello\nWorld") Hello\nWorld
Операции со строками¶
Получение длины строки:
>>> len("Hello") 5
>>> "Hello " + "World" 'Hello World'
Повторение строки n раз:
>>> "python " * 3 'python python python '
Обращение к символу i строки s . Индексация начинается с нуля. Индексы могут быть отрицательными, тогда отсчет ведется с конца строки:
>>> s = 'abcdef' >>> s[0] 'a' >>> s[5] 'f' >>> s[-1] 'f' >>> s[-2] 'e'
s[begin:end:step]
Получение среза строки от позиции begin до позиции end с шагом step . Любой параметр может быть пропущен:
>>> s = "abcdef" >>> s[1:] 'bcdef' >>> s[:-1] 'abcde' >>> s[1:-1] 'bcde' >>> s[1::2] 'bdf' >>> s[::2] 'ace' >>> s[::-2] 'fdb'
Задачи¶
- Пользователь вводит слово. Подсчитать количество символов в нем.
- Пользователь вводит слово. Вывести его первую и последнюю буквы.
- Пользователь вводит число. Вывести соответствующее количество кроликов. Пример:
Rabbits: 1 (\_/) =(^.^)= (“)_(“) Rabbits: 3 (\_/) (\_/) (\_/) =(^.^)= =(^.^)= =(^.^)= (“)_(“) (“)_(“) (“)_(“)
C:\Python3\python.exe
С помощью срезов вывести отдельно имя файла, его расширение, имя каталога и полный путь к каталогу. Пример вывода:
Имя файла: python.exe Расширение: exe Имя каталога: Python3 Полный путь к каталогу: C:\Python3\
Chapter 1: Мальчик, который выжил Page: 5 Chapter 2: Косой переулок Page: 40 Chapter 3: Человек с двумя лицами Page: 500
Мальчик, который выжил 5 Косой переулок 40 Человек с двумя лицами 500
Дополнительные задачи¶
Разработать приложение, которое запрашивает у пользователя стоимость заказа из трех пунктов и выводит чек таким образом, что все стоимости выводятся в крайнем правом столбце. Ширину чека принять за 30 символов. Пример:
Салат: 60 Первое: 45 Второе: 120 Ваш счет Салат: 60.0 Первое: 45.0 Второе: 120.0 ------------------------------ Итого: 225.0
Домашнее задание¶
На вход программе подается строка. Необходимо вывести:
- Сначала выведите третий символ этой строки.
- Во второй строке выведите предпоследний символ этой строки.
- третьей строке выведите первые пять символов этой строки.
- В четвертой строке выведите всю строку, кроме последних двух символов.
- В пятой строке выведите все символы с четными индексами (считая, что индексация начинается с 0, поэтому символы выводятся начиная с первого).
- В шестой строке выведите все символы с нечетными индексами, то есть начиная со второго символа строки.
- В седьмой строке выведите все символы в обратном порядке.
- В восьмой строке выведите все символы строки через один в обратном порядке, начиная с последнего.
- В девятой строке выведите длину данной строки.
Input: Abrakadabra Output: r r Abrak Abrakadab Arkdba baaar arbadakarbA abdkrA 11
© Copyright Revision d00c0df4 .
Built with Sphinx using a theme provided by Read the Docs.
Read the Docs v: latest
Versions latest Downloads html On Read the Docs Project Home Builds Free document hosting provided by Read the Docs.
