Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.69/29: Рейтинг темы: голосов - 29, средняя оценка - 4.69
19 / 20 / 6
Регистрация: 30.06.2015
Сообщений: 431
1

Изменить в тексте порядок следования букв|слов|предложений

14.02.2016, 21:14. Показов 5293. Ответов 9
Метки нет (Все метки)

#Изменить в тексте порядок следования:
#- букв в словах;
#- слов в предложениях;
#- предложений в тексте.
#Вывести модифицированный текст.
Python
1
2
3
4
5
s = input()
s = s.split()
s.reverse()
for i in s:
    print(i, end=' ')
Дальше этого в тупике...help!
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.02.2016, 21:14
Ответы с готовыми решениями:

Изменить порядок следования слов в тексте на противоположный
1) Реализовать функцию: int calcWordsCount(const char *text, const char *word, int startFrom =...

Изменить порядок следования букв на обратный
Разработать программу для обработки текстовой информации . Консольный интерфейс программы должен...

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

Вывести Имя и Фамилию (изменить порядок следования слов) через один пробел
Дана строка, в которой записаны Фамилия и Имя ученика через пробел или несколько пробелов. Вывести...

__________________

Записывайтесь на профессиональные курсы Fullstack-разработчиков на Python
9
30 / 30 / 22
Регистрация: 13.02.2016
Сообщений: 131
14.02.2016, 21:43 2
Python
1
print(''.join([x for x in list(input())[-1::-1]]))
Так?
0
Модератор
Эксперт NIX
2783 / 2031 / 680
Регистрация: 02.03.2015
Сообщений: 6,513
14.02.2016, 22:03 3
Надо смотреть текст. Чем разделены предложения?
0
Эксперт по компьютерным сетям
4816 / 2714 / 833
Регистрация: 03.11.2009
Сообщений: 8,390
Записей в блоге: 3
14.02.2016, 22:24 4
Цитата Сообщение от Whost Посмотреть сообщение
print(''.join([x for x in list(input())[-1::-1]]))
Это Вы так хитро завуалировали
Python
1
print(input()[::-1])
1
19 / 20 / 6
Регистрация: 30.06.2015
Сообщений: 431
16.02.2016, 00:48  [ТС] 5
Ребята, только начинаю учить, многое не понятно...
Python
1
print(''.join([x for x in list(input())[-1::-1]]))
пока не знаю что это....
мой код слова меняет в предложении, вроде как....предложение? к примеру:"My name is Bob. I live in London"
0
268 / 96 / 75
Регистрация: 04.12.2015
Сообщений: 369
Записей в блоге: 1
17.02.2016, 05:32 6
Лучший ответ Сообщение было отмечено izuchaju_python как решение

Решение

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

Всё-таки знаки окончания предложения наверно должны идти в конце предложения.
Принял для себя следующие ограничения по тексту:
1) все предложения завершаются на занки [.!?];
2) предложения не завершаются на "...", "!..", "???" и пр.;
3) в тексте нет пробелов, расположенных друг за другом.
Оттолкнувшись от этих предпосылок написал вот такой скрипт (izuchaju_python, привожу его специально для Вас - он проще всего для понимания и всё ниже следующее - это интерпретации именно этого алгоритма):

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)
Посмотрел, порадовался немного. Потом думаю, засмеют - сильно много букв... И переменных. Ещё посидел и родил следующее

Python
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 строки написана и с одной переменной. Хорошо... только не оптимально с точки зрения быстродействия (многократные операции с регулярными выражениями в цикле...) - плохо.
Подумал так и вернулся к первому варианту, модифицировав его сначала так:

Python
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)
А потом вот так:

Python
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 = '')
Потом подумал и решил попробовать сократить количество переменных до одной, хотя где-то читал, что не рекомендуется таким увлекаться. Видимо из соображений минимизации вероятности ошибки из-за непонимания деталей обработки данных в модуле...
Тем не менее сработало корректно:

Python
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 минуты
Ну и рекомендации по длинам строки не выдержаны, конечно. Что-то забыл про это совсем.
2
Модератор
Эксперт NIX
2783 / 2031 / 680
Регистрация: 02.03.2015
Сообщений: 6,513
17.02.2016, 13:28 7
Python
1
' '.join(reversed(re.findall(r'\w[^.!?]+[.!?]', data)))
— получите все предложения в обратном порядке.
Python
1
print(*(s[-2::-1] + s[-1] for s in reversed(re.findall('\w[^.!?]+[.!?]', data))))
— буквы, слова и предложения в обратном порядке
0
19 / 20 / 6
Регистрация: 30.06.2015
Сообщений: 431
18.02.2016, 15:22  [ТС] 8
Всем ОГРОМНОЕ спасибо! будем учить, разбираться.
0
268 / 96 / 75
Регистрация: 04.12.2015
Сообщений: 369
Записей в блоге: 1
19.02.2016, 00:57 9
Marinero, Вы как всегда на высоте. Опыт... Не учли только одной детали:
"123 qwe. 123.23 это число!"
А ещё мы все дружно забили на запятые. Ну будем считать, что это специально для упрощения.
0
Модератор
Эксперт NIX
2783 / 2031 / 680
Регистрация: 02.03.2015
Сообщений: 6,513
19.02.2016, 01:37 10
Цитата Сообщение от YakobsEA Посмотреть сообщение
Не учли только одной детали:
Цитата Сообщение от Marinero Посмотреть сообщение
Чем разделены предложения?
Цитата Сообщение от YakobsEA Посмотреть сообщение
все предложения завершаются на занки [.!?];
Python
1
r'((?:\w[^.!?]+[.!?])+?)(?!\d)'
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.02.2016, 01:37

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

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

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

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

В тексте посчитать кол-во слов, предложений, сколько обособленных знаками препинаний предложений
const symbols = ; var s:string; i:byte; n,k:integer; begin writeln('введите текст');...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.