Как вывести предпоследний символ строки в питоне
Перейти к содержимому

Как вывести предпоследний символ строки в питоне

  • автор:

Строки

Строка представляет последовательность символов в кодировке Unicode, заключенных в кавычки. Причем для определения строк Python позволяет использовать как одинарные, так и двойные кавычики:

message = "Hello World!" print(message) # Hello World! name = 'Tom' print(name) # Tom

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

text = ("Laudate omnes gentes laudate " "Magnificat in secula ") print(text)

Если же мы хотим определить многострочный текст, то такой текст заключается в тройные двойные или одинарные кавычки:

''' Это комментарий ''' text = '''Laudate omnes gentes laudate Magnificat in secula Et anima mea laudate Magnificat in secula ''' print(text)

При использовани тройных одинарных кавычек не стоит путать их с комментариями: если текст в тройных одинарных кавычках присваивается переменной, то это строка, а не комментарий.

Управляющие последовательности в строке

Строка может содержать ряд специальных символов — управляющих последовательностей или escape-последовательности. Некоторые из них:

  • \ : позволяет добавить внутрь строки слеш
  • \’ : позволяет добавить внутрь строки одинарную кавычку
  • \» : позволяет добавить внутрь строки двойную кавычку
  • \n : осуществляет переход на новую строку
  • \t : добавляет табуляцию (4 отступа)

Используем некоторые последовательностей:

text = "Message:\n\"Hello World\"" print(text)

Консольный вывод программы:

Message: "Hello World"

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

path = "C:\python\name.txt" print(path)

Здесь переменная path содержит некоторый путь к файлу. Однако внутри строки встречаются символы «\n», которые будут интерпретированы как управляющая последовательность. Так, мы получим следующий консольный вывод:

C:\python ame.txt

Чтобы избежать подобной ситуации, перед строкой ставится символ r

path = r"C:\python\name.txt" print(path)

Вставка значений в строку

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

userName = "Tom" userAge = 37 user = f"name: age: " print(user) # name: Tom age: 37

В данном случае на место будет вставляться значение переменной userName. Аналогично на вместо будет вставляться значение переменной userAge.

Обращение к символам строки

И мы можем обратиться к отдельным символам строки по индексу в квадратных скобках:

string = "hello world" c0 = string[0] # h print(c0) c6 = string[6] # w print(c6) c11 = string[11] # ошибка IndexError: string index out of range print(c11)

Индексация начинается с нуля, поэтому первый символ строки будет иметь индекс 0. А если мы попытаемся обратиться к индексу, которого нет в строке, то мы получим исключение IndexError. Например, в случае выше длина строки 11 символов, поэтому ее символы будут иметь индексы от 0 до 10.

Чтобы получить доступ к символам, начиная с конца строки, можно использовать отрицательные индексы. Так, индекс -1 будет представлять последний символ, а -2 — предпоследний символ и так далее:

string = "hello world" c1 = string[-1] # d print(c1) c5 = string[-5] # w print(c5)

При работе с символами следует учитывать, что строка — это неизменяемый (immutable) тип, поэтому если мы попробуем изменить какой-то отдельный символ строки, то мы получим ошибку, как в следующем случае:

string = "hello world" string[1] = "R"

Мы можем только полностью переустановить значение строки, присвоив ей другое значение.

Перебор строки

С помощью цикла for можно перебрать все символы строки:

string = "hello world" for char in string: print(char)

Получение подстроки

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

  • string[:end] : извлекается последовательность символов начиная с 0-го индекса по индекс end (не включая)
  • string[start:end] : извлекается последовательность символов начиная с индекса start по индекс end (не включая)
  • string[start:end:step] : извлекается последовательность символов начиная с индекса start по индекс end (не включая) через шаг step
string = "hello world" # с 0 до 5 индекса sub_string1 = string[:5] print(sub_string1) # hello # со 2 до 5 индекса sub_string2 = string[2:5] print(sub_string2) # llo # с 2 по 9 индекса через один символ sub_string3 = string[2:9:2] print(sub_string3) # lowr

Объединение строк

Одной из самых распространенных операций со строками является их объединение или конкатенация. Для объединения строк применяется операция сложения:

name = "Tom" surname = "Smith" fullname = name + " " + surname print(fullname) # Tom Smith

С объединением двух строк все просто, но что, если нам надо сложить строку и число? В этом случае необходимо привести число к строке с помощью функции str() :

name = "Tom" age = 33 info = "Name: " + name + " Age: " + str(age) print(info) # Name: Tom Age: 33

Повторение строки

Для повторения строки определенное количество раз применяется операция умножения:

print("a" * 3) # aaa print("he" * 4) # hehehehe

Сравнение строк

Особо следует сказать о сравнении строк. Сравнение производится в лексикографическом порядке. При сравнении строк принимается во внимание символы и их регистр. Так, цифровой символ условно меньше, чем любой алфавитный символ. Алфавитный символ в верхнем регистре условно меньше, чем алфавитные символы в нижнем регистре. Например:

str1 = "1a" str2 = "aa" str3 = "Aa" print(str1 > str2) # False, так как первый символ в str1 - цифра print(str2 > str3) # True, так как первый символ в str2 - в нижнем регистре

Поэтому строка «1a» условно меньше, чем строка «aa». Вначале сравнение идет по первому символу. Если начальные символы обоих строк представляют цифры, то меньшей считается меньшая цифра, например, «1a» меньше, чем «2a». Если начальные символы представляют алфавитные символы в одном и том же регистре, то смотрят по алфавиту. Так, «aa» меньше, чем «ba», а «ba» меньше, чем «ca». Если первые символы одинаковые, в расчет берутся вторые символы при их наличии. Зависимость от регистра не всегда желательна, так как по сути мы имеем дело с одинаковыми строками. В этом случае перед сравнением мы можем привести обе строки к одному из регистров. Функция lower() приводит строку к нижнему регистру, а функция upper() — к верхнему.

str1 = "Tom" str2 = "tom" print(str1 == str2) # False - строки не равны print(str1.lower() == str2.lower()) # True

Функции ord и len

Поскольку строка содержит символы Unicode, то с помощью функции ord() мы можем получить числовое значение для символа в кодировке Unicode:

print(ord("A")) # 65

Для получения длины строки можно использовать функцию len() :

string = "hello world" length = len(string) print(length) # 11

Поиск в строке

С помощью выражения term in string можно найти подстроку term в строке string. Если подстрока найдена, то выражение вернет значение True , иначе возвращается значение False :

text = "hello world" exist = "hello" in text print(exist) # True exist = "sword" in text print(exist) # False

Соответственно с помощью операторов not in можно проверить отсутствие подстроки в строке:

text = "hello world" print("hello" not in text) # False print("sword" not in text) # True

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' 

Задачи¶

  1. Получите от пользователя 2 строки, объедините их и выведите экран
  2. Получите от пользователя слово, выведите первую и последнюю букву
  3. Получение от пользователя строку и выведите количество цифр в данный строке
  4. Получите от пользователя строку, в которой будет несколько слов, выведите их количество. Считать что слова отделены друг от друга одним пробелом
  5. Дана строка, содержащая путь к файлу:
C:\Python3\python.exe 

С помощью срезов вывести отдельно имя файла, его расширение, имя каталога и полный путь к каталогу. Пример вывода:

Имя файла: python.exe Расширение: exe Имя каталога: Python3 Полный путь к каталогу: C:\Python3\

Домашнее задание¶

На вход программе подается строка. Необходимо вывести:

  1. Сначала выведите третий символ этой строки.
  2. Во второй строке выведите предпоследний символ этой строки.
  3. третьей строке выведите первые пять символов этой строки.
  4. В четвертой строке выведите всю строку, кроме последних двух символов.
  5. В пятой строке выведите все символы с четными индексами (считая, что индексация начинается с 0, поэтому символы выводятся начиная с первого).
  6. В шестой строке выведите все символы с нечетными индексами, то есть начиная со второго символа строки.
  7. В седьмой строке выведите все символы в обратном порядке.
  8. В восьмой строке выведите все символы строки через один в обратном порядке, начиная с последнего.
  9. В девятой строке выведите длину данной строки.
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.

Методы строк для начинающих

У строк в Python есть множество полезных методов для того, чтобы дать возможность делать со строками различные полезные и нужные действия.

Методы похожи на функции, их тоже можно вызывать и, так же как и функции, они могут возвращать результат своей работы. Отличие же методов в том, что они привязаны к определенному типу данных и, например, методы строк могут быть вызваны только у строк.

Все методы строк можно посмотреть в нашем справочнике , а вот несколько примеров того, как вызывать методы строк.

string = "Hello world!" print(string.lower()) # hello world! print(string.upper()) # HELLO WORLD!  

Начинающему программисту важно помнить, что методы не меняют исходную строку. Строки в Python вообще нельзя изменить. Если вы хотите поменять все ее символы, например, на символы нижнего регистра, нужно присвоить строке новое значение

string = "Hello world!" string = string.lower()  

Индексы строк ¶

Бывает так, что иногда появляется необходимость выбирать отдельные символы из строки. В Python для этого необходимо использовать квадратные скобки. В таблице ниже приведены примеры получения символа строки по индексу строки Python, помещенной в переменную string .

Код Результат Описание
s[0] P Первый символ
s[1] y Второй символ
s[-1] n Последний символ
s[-2] o Предпоследний символ

Как вы видите, необходимо учитывать, что номером индекса первого символа будет [0] Отрицательный индекс будет отсчитывать символы с конца строки. Распространенная ошибка: предположим, что мы пытаемся задать индекс s[12] . Но в примере выше мы имеем всего шесть элементов строки, и логично что Python выдаст ошибку следующего содержания:

IndexError: string index out of range  

Срезы строк ¶

Срез используется для выделения части строки. Он состоит из индекса и диапазона. Ниже расположены несколько примеров со строкой

string = 'абвгдежзик'  
0 1 2 3 4 5 6 7 8 9  
а б в г д е ж з и к  
Фрагмент кода Результат Описание
string[2: 5] вгд Символы с индексом 2, 3, 4
string[: 5] абвгд Первые пять символов
string[5:] ежзик Символы, начиная с индекса 5 и до конца
string[-2:] ик Последние два символа
string[: ] абвгдежзик Вся строка
string[1 : 7 : 2] бге Со второго по шестой символы, через один
string[ : : -1 ] кизжедгвба Обратный шаг, строка наоборот

Базовая структура среза выглядит следующим образом: Строка [начальный\_символ : конечный_символ + 1]

Срезы не включают явное расположение окончания строки. Например, в приведенном выше примере string[2:5] , Python выведет символы с индексами 2, 3 и 4, но не символ с индексом 5.

Мы можем оставить, вместо индекса начала или окончания строки, пустоту. Пустота на месте индекса начала будет по умолчанию равна нулю. Итак, string[:5] выведет первые пять символов строки string. А в случае string[5:] , Python покажет символы, начиная с индекса 5 и до конца строки. Если же использовать отрицательные индексы, мы получим символы с конца строки. Например, string[-2:] — это последние два символа.

Также существует необязательный третий аргумент, который указывает на шаг среза строки. Например, string[1:7:2] берет каждый второй символ из строки с индексом 1, 3 и 5.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *