Содержание

python — Как убрать знаки препинания в тексте что бы проверить его на палиндром?

Вопрос задан

Изменён 2 года 1 месяц назад

Просмотрен 2k раз

Ввести с клавиатуры строку и определить является ли она полиндромом. Учесть что символы знаков припинания и разделения текста не учитываются при поиске полиндрома, учитываются только буквы и цифры. Причем ручной выбор символов будет низко оценен!

str_1 = input()

print(f" {str_1} is Polindrom" if str_1 == str_1[::-1] else f" {str_1} is NOTT Polindrom")

Условий вроде никаких нет кроме того что ручной выбор символов будет низко оценен

Кони, топот, инок,

Но не речь, а черен он.

Идем, молод, долом меди.

Чин зван мечем навзничь.

Голод, чем меч долог?

Пал, а норов худ и дух ворона лап.

А что? Я лав? Воля отча!

Яд, яд, дядя!

Иди, иди!

Мороз в узел, лезу взором

Солов зов, воз волос.

Колесо. Жалко поклаж. Оселок.

Сани, плот и воз, зов и толп и нас.

Горд дох, ход дрог.

И лежу. — Ужели?

Зол, гол лог лоз.

И к вам и трем с смерти мавки.

  • python
  • строки
  • input

2

Ну можно использовать регулярные выражения:

line = "Горд дох, ход дрог.\nИ лежу. — Ужели?"
import re
line = re.sub('[!@#$\n-.,]', '', line)

проверка на палиндром после преобразований делается так:

print("палиндром" if line == line[::-1] else "не палиндром")

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

line = line.upper()

P. S.

полный код:

import re
# удалить символы    
line = re.sub('[!@#$\n-.,]', '', line)
# перевести строку в верхний регистр (чтобы все буквы были одинаковыми и не было ситуации с буквами "A"/"a"
line = line.upper()
# проверить строку на палиндром
print("палиндром" if line == line[::-1] else "не палиндром")

чтобы не перечислять запрещённые символы

[!@#$\n-.,], лучше написать регулярку по удалению всех символов кроме букв — [a-я,А-Я]

P.P.S.

непонятное условие «ручной выбор символов будет низко оценен»

потому что иначе можно использовать метод replace для удаления ненужных символов:

line = line.replace('!', '')
line = line.replace('-', '')

и т.д.

4

Зарегистрируйтесь или войдите

Регистрация через Google

Регистрация через Facebook

Регистрация через почту

Отправить без регистрации

Почта

Необходима, но никому не показывается

Отправить без регистрации

Почта

Необходима, но никому не показывается

Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки

Как проверить пунктуацию.

Правила пунктуации

Знаки препинания – очень важные составляющие текста. Человек, не использующий их в письменной речи, рискует сделать так, что те, кому адресован текст, просто-напросто не поймут смысла. Да и читать такое сообщение будет невозможно. Поэтому просто необходимо проверить пунктуацию, как только текст написан. Это не только уважение к адресатам, но и к самому себе, ведь грамотная письменная речь – показатель высокой культуры. В статье разберем, для чего нужна пунктуация, какие существуют основные знаки препинания и какую функцию выполняет каждый из них.

История возникновения знаков препинания

Знаки препинания появились не сразу. Изначально тексты были сложны для восприятия, потому что писались без них. То, что необходимо сделать письменные сообщения удобочитаемыми, в Европе первыми поняли французы. Постановку особенных остановок, запятых, они переняли у греков в XV веке.

Что касается России, то сформулировал мысль о том, для чего нужна пунктуация, впервые Михайло Ломоносов. Правила были выдвинуты им в XVIII веке. Причем, он говорил не только об употреблении запятых, но и восклицательных знаков. Карамзин же ввел в употребление тире и двоеточие.

Значение пунктуационных знаков

Какое же назначение знаков препинания? Знание этого — хорошее подспорье, когда нужно проверить текст на пунктуацию.

Самый важный знак – это точка. Ей пользуются, чтобы отделить одно предложение от другого, она означает окончание минимального сообщения и начало нового. Иногда вместо точки используются знаки, вопросительный или восклицательный. Первый употребляют в тех предложениях, которые содержат в себе вопрос, второй – в эмоционально окрашенных, побудительных.

Для примера достаточно сравнить три предложения: Наталья Павловна – выдающийся хирург. (спокойная интонация, цель – сообщение факта). – Наталья Павловна – выдающийся хирург? (вопрос). – Да Наталья Павловна – выдающийся хирург! (восторженные чувства).

Иногда в конце предложения ставится особый знак – многоточие, оно говорит о незаконченности мысли.

Запятыми мы пользуемся чаще всего. Эти знаки отделяют одни логические отрезки от других, создают перечисления. Без запятых весьма сложно понять смысл предложения. Знаменитая фраза «казнить нельзя помиловать» — яркий тому пример.

Для того чтобы разъяснить какие-либо факты, используют двоеточие. Также оно может указывать на ряд однородных членов.

Тире (кстати, это единственное название знака препинания, имеющее иноязычное происхождение — французское) необходимо, когда пропускается союз или какое-либо слово. Также оно указывает на то, что в предложении одна мысль противопоставлена другой.

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

Однородные члены

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

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

Также необходимо поставить пунктуационный знак, если однородные члены соединены попарно. На лугу росли красные и желтые, голубые и белые цветы. Как видим, в этом случае запятая отделяет два однородных определения с союзом и.

При повторяющихся союзах пунктуационный знак ставится после первого. На лугу росли и красные, и ярко-желтые, и голубые, и белые цветы.

При однородных членах может стоять обобщающее слово. В таком случае проверить правильность пунктуации поможет определение того, где оно находится. Если до ряда однородных членов, то необходимо поставить двоеточие. После такового – тире. Например: На лугу росли всевозможные цветы: красные, ярко-желтые, голубые и белые. Обобщающее слово цветы употреблено перед однородными определениями. Красные, ярко-желтые, голубые, белые – всевозможные цветы украшали луг.

Обособление

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

Стрижи, снующие между деревьями, на лету ловили насекомых. Определяемое слово стрижи употреблено перед обособленным определением (оно выражено причастным оборотом).

Туристы, уставшие и голодные, вскоре подошли к заброшенной избушке. Определяемое слово туристы стоит перед обособленным определением (оно выражено однородными определениями, соединенными с помощью союза).

Всегда необходимо ставить запятые при выделении:

  • Деепричастных оборотов. Уйдя в себя, она смогла отвлечься от насущных проблем.
  • Обособленные члены относятся к личному местоимению. Довольные и воодушевленные, мы прибыли к месту соревнований.
  • Приложение всегда обособляется в двух случаях: когда относится к личному местоимению и когда относится к нарицательному существительному. Например: Она, врач высшей категории, была вынуждена пойти на попятную. – Врач высшей категории, она была вынуждена пойти на попятную. Еще пример: Моя тетка, врач высшей категории, вмиг осталась без работы. – Врач высшей категории, моя тетка вмиг осталась без работы.

Пунктуация в предложении с вводными конструкциями и обращениями достаточно проста. Нужно просто знать, что это за элементы.

Когда мы обращаемся к кому-либо, его имя или то, как мы его при этом называем, привлекая внимание, и будет обращением. В предложении оно всегда выделяется запятыми. Ольга Петровна, принесите мне книгу о растениях. – Дорогой дедушка, как ты поживаешь? – Милые братья, давайте защищать свою Родину до конца!

Проверить пунктуацию в синтаксических единицах с вводными конструкциями можно, правильно выделив их из контекста. Следует помнить, что их назначение – обратить особое внимание на какое-либо высказывание, отделить его от других. Послушай, разве так важно приехать завтра? – Я пойду, наконец, разберусь. – По мнению сотрудников, давно уже следует изменить интерьер офиса.

Пунктуация в сложноподчиненных предложениях

Что касается сложных предложений, то постановка запятой между их частями нужна всегда. Со сложноподчиненными дело обстоит проще, потому что их сложно перепутать с какими-либо другими. Какая же в них пунктуация (5 класс – уже то время, когда тема изучается)? Приведем примеры.

  • Я хочу, чтобы вы поскорее переехали в новую квартиру.
  • Она знает, где прячутся все грибы в лесу.
  • Катерина, как только запели первые птицы, поднималась с постели и занималась хозяйством.

Пунктуация в сложносочиненных предложениях

Гораздо сложнее определить сложносочиненное предложение. Чаще всего его путают с простым, у которого в составе есть однородные сказуемые. Очень важно правильно выделить грамматическую основу и понять, сколько их.

Разберем два примера. Ласточки летали вокруг дома и выписывали в воздухе причудливые фигуры. – Ласточки летали вокруг дома, и присутствующие с восхищением смотрели на их причудливые воздушные фигуры. Первое предложение – простое, в нем однородные сказуемые летали, выписывали соединены союзом и, поэтому запятая не нужна. Второе пример – сложносочиненное предложение, имеют место две грамматические основы: ласточки летали, присутствующие смотрели. Запятая перед и необходима.

Пунктуация в бессоюзных сложных предложениях

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

Библиотека закрылась, все сотрудники уже ушли домой. – Библиотека закрылась – все сотрудники ушли домой. – Все сотрудники ушли домой: библиотека закрылась.

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

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

Библиотека, находящаяся в парке, закрылась, чтобы провести учет книг; сотрудники остались работать сверхурочно.

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

python — прочитать текстовый файл и вернуть пунктуацию в виде строки c.append(s) # 2

  1. Один символ никогда не равен строке из многих символов , как ваши знаков препинания (например, '. ' == '.?' никогда не бывает истинным). Таким образом, мы должны использовать другой логический оператор сравнения: в , потому что символ может быть элементом в наборе символов, строке, списке или наборе.
  2. Вы уже заметили: поскольку c
    является символом и s a str , не перечисляет , мы не можем использовать метод append . Таким образом, мы должны использовать s = s + c или сокращение s += c (ваше решение было почти правильным)

Извлечение тестируемой и многократно используемой функции

Почему бы не извлечь и протестировать ту часть, в которой произошел сбой:

 def extract_punctuation(line):
    punctuation_chars = set('.,;:!?') # опечатка в имени, таким образом устанавливается уникальная
    символы = []
    для char в строке:
        если char в punctuation_chars:
            символы .append (символ)
    символы возврата
# тест
symbol_list = extract_punctuation('Привет, как дела?')
print(symbol_list) # [',', '?']
print(''.
join(symbol_list)) # ',?'

Решение: используйте функцию чтения файла

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

 def пунктуация (имя файла):
    символы = []
    с открытым (имя файла, режим = 'r') как f:
        символы + extract_punctuation(f.read())
    вернуть символы .join()
 

Объяснение:

  1. Результат по умолчанию определяется сначала как пустой список [] (возвращается, если файл пуст).
  2. Список извлеченных дополнен до
    символов
    с использованием + для каждого файла-читается внутри с блоком (здесь читается весь файл сразу).
  3. Возвращает либо пустой [].join() , дающий '' , либо нет, например. ,? .

См.: Как объединить два списка в Python?

Расширить: вернуть список для воспроизведения

Для файла с несколькими предложениями, например dialog. txt :

 Привет, как дела?
Ну, я в порядке!
А ты.. готов начать, а?
 

Вы можете получить список (упорядоченный по внешнему виду), например: [',', '?', ',', '!', '.', '.', ',', '?']

что приведет к строке с упорядоченными дубликатами: ,?,!..,?

Чтобы расширить, список может быть лучшим типом возвращаемого значения:

  1. Уникальный фильтр как набор: set(list_punctuation(filename))
  2. Частота подсчета с использованием панд: pd.Series(list_punctuation(filename)).value_counts()
 def list_punctuation(имя файла):
    с открытым (имя файла, режим = 'r') как f:
        вернуть extract_punctuation(f.read())
lp = list_punctuation('диалог.txt')
печать (лп)
печать(''.присоединиться(lp))
уникальный = набор (lp)
печать (уникальный)
# передать список пандам, чтобы легко вести статистику
импортировать панд как pd
частота = pd.Series(lp).
value_counts() печать (частота)

Печатает выше список , строку . плюс следующие установить

 {',', '?', '!', '.'}
 

, а также ранжированная частота для каждого знака препинания:

 , 3
? 2
. 2
! 1
 

Сегодня я научился — играя с пунктуацией

  • и структурами данных Python

Удаление знаков препинания из строки (3 разных способа!) • datagy

В этом руководстве вы узнаете, как использовать Python для удаления знаков препинания из строки . Вы узнаете, как удалить знаки препинания из строки Python, используя метод str.translate() , метод str.replace() , популярную библиотеку регулярных выражений re и, наконец, использование циклов for.

Умение работать со строками и манипулировать ими — важный навык для любого питониста. Строки, которые вы найдете в Интернете или в своих файлах, часто требуют немало работы, чтобы иметь возможность их анализировать. Одна из задач, с которой вы будете часто сталкиваться, — это возможность использовать Python для удаления пунктуации из строки.

Быстрый ответ: используйте .translate() для максимальной производительности

Содержание

Использование Python для удаления пунктуации из строки с помощью Translate

Одним из самых простых способов удаления пунктуации из строки в Python является использование метода str.translate() . Метод translate() обычно принимает таблицу перевода, которую мы сделаем с помощью метода

.maketrans() .

Давайте посмотрим, как мы можем использовать метод .translate() для удаления пунктуации из строки в Python. Для этого мы импортируем встроенный string библиотека, которая поставляется в комплекте с атрибутом пунктуации.

 строка импорта
a_string = '!Привет. какая погода.'
new_string = a_string.translate(str.maketrans('', '', string.punctuation))
печать (новая_строка)
# Возвращает: привет, какая погода 

Здесь метод . maketrans() принимает три аргумента, первые два из которых являются пустыми строками, а третий — это список знаков препинания, которые мы хотим удалить. Это говорит функции заменить все знаки препинания на 9.0012 Нет .

Хотите узнать больше? Если вы хотите узнать, как использовать метод перевода (и другие!) для удаления символа из строки в Python, ознакомьтесь с моим подробным руководством здесь.

Что такое string.punctuation в Python?

Python поставляется со встроенной библиотекой string , которая включает в себя атрибут string.punctuation , включающий множество встроенных знаков препинания. Поскольку библиотека встроена, вам не нужно беспокоиться о ее установке. 9_`{|}~

Использование Python для удаления пунктуации из строки с помощью регулярных выражений (regex)

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

Регулярные выражения хороши тем, что они встроены в ряд полезных классов символов, которые позволяют нам выбирать различные типы символов. . Таким образом, это позволяет нам выбирать все, что не является словом или пробелом, что в нашем случае выбирает пунктуацию. 9\w\s]’, », a_string) печать (новая_строка) # Возвращает: привет, какая погода

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

Использование Python для удаления пунктуации из строки с помощью str.replace

Метод str.replace() упрощает замену одного символа. Например, если вы хотите заменить только один знак пунктуации, это будет простое и понятное решение.

Допустим, вы хотели заменить только ! символов из нашей строки, мы могли бы использовать метод str.replace() для достижения этой цели. Давайте посмотрим, как:

 a_string = '!hi. какая погода.'
новая_строка = a_string.replace('!', '')
печать (новая_строка)
# Возвращает: привет. какая погода. 

Здесь мы добавили метод . replace() к нашей строке. Первый параметр — это заменяемая строка, в данном случае — наша 9.0012 ! символов. Второй параметр — это то, чем его заменить, в данном случае это пустая строка.

В следующем примере вы узнаете, как использовать цикл for для замены всех знаков препинания в строке с помощью цикла for.

Использование Python для удаления пунктуации из строки с помощью цикла for

В предыдущем разделе руководства вы узнали, как использовать метод str.replace() для удаления одного знака препинания. В этом разделе мы повторим этот пример, но воспользуемся циклом for, чтобы удалить все знаки препинания.

Давайте посмотрим, как это можно сделать в Python:

 строка импорта
a_string = '!Привет. какая погода.'
для символа в string.punctuation:
    a_string = a_string.replace (символ, '')
печать (a_string)
# Возвращает: привет, какая сейчас погода 

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

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

Какой самый быстрый способ очистить строку Python от пунктуации?

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

Для этого теста мы создали строку длиной более 1 000 000 000 символов и удалили из строки все знаки препинания с помощью Python.

Давайте посмотрим на результаты:

Метод Затраченное время
str.translate() 2.35 seconds
regular expressions 88.8 seconds
for loop with str.replace() 20.6 seconds
Figuring out which method is быстрее всего заменить все знаки препинания в строке в PythonСамый быстрый способ удалить знаки препинания из строки в Python

Какой самый быстрый способ удалить знаки препинания из строки в Python?

Метод str. translate() — это самый быстрый способ удаления пунктуации из строки в Python — иногда до 40 раз быстрее!

Конечно, скорость — это еще не все, но поиск кода, который значительно замедляет ваш код, часто приводит к ухудшению взаимодействия с пользователем.

Часто задаваемые вопросы

Что такое string.punctuation в Python?

Python поставляется со встроенной библиотекой string, которая включает в себя все распространенные знаки пунктуации с использованием 9_`{|}~

Как заменить знаки препинания пробелом в Python?

Самый простой способ заменить знак препинания пробелом в Python — использовать метод .translate() с библиотекой string.punctuation . Просто напишите: a_string.str.maketrans(dict.fromkeys(string.punctuation, ' ')) .

Заключение

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