Как поменять местами буквы в строке python
Перейти к содержимому

Как поменять местами буквы в строке python

  • автор:

Строки

Строка считывается со стандартного ввода функцией input() . Напомним, что для двух строк определа операция сложения (конкатенации), также определена операция умножения строки на число.

Строка состоит из последовательности символов. Узнать количество символов (длину строки) можно при помощи функции len :

>>> S = 'Hello' >>> print(len(S)) 5

Срезы (slices)

Срез (slice) — извлечение из данной строки одного символа или некоторого фрагмента подстроки или подпоследовательности.

Есть три формы срезов. Самая простая форма среза: взятие одного символа строки, а именно, S[i] — это срез, состоящий из одного символа, который имеет номер i , при этом считая, что нумерация начинается с числа 0. То есть если , то , , , , .

Номера символов в строке (а также в других структурах данных: списках, кортежах) называются индексом.

Если указать отрицательное значение индекса, то номер будет отсчитываться с конца, начиная с номера -1 . То есть , , , , .

Или в виде таблицы:

Строка S H e l l o
Индекс S[0] S[1] S[2] S[3] S[4]
Индекс S[-5] S[-4] S[-3] S[-2] S[-1]

Если же номер символа в срезе строки S больше либо равен len(S) , или меньше, чем -len(S) , то при обращении к этому символу строки произойдет ошибка IndexError: string index out of range .

Срез с двумя параметрами: S[a:b] возвращает подстроку из b-a символов, начиная с символа c индексом a , то есть до символа с индексом b , не включая его. Например, S[1:4]==’ell’ , то же самое получится если написать S[-4:-1] . Можно использовать как положительные, так и отрицательные индексы в одном срезе, например, S[1:-1] — это строка без первого и последнего символа (срез начинается с символа с индексом 1 и заканчиватеся индексом -1, не включая его).

При использовании такой формы среза ошибки IndexError никогда не возникает. Например, срез S[1:5] вернет строку ‘ello’ , таким же будет результат, если сделать второй индекс очень большим, например, S[1:100] (если в строке не более 100 символов).

Если опустить второй параметр (но поставить двоеточие), то срез берется до конца строки. Например, чтобы удалить из строки первый символ (его индекс равен 0, то есть взять срез, начиная с символа с индексом 1), то можно взять срез S[1:] , аналогично если опустиить первый параметр, то срез берется от начала строки. То есть удалить из строки последний символ можно при помощи среза S[:-1] . Срез S[:] совпадает с самой строкой S .

Если задать срез с тремя параметрами S[a:b:d] , то третий параметр задает шаг, как в случае с функцией range , то есть будут взяты символы с индексами a , a+d , a+2*d и т.д. При задании значения третьего параметра, равному 2, в срез попадет кажый второй символ, а если взять значение среза, равное -1 , то символы будут идти в обратном порядке.

Методы

Метод — это функция, применяемая к объекту, в данном случае — к строке. Метод вызывается в виде Имя_объекта.Имя_метода(параметры) . Например, S.find(«e») — это применение к строке S метода find с одним параметром «e» .

Метод find и rfind

Метод find находит в данной строке (к которой применяется метод) данную подстроку (которая передается в качестве параметра). Функция возвращает индекс первого вхождения искомой подстроки. Если же подстрока не найдена, то метод возвращает значение -1. Например:

>>> S = 'Hello' >>> print(S.find('e')) 1 >>> print(S.find('ll')) 2 >>> print(S.find('L')) -1

Аналогично, метод rfind возвращает индекс последнего вхождения данной строки (“поиск справа”).

>>> S = 'Hello' >>> print(S.find('l')) 2 >>> print(S.rfind('l')) 3

Если вызвать метод find с тремя параметрами S.find(T, a, b) , то поиск будет осуществляться в срезе S[a:b] . Если указать только два параметра S.find(T, a) , то поиск будет осуществляться в срезе S[a:] , то есть начиная с символа с индексом a и до конца строки. Метод S.find(T, a, b) возращает индекс в строке S , а не индекс относительно начала среза.

Метод replace

Метод replace заменяет все вхождения одной строки на другую. Формат: S.replace(old, new) — заменить в строке S все вхождения подстроки old на подстроку new . Пример:

>>> 'Hello'.replace('l', 'L') 'HeLLo'

Если методу replace задать еще один параметр: S.replace(old, new, count) , то заменены будут не все вхождения, а только не больше, чем первые count из них.

>>> 'Abrakadabra'.replace('a', 'A', 2) 'AbrAkAdabra'

Метод count

Подсчитывает количество вхождений одной строки в другую строку. Простейшая форма вызова S.count(T) возвращает число вхождений строки T внутри строки S . При этом подсчитываются только непересекающиеся вхождения, например:

>>> 'Abracadabra'.count('a') 4 >>> ('a' * 100000).count('aa') 50000

При указании трех параметров , будет выполнен подсчет числа вхождений строки T в срез S[a:b] .

Упражнения

A: Делаем срезы

Сначала выведите третий символ этой строки.

Во второй строке выведите предпоследний символ этой строки.

В третьей строке выведите первые пять символов этой строки.

В четвертой строке выведите всю строку, кроме последних двух символов.

В пятой строке выведите все символы с четными индексами (считая, что индексация начинается с 0, поэтому символы выводятся начиная с первого).

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

В седьмой строке выведите все символы в обратном порядке.

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

Абракадабра
р
р
Абрак
Абракадаб
Аркдба
бааар
арбадакарбА
абдкрА
11

B: Количество слов

Hello world

C: Две половинки

Дана строка. Разрежьте ее на две равные части (если длина строки — четная, а если длина строки нечетная, то длина первой части должна быть на один символ больше). Переставьте эти две части местами, результат запишите в новую строку и выведите на экран.

Hello
loHel

D: Переставить два слова

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

Hello world
world Hello

E: Первое и последнее вхождение

Дана строка. Если в этом числе буква f встречается только один раз, выведите её индекс. Если она встречается два и более раз, выведите индекс её первого и последнего появления. Если буква f в данной строке не встречается, ничего не выводите.

comfort
office

F: Второе вхождение

Дана строка. Найдите в этой строке второе вхождение буквы f , и выведите индекс этого вхождения. Если буква f в данной строке встречается только один раз, выведите число -1 , а если не встречается ни разу, выведите число -2 .

comfort
coffee

G: Удаление фрагмента

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

Методом replace пользоваться нельзя.

In the hole in the ground there lived a hobbit
In tobbit

H: Обращение фрагмента

Дана строка, в которой буква h встречается как минимум два раза. Разверните последовательность символов, заключенную между первым и последнием появлением буквы h , в противоположном порядке.

Методом replace пользоваться нельзя.

In the hole in the ground there lived a hobbit
In th a devil ereht dnuorg eht ni eloh ehobbit

I: Дублирование фрагмента

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

Методом replace пользоваться нельзя.

In the hole in the ground there lived a hobbit
In the hole in the ground there lived a e hole in the ground there lived a hobbit

J: Замена подстроки

one+one=2

K: Удаление символа

Bilbo.Baggins@bagend.hobbiton.shire.me
Bilbo.Bagginsbagend.hobbiton.shire.me

L: Замена внутри фрагмента

In the hole in the ground there lived a hobbit
In the Hole in tHe ground tHere lived a hobbit

Строки

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

В Python нет символьного типа – типа данных, объектами которого являются одиночные символы. Однако язык позволяет рассматривать строки как объекты, состоящие из подстрок длинной в один и более символов. При этом, в отличие от списков, строки не принято относить к структурам данных. Видимо потому, что структуры данных состоят из более простых типов данных, а для строк в Python нет более простого (символьного) типа.

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

>>> s = "Hello, World!" >>> s[0] 'H' >>> s[7:] 'World!' >>> s[::2] 'Hlo ol!'

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

Важным отличием от списков является неизменяемость строк в Python. Нельзя перезаписать какой-то отдельный символ или срез в строке:

>>> s[-1] = '.' Traceback (most recent call last): File "", line 1, in TypeError: 'str' object does not support item assignment

Интерпретатор сообщает, что объект типа str не поддерживает присвоение элементам.

Если требуется изменить строку, то можно создать новую из срезов старой:

>>> s = s[0:-1] + '.' >>> s 'Hello, World.'

В примере берется срез из исходной строки, соединяется с другой строкой. Получается новая строка, которая присваивается переменной s . Ее старое значение при этом теряется.

Методы строк

В Python для строк есть множество методов. Посмотреть их можно по команде dir(str) , получить информацию по каждому – help(str.имя_метода) . Рассмотрим наиболее интересные из них.

Методы split() и join()

Метод split() позволяет разбить строку по пробелам. В результате получается список слов. Если пользователь вводит в одной строке ряд слов или чисел, каждое из которых должно в программе обрабатываться отдельно, то без split() не обойтись.

>>> s = input() red blue orange white >>> s 'red blue orange white' >>> sl = s.split() >>> sl ['red', 'blue', 'orange', 'white'] >>> s 'red blue orange white'

Список, возвращенный методом split() , мы могли бы присвоить той же переменной s , то есть s = s.split() . Тогда исходная строка была бы потеряна. Если она не нужна, то лучше не вводить дополнительную переменную.

Метод split() может принимать необязательный аргумент-строку, указывающей по какому символу или подстроке следует выполнить разделение:

>>> s.split('e') ['r', 'd blu', ' orang', ' whit', ''] >>> '40030023'.split('00') ['4', '3', '23']

Метод строк join() выполняет обратное действие. Он формирует из списка строку. Поскольку это метод строки, то впереди ставится строка-разделитель, а в скобках — передается список:

>>> '-'.join(sl) 'red-blue-orange-white'

Если разделитель не нужен, то метод применяется к пустой строке:

>>> ''.join(sl) 'redblueorangewhite'

Методы find() и replace()

Данные методы строк работают с подстроками. Методы find() ищет подстроку в строке и возвращает индекс первого элемента найденной подстроки. Если подстрока не найдена, то возвращает -1.

>>> s 'red blue orange white' >>> s.find('blue') 4 >>> s.find('green') -1

Поиск может производиться не во всей строке, а лишь на каком-то ее отрезке. В этом случае указывается первый и последний индексы отрезка. Если последний не указан, то ищется до конца строки:

>>> letters = 'ABCDACFDA' >>> letters.find('A', 3) 4 >>> letters.find('DA', 0, 6) 3

Здесь мы ищем с третьего индекса и до конца, а также с первого и до шестого. Обратите внимания, что метод find() возвращает только первое вхождение. Так выражение letters.find(‘A’, 3) последнюю букву ‘A’ не находит, так как ‘A’ ему уже встретилась под индексом 4.

Метод replace() заменяет одну подстроку на другую:

>>> letters.replace('DA', 'NET') 'ABCNETCFNET'

Исходная строка, конечно, не меняется:

>>> letters 'ABCDACFDA'

Так что если результат надо сохранить, то его надо присвоить переменной:

>>> new_letters = letters.replace('DA', 'NET') >>> new_letters 'ABCNETCFNET'

Метод format()

Строковый метод format() уже упоминался при рассмотрении вывода на экран с помощью функции print() :

>>> print("This is a . It's .".format("ball", "red")) This is a ball. It's red.

Однако к print() он никакого отношения не имеет, а применяется к строкам. Лишь потом заново сформированная строка передается в функцию вывода.

Возможности format() широкие, рассмотрим основные.

>>> s1 = "length - <>, width - <>, height - <>" >>> s1.format(3, 6, 2.3) 'length - 3, width - 6, height — 2.3'

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

>>> s2 = "height - , length - " >>> s2.format(3, 6) 'height - 6, length - 3'

Кроме того, аргументы могут передаваться по слову-ключу:

>>> info = "This is a . It's ." >>> info.format(subj="table", prop="small") "This is a table. It's small."

Пример форматирования вещественных чисел:

>>> " ".format(3.33333, 10/6) '1.67 3.333'

Практическая работа

  1. Вводится строка, включающая строчные и прописные буквы. Требуется вывести ту же строку в одном регистре, который зависит от того, каких букв больше. При равном количестве преобразовать в нижний регистр. Например, вводится строка «HeLLo World», она должна быть преобразована в «hello world», потому что в исходной строке малых букв больше. В коде используйте цикл for , строковые методы upper() (преобразование к верхнему регистру) и lower() (преобразование к нижнему регистру), а также методы isupper() и islower() , проверяющие регистр строки или символа.
  2. Строковый метод isdigit() проверяет, состоит ли строка только из цифр. Напишите программу, которая запрашивает с ввода два целых числа и выводит их сумму. В случае некорректного ввода программа не должна завершаться с ошибкой, а должна продолжать запрашивать числа. Обработчик исключений try-except использовать нельзя.

Примеры решения и дополнительные уроки в pdf-версии курса

X Скрыть Наверх

Python. Введение в программирование

Поменять местами 1-ю и 3-ю буквы каждого слова в строке

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

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

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

Эксперт функциональных языков программирования

3027 / 2178 / 457
Регистрация: 26.03.2015
Сообщений: 8,425

ЦитатаСообщение от t0ugh Посмотреть сообщение

Поменять местами 1- и 3-ю буквы
1- и 3-ю буквы чего?
Регистрация: 03.05.2017
Сообщений: 11

ЦитатаСообщение от Shamil1 Посмотреть сообщение

1- и 3-ю буквы чего?
Каждого слова в строке

Эксперт функциональных языков программирования

3027 / 2178 / 457
Регистрация: 26.03.2015
Сообщений: 8,425

1 2 3 4 5 6 7 8 9 10 11 12
text = 'Дана строка str символов, состоящая из произвольного текста на английском языке, слова разделены пробелами.' def f(w): if(len(w) >= 3): w = ''.join((w[2],w[1],w[0],w[3:])) return w words = text.split() result = ' '.join(map(f, words)) print(result)

Просто Лис

Эксперт Python

5321 / 3335 / 1021
Регистрация: 17.05.2012
Сообщений: 9,768
Записей в блоге: 9

1 2 3 4 5 6 7
#!/usr/bin/env python3 import re t = 'The desired data-type for the array. If not given, then the type will be determined as the minimum type required to hold the objects in the sequence. This argument can only be used to ‘upcast’ the array. For downcasting, use the .astype(t) method.' t2 = re.sub(r'\b(\w)(\w)(\w)', r'\3\2\1', t) print(t2)

87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

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

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

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

Поменять местами первую и последнюю буквы каждого слова
В каждом слове текста, содержащем не менее трех букв, поменять местами первую и последнюю буквы.

Поменять местами первую и последнюю буквы каждого слова.
Описание к разработке задания: Разработать алгоритм и программу согласно индивидуальному заданию.

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

Поменять местами первую и последнюю букву в последнем слове

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

10 фев 2021 в 10:53

вам надо сначала разобрать текст на слова через split() , изменить последнее слово как требует задание, а затем собрать обратно текст через join()

10 фев 2021 в 11:19

Чтобы менять буквы в последнем слове, нужно для начала взять это последнее слово. А тут берется весь текст.

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

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