Изменить порядок слов в строке на обратный
Вводится строка, состоящая из слов, разделенных пробелами. Следует заменить ее на строку, в которой слова идут в обратном порядке по-сравнению с исходной строкой. Вывести измененную строку на экран.
Данная задача существенно проще решается, если изменяется не исходная строка, а формируется новая из слов первой, но слова из первой берутся начиная с конца. После того как новая строка будет сформирована, ее можно присвоить переменной, которой была присвоена исходная строка, таким образом перезаписав ее.
Если пишется отдельная функция для изменения порядка слов, то в нее можно передавать исходную строку, а она будет возвращать измененную. Возвращаемое значение может быть присвоено той же самой переменной, значение которой передавалось в функцию.
В общих чертах алгоритм может быть таким. Строка просматривается с конца и фиксируется количество подряд идущих символов, которые не являются пробелами (т.е. длина слова). Как только встретится пробел, участок строки от этого пробела на длину слова добавляется в конец новой строки. Таким образом, если новая строка изначально пуста, то последнее слово исходной строки окажется первым в новой. Предпоследнее слово исходной строки окажется вторым в новой и т.д.
То, каким образом происходит копирование части строки из исходной и добавление этой части в новую строку, зависит от языка программирования, функций работы со строками.
Pascal
var
str: string;
procedure conversely(var s: string);
var
len, i, a: byte;
s2: string;
begin
len := length(s);
a := 0;
s2 := '';
for i:=len downto 1 do begin
if s[i] = ' ' then begin
s2 := s2 + copy(s,i+1,a) + ' ';
a := 0;
end
else
a := a + 1;
end;
s2 := s2 + copy(s,i,a);
s := s2;
end;
begin
readln(str);
conversely(str);
writeln(str);
end.
вывести слова в обратном порядке
порядке обратном в слова вывести
Python
вывести строку в обратном порядке python
# Вариант 1 - без использования встроенных функций
def conversely(s):
s2 = ''
i = len(s)-1
while i >= 0:
if s[i] == ' ':
s2 = s2 + s[i+1:] + ' '
s = s[:i]
i = len(s) - 1
else:
i -= 1
s2 = s2 + s
return s2
string = input()
string = conversely(string)
print(string)
# Вариант 2 - с использованием встроенных функций Python
def conversely(s):
s = s.split()
s.reverse()
s2 = ' '.join(s)
return s2
string = input()
string = conversely(string)
print(string)
каждый охотник желает знать, где сидит фазан
фазан сидит где знать, желает охотник каждый
Basic-256
input str$
gosub conversely
print str$
end
conversely:
len = length(str$)
a = 0
s$ = ""
for i=len to 1 step -1
if mid(str$,i,1) = " " then
s$ = s$ + mid(str$,i+1,a) + " "
a = 0
else
a = a + 1
endif
next i
s$ = s$ + mid(str$,1,a)
str$ = s$
return
conversely words of string
string of words conversely
Изменить в тексте порядок следования букв|слов|предложений
Изменить порядок следования на обратный для всех символов строки
Программе на вход (в стандартный поток ввода) подаётся целые числа L, R и строка S, состоящая из.
Элементы в новом массиве упорядочены по убыванию или по возрастанию? Если да, то изменить порядок следования элементов
Задача: Даны 2 целочисленные последовательности a и b размером n. Записать в новый массив элементы.
Изменить порядок следования слов в тексте на противоположный
1) Реализовать функцию: int calcWordsCount(const char *text, const char *word, int startFrom =.
Изменить порядок следования букв на обратный
Разработать программу для обработки текстовой информации . Консольный интерфейс программы должен.
Изменить порядок следования слов в строке на обратный
Помогите пожалуйста, рреобразовать строку, изменив порядок следования слов в строке на.
30 / 30 / 22
Регистрация: 13.02.2016
Сообщений: 131
print(''.join([x for x in list(input())[-1::-1]]))
2794 / 2037 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
Надо смотреть текст. Чем разделены предложения?
5890 / 3348 / 1034
Регистрация: 03.11.2009
Сообщений: 9,977
Сообщение от Whost
print(».join([x for x in list(input())[-1::-1]]))
Это Вы так хитро завуалировали
print(input()[::-1])
Регистрация: 30.06.2015
Сообщений: 431
Ребята, только начинаю учить, многое не понятно.
print(''.join([x for x in list(input())[-1::-1]]))
пока не знаю что это.
мой код слова меняет в предложении, вроде как. предложение? к примеру:»My name is Bob. I live in London»
268 / 96 / 75
Регистрация: 04.12.2015
Сообщений: 369
Записей в блоге: 1
Сообщение было отмечено izuchaju_python как решение
Решение
Много уже воды утекло, может уже и поздно, но что-то заморочился я вчера (по камчатскому времени) этой задачей. В результате получилась чуть ли не статья. В общем смотрите:
Всё-таки знаки окончания предложения наверно должны идти в конце предложения.
Принял для себя следующие ограничения по тексту:
1) все предложения завершаются на занки [. ];
2) предложения не завершаются на «. «, «. «, «. » и пр.;
3) в тексте нет пробелов, расположенных друг за другом.
Оттолкнувшись от этих предпосылок написал вот такой скрипт (izuchaju_python, привожу его специально для Вас — он проще всего для понимания и всё ниже следующее — это интерпретации именно этого алгоритма):
1 2 3 4 5 6 7 8 9 10 11 12
# ВАРИАНТ 1 import re data1 = input() data2 = (re.split(r'[. ] |[. ]$', data1)) data2.remove('') # Не успел найти подходящее рег. выр-е, не дающее в конце пустую сроку data3 = (re.findall(r'[. ] |[. ]$', data1)) print('Исходная строка: ', data1) data1 = '' for i in range(len(data2)): data1 = data1 + ((data2[::-1])[i])[::-1] + (data3[::-1])[i] + (' ' if i == 0 else '') print('Трансформированная строка: ', data1)
Посмотрел, порадовался немного. Потом думаю, засмеют — сильно много букв. И переменных. Ещё посидел и родил следующее
1 2 3 4 5 6 7 8
# ВАРИАНТ 2 import re data = input() print('Исходная строка: ', data, '\nТрансформированная строка: ', end='') for i in range(len(re.split(r'[. ] |[. ]$', data)) - 1): print((((re.split(r'[. ] |[. ]$', data))[::-1])[i+1])[::-1] + ((re.findall(r'[. ] |[. ]$', data))[::-1])[i] + (' ' if i == 0 else ''), end='')
Ну вот. Теперь программа в 4 строки написана и с одной переменной. Хорошо. только не оптимально с точки зрения быстродействия (многократные операции с регулярными выражениями в цикле. ) — плохо.
Подумал так и вернулся к первому варианту, модифицировав его сначала так:
1 2 3 4 5 6 7 8 9 10
# ВАРИАНТ 3 import re data1 = input() data2 = list(zip(re.split(r'[. ] |[. ]$', data1, len(re.split(r'[. ] |[. ]$', data1)) - 1), (re.findall(r'[. ] |[. ]$', data1)))) # Отделение знаков препинания от предложений print('Исходная строка: ', data1) data1 = '' for i in range(len(data2)): # Объединение перевёрнутых предложений с не перевёрнутыми знаками препинания data1 += ((data2[::-1])[i][0][::-1]) + (data2[::-1])[i][1] + (' ' if i == 0 else '') print('Трансформированная строка: ', data1)
А потом вот так:
1 2 3 4 5 6 7 8
# ВАРИАНТ 4 import re data1 = input() data2 = list(zip(re.split(r'[. ] |[. ]$', data1, len(re.split(r'[. ] |[. ]$', data1)) - 1), (re.findall(r'[. ] |[. ]$', data1)))) # Отделение знаков препинания от предложений print('Исходная строка: ', data1, '\nТрансформированная строка: ', end = '') for i in range(len(data2)): # Объединение перевёрнутых предложений с не перевёрнутыми знаками препинания print(((data2[::-1])[i][0][::-1]) + (data2[::-1])[i][1] + (' ' if i == 0 else ''), end = '')
Потом подумал и решил попробовать сократить количество переменных до одной, хотя где-то читал, что не рекомендуется таким увлекаться. Видимо из соображений минимизации вероятности ошибки из-за непонимания деталей обработки данных в модуле.
Тем не менее сработало корректно:
1 2 3 4 5 6 7 8
# ВАРИАНТ 5 import re data = input() data = list(zip(re.split(r'[. ] |[. ]$', data, len(re.split(r'[. ] |[. ]$', data)) - 1), (re.findall(r'[. ] |[. ]$', data)))) # Отделение знаков препинания от предложений print('Исходная строка: ', data, '\nТрансформированная строка: ', end = '') for i in range(len(data)): # Объединение перевёрнутых предложений с не перевёрнутыми знаками препинания print(((data[::-1])[i][0][::-1]) + (data[::-1])[i][1] + (' ' if i == 0 else ''), end = '')
Вот на этом моя фантазия иссякла.
Думаю, что из всего описанного третий вариант самый приспособленный к реальной жизни, когда над данными нужно выполнять какие-то следующие операции.
Вот, как бы вот. Не судите строго, помните, что я тоже делаю лишь первые питонские. поползновения?
Добавлено через 3 минуты
Ну и рекомендации по длинам строки не выдержаны, конечно. Что-то забыл про это совсем.
Изменить порядок слов Python
Всем привет! Есть ли библиотека Python, которая меняет порядок слов в предложении? Например у меня есть предложение:
21ис-3 1) Математика 211кб Панфилова
И при помощи библиотеки можно было бы получить
21ис-3 1) 211кб Математика Панфилова
Ну или по другому,как уже захочу я
Отслеживать
67.7k 5 5 золотых знаков 20 20 серебряных знаков 51 51 бронзовый знак
задан 30 мая 2022 в 16:41
54 6 6 бронзовых знаков
Для этого не надо никакой библиотеки.
30 мая 2022 в 16:55
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
txt = '21ис-3 1) Математика 211кб Панфилова И' tt = txt.split() print(tt) print(f' ') ['21ис-3', '1)', 'Математика', '211кб', 'Панфилова', 'И'] 1) 211кб Математика Панфилова
Отслеживать
ответ дан 30 мая 2022 в 16:51
4,294 4 4 золотых знака 7 7 серебряных знаков 22 22 бронзовых знака
Сплит по пробельным символам дефолтный, можно параметр не указывать
30 мая 2022 в 17:03
- python
- порядок
-
Важное на Мете
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.10.27.43697
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
5 способов перевернуть строку в Python 3
Создадим функцию reversed1 с аргументом variable , где variable — переменная, хранящая строку, которую мы хотим перевернуть. Так как строка являются неизменяемым объектом, то создадим отдельную, пока что пустую переменную res , которая в будущем будет хранить результат.
def reversed1(variable): res=''
В функцию поместим цикл, который будет «прохаживаться» по каждому из элементов строки. Начнем мы с конца строки, используя положительные индексы, соответственно параметр start функции range — len(variable)-1 . -1 потому, что длина строки всегда на 1 больше, чем индекс последнего ее элемента. Закончить мы должны на первом символе строки, поэтому параметр stop функции range() — -1, поскольку перечисляются числа до значения этого параметра, не включительно. Параметр step — -1, потому что мы считаем в обратном порядке.
def reversed1(variable): res='' for i in range(len(variable)-1,-1,-1): pass
Теперь заполним тело цикла — проведем конкатенацию между старым значением res и элементом строки с индексом i . Таким образом, при каждой итерации цикла мы добавляем по одному символу к результату. После окончания цикла вернем результат.
def reversed1(variable): res='' for i in range(len(variable)-1,-1,-1): res+=variable[i] return res n = reversed1(input()) print(n)
2. Использование цикла со списком в результате
Этот способ аналогичен предыдущему, единственное его отличие заключается в типе данных переменной res — здесь она является списком.
Вместо конкатенации можно использовать метод append() , с помощью которого мы добавляем элемент, указанный в качестве аргумента к методу, в конец списка. Итак, мы получили:
def reversed2(variable): res=[] for i in range(len(variable)-1,-1,-1): res.append(variable[i]) return res
Функция пока что возвращает список, состоящий из односимвольных элементов. Если нас это не устраивает, то почему бы не преобразовать список в строку при помощи метода join() ? Сделаем это, добавив конструкцию res=».join(res) .
def reversed1(variable): res=[] for i in range(len(variable)-1,-1,-1): res.append(variable[i]) res=''.join(res) return res n = reversed1(input()) print(n)
3. Рекурсия
Третий в нашем обзоре способ — рекурсия, как всегда трудная для понимания. Как всегда создаем функцию, но не спешим помещать туда цикл.
Начну объяснение с конца. Если мы записали в результат все символы кроме первого, то длина оставшейся строки равна единице и, следовательно, ее нужно вернуть. Получаем:
def reversed3(variable): if len(variable) == 1: return variable
Но если длина строки больше одного, то нужно вернуть последний из ее элементов и вызвать эту же функцию, но уже отрезав последний символ. Сделать это мы можем с помощью среза variable[:-1] . Обновим картину:
def reversed3(variable): if len(variable) == 1: return variable else: return variable[-1] + reversed3(variable[:-1])
Использование else: здесь необязательно, так как после возвращения чего-либо этой функцией она завершится. Поэтому конструкцию return variable[-1] + reverse3(variable[:-1]) можно поместить напрямую в тело функции. Конечный вариант решения:
def reversed3(variable): if len(variable) == 1: return variable return variable[-1] + reversed3(variable[:-1]) n = reversed3(input()) print(n)
4. Использование встроенной функции
В Python 3 встроена специальная функция reversed() , в качестве аргумента она принимает список или строку, а возвращает итератор последовательности значений, состоящей из всех элементов аргумента в обратном порядке.
Простыми словами — недостаточно написать res = reversed(variable) , данные нужно преобразовать в нужный тип (в нашем случае — в строку). Сделать мы это можем при помощи метода join() , соединив последовательность через пустую строку. После выполненных действий возвращаем результат. Код:
def reversed4(variable): res=''.join(reversed(variable)) return res n = reversed4(input()) print(n)
5. Срез строки
Можете представить способ перевернуть строку, который был бы короче названия функции? А я могу!
Срез строки — вещь прекрасная, но порой пугающая новичков «уплотненным» синтаксисом. Срез содержит три параметра — [start:stop:step], аналогично функции range() . Подробнее о них вы можете прочитать в других статьях на Хабре.
Для способа с использованием срезов не нужно даже создавать функцию, только зря строки и время потратите. Все элементарно — присвоим параметру step значение -1 и пропустим два других параметра, происходит магия — строка переворачивается:
n = input()[::-1] print(n)
Конечно, никакой магии здесь нет, мы просто перебираем символы с шагом -1, то есть в обратном порядке.
Заключение
Первый и второй способы как нельзя лучше подходят, если во время переворота строки нужно ее изменять. При этом они значительно уступают 4 и 5 способам в скорости. Читаются умеренно хорошо, поэтому в некоторых случаях их уместно использовать.
Насчет третьего способа много сказать не могу, поскольку не могу придумать ему применение. Такой способ плохо читается и довольно медленный, поэтому я не рекомендую его использовать.
Четвертый способ довольно быстрый, отлично читается и подходит во многих случаях.
Пятый способ — самый быстрый, хорошо читается, очень краткий (6 символов), поэтому его я считаю наиболее предпочтительным.
Сравнительную таблицу скорости некоторых способов вы можете найти по ссылке — https://python-scripts.com/reversed
Если знаете что-либо еще по этой теме, хотите меня поправить или дать идею — пишите в комментариях, я все прочту и приму к сведению. Удачи!