String punctuation python что это
Перейти к содержимому

String punctuation python что это

  • автор:

Удалить пунктуацию из строки Python

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

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

1. Использование str.translate() функция

Эффективным решением является использование str.translate() Функция для удаления всех знаков препинания из строки. Он просто сопоставляет каждый символ строки с таблицей перевода, которую можно легко создать с помощью str.maketrans() функция.

Константы модуля string

Конкатенация ascii_lowercase и ascii_uppercase константы описаны ниже. Это значение не зависит от локали.

string.ascii_lowercase :

Строчные буквы ‘abcdefghijklmnopqrstuvwxyz’ . Это значение не зависит от локали и не изменится.

string.ascii_uppercase :

Прописные буквы ‘ABCDEFGHIJKLMNOPQRSTUVWXYZ’ . Это значение не зависит от локали и не изменится.

string.digits :
string.hexdigits :
string.octdigits :
string.punctuation :

Строка ASCII символов , которые считаются знаки препинания в локали языка C : !»#$%&'()*+,-./:;?@[\]^_<|>~ .

string.printable :

Строка символов ASCII, которые считаются печатными. Это сочетание digits , ascii_letters , punctuation , и whitespace .

string.whitespace :

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

  • КРАТКИЙ ОБЗОР МАТЕРИАЛА.
  • Строковые константы модуля string
  • Метод string.capwords() модуля string
  • Класс Formatter() модуля string
  • Класс Template() модуля string
  • Создание отчетов с использованием string.Template

Проверка строки на палиндром

Функция remove_signs здесь не нужно. В библиотеке есть string.punctuation и strip как их исползовать? см мой ответ.

12 июн 2015 в 12:18

Здесь бы больше подошёл str.replace , но только заменяющий сразу много символов. str.strip делает именно это, но только по краям строки.

12 июн 2015 в 14:51

3 ответа 3

Сортировка: Сброс на вариант по умолчанию

Всё практически правильно. Дело в том, что вместе с нужными строками, из файла вы читаете и символ конца строки \n . Это можно заметить, если преобразовать в list считанную строку. Всё, что Вам нужно — убрать и этот символ из строки, добавив его в signs .

signs = ". \'\"`,:;-_/()[]~\n" 

Отслеживать
ответ дан 11 июн 2015 в 12:02
diversenok diversenok
778 4 4 серебряных знака 18 18 бронзовых знаков
Да все заработало, спасибо.
11 июн 2015 в 12:04
string.punctuation дает список символ. таким оброзом можно просто испозовать strip
12 июн 2015 в 12:07
Ок. signs = string.punctuation + ‘\n’ Про strip написал ниже.
12 июн 2015 в 14:28

вариант с генератором списков и pythonic-функцией reversed

def def_palindrom(phrase): phrase_1 = [x.lower() for x in phrase if x.isalpha()] phrase_2 = list(reversed(phrase_1)) if phrase_1 == phrase_2: print(phrase, '- ПАЛИНДРОМ') else: print(phrase, ' - НЕ ПАЛИНДРОМ') 

Отслеживать
ответ дан 11 июн 2015 в 16:09
143 2 2 серебряных знака 6 6 бронзовых знаков

Кстати, а код можно оптимизировать: программе незачем сравнивать вторую половину строки с перевёрнутой первой. phrase_1 = [x.lower() for x in phrase[:len(phrase) // 2:] if x.isalpha()] phrase_2 = [x.lower() for x in phrase[:(len(phrase) — 1) // 2: -1] if x.isalpha()]

11 июн 2015 в 18:45

import string unwanted_char = string.punctuation + '\n' with open('palindromes.txt', 'r') as f: for line in f: stripped_line = line.strip(unwanted_char).lower() if stripped_line == stripped_line[::-1] print('Y', ' ') else: print('N', ' ') 
>>> import string >>> unwanted_char = string.punctuation + '\n' >>> unwanted_char '!"#$%&\'()*+,-./:;?@[\\]^_`<|>~\n' >>> line = "Пап[],.<>\@#$\n" >>> stripped_line = line.strip(unwanted_char).lower() >>> stripped_line == stripped_line[::-1] True 

Если символы пунктуации будут где-то в середине лучшее исползовать регулярные выражения.

>>> import re >>> line = "&%$# Пап[],.<>\@#$\n" >>> re.sub(r'\W+', '', line) 'Пап' >>> s = re.sub(r'\W+', '', line).lower() >>> s == s[::-1] True 

Ребята, как сделать проверку спец символов и написать если p1 и p2 то хорошо?

danila763

Немного изменил ваш код. Я проверял пересечение множеств символов пароля и символов которые в нем должны быть.

import string s1 = set(string.ascii_letters) s2 = set(string.digits) s3 = set(string.punctuation) while True: s = input('password >>> ') if len(s) ): print('Not numbers in password') else: print('Good password')

Ответ написан более двух лет назад
Нравится 1 29 комментариев

omgit

SENYOR @omgit Автор вопроса
А проверку спец символов как сделать?

danila763

omg it, добавьте строку

elif not set(s).intersection(set()): print('Нет спецсимволов')

вместо set() укажите спецсимволы, например
но если я правильно понял, s3 это как раз спецсимволы:
!»#$%&'()*+,-./:;?@[\]^_<|>~

их проверка уже есть

omgit

SENYOR @omgit Автор вопроса
Даниил Шевкунов, а буквы в нижнем и верхним регистре как добавить?

danila763

ещё одну такую же строку, но вместо set() написать s1, это английский алфавит в верхнем и нижнем регистре, а если русские, то вручную написать через запятую, как я писал в предыдущем комментарии

omgit

SENYOR @omgit Автор вопроса
Даниил Шевкунов, Спасибо тебе большое.

danila763

Рад помочь)

omgit

SENYOR @omgit Автор вопроса
Даниил Шевкунов, У меня проблема не выводиться в консоль!

s = 'In a distant, but not so unrealistic, future where mankind has abandoned earth because it hasbecome covered with trash from products sold by the powerful multi-national Buy N Large corporation WALLE, a garbage collecting robot has been left to clean up the mess. Mesmerized with trinkets of Earth s history and show tunes, WALLE is alone on Earth except for a sprightly pet cockroach. One day, EVE, a sleek (and dangerous) reconnaissance robot, is sent to Earth to find proof that life is once again sustainable' print = (len(s)) print = (s.lower()) print = (s.replace('WALLE', 'WALL-E')) print = (s.lower().count('earth'))

danila763

omg it, потому что у вас не print(), а print = (), это так не работает

omgit

SENYOR @omgit Автор вопроса
Даниил Шевкунов, Привет есть вопрос можешь помочь?

danila763

omg it, смогу — помогу, какой вопрос?

omgit

SENYOR @omgit Автор вопроса
Даниил Шевкунов, Достаточно глупый вопрос но все же как сделать проверку ввода в строке 24

import random stats = [] attributes = 5 for i in range(attributes): r = random.randint(60, 80) stats.append(r) Fireball = [12, 15, 28, 10, 5] while True: print('Stats up: ', end='') for i in range(attributes): print(stats[i], end=' ') print('\n\t[1] - Strength\ \n\t[2] - Dexterity\ \n\t[3] - Intelligence\ \n\t[4] - Wisdom\ \n\t[5] - Charisma') select = int(input('Select: ')) select -= 1 # check stats[select] = stats[select] + random.randint(5, 15) for i in range(len(stats)): if i == select: continue stats[i] = stats[i] - random.randint(5, 15) print('Stats up: ', end='') for i in range(attributes): print(stats[i], end=' ') print('\n\t[1] - Fireball') # select = int(input('Select shoot: ')) if select == 1: for i in range(attributes): stats[i] -= Fireball[i] #elif #else # check may be exit

danila763

Во первых, немного доработал ваш код:

from random import randint attributes = 5 stats = [randint(60, 80) for _ in range(attributes)] Fireball = [12, 15, 28, 10, 5] while True: print('Stats up: ', *stats) print(''' [1] - Strength [2] - Dexterity [3] - Intelligence [4] - Wisdom [5] - Charisma ''') select = int(input('Select: ')) - 1 # check for i in range(attributes): stats[i] += randint(5, 15) if i == select else -randint(5, 15) print('Stats up: ', *stats) print('\n\t[1] - Fireball') select = int(input('Select shoot: ')) if select == 1: for i in range(attributes): stats[i] -= Fireball[i] #elif #else # check may be exit

И собственно что вы подразумевали под проверкой ввода? Проверить ввел ли человек допустимое значение?

omgit

SENYOR @omgit Автор вопроса

Даниил Шевкунов, Я имею ввиду если пользователь ввел что-то меньше 1 или больше 5 то выводило бы НЕПРАВИЛЬНЫЙ ВВОД

danila763

omg it, Я вам ответил в теме с вашим вопросом

omgit

SENYOR @omgit Автор вопроса
Даниил Шевкунов, А какими еще способами это можно сделать?

danila763

ну например if select.isdigit() and 0 <= int(select) <= 5
а чем вам тот способ не подходит?

omgit

SENYOR @omgit Автор вопроса
Даниил Шевкунов, Просто интересно как это можно еще сделать

omgit

SENYOR @omgit Автор вопроса
Даниил Шевкунов, А как в код добавить ещё один выбор так же как и Firebool

import random stats = [] attributes = 5 for i in range(attributes): r = random.randint(60, 80) stats.append(r) Fireball = [12, 15, 28, 10, 5] while True: print('Stats up: ', end='') for i in range(attributes): print(stats[i], end=' ') print('\n\t[1] - Strength\ \n\t[2] - Dexterity\ \n\t[3] - Intelligence\ \n\t[4] - Wisdom\ \n\t[5] - Charisma') select = int(input('Select: ')) select -= 1 #print(select) if select5: print("Try again") break stats[select] = stats[select] + random.randint(5, 15) for i in range(len(stats)): if i == select: continue stats[i] = stats[i] - random.randint(5, 15) print('Stats up: ', end='') for i in range(attributes): print(stats[i], end=' ') print('\n\t[1] - Fireball') # select = int(input('Select shoot: ')) if select == 1: for i in range(attributes): stats[i] -= Fireball[i] #elif #else # check may be exit

danila763

if select == 1:
.
elif select == 2:
.
elif select == 3:
.

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

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