Использование метода strip() и пунктуации в Python

#python #strip

#python #Стриптиз

Вопрос:

Я пытаюсь решить эту проблему уже несколько часов и не могу найти правильное решение, вот в чем вопрос:

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

Вот мой код:

     import string

    def litCricFriend(wordList, text):
        theList = text.lower().replace('-', ' ').split()   #problem 3

        #problem below
        for word in theList:
            word.strip(string.punctuation)
            return theList
  

Комментарии:

1. Итак, в чем именно проблема?

2. вычисление и возврат частоты, с которой указанное слово (список слов) появляется в тексте (тексте).

3. 1) strip() не изменяет исходный текст, а создает новый текст. 2) вы return ошиблись местом.

Ответ №1:

В вашем коде есть пара битов, которые… ну, я не совсем уверен, почему они там, если честно, ха-ха. Давайте разберемся с этим вместе!

Я предполагаю, что вам дали некоторый текст: text = "My hovercraft is full of eels!" . Давайте разделим это на слова, сделаем слова строчными и удалим все знаки препинания. Мы знаем, что нам нужны string.punctuation и str.split() , и вы также поняли, что str.replace() это полезно. Итак, давайте используем их и получим наш результат!

 import string

def remove_punctuation(text):
    # First, let's remove the punctuation.
    # We do this by looping through each punctuation mark in the
    # `string.punctuation` list, and then replacing that mark with
    # the empty string and re-assigning that to the same variable.
    for punc in string.punctuation:
        text = text.replace(punc, '')

    # Now our text is all de-punctuated! So let's make a list of
    # the words, all lowercased, and return it in one go:
    return text.lower().split()
  

Мне кажется, что функция состоит всего из трех строк, и это то, что вы сказали, что хотели!


Для продвинутого читателя вы также можете использовать functools и сделать это в одной строке (я разделил ее на две для удобства чтения, но это все равно «одна строка»):

 import string
import functools

def remove_punctuation(text):
    return functools.reduce(lambda newtext, punc: newtext.replace(punc, ''),
        punctuation, text).lower().split()
  

Комментарии:

1. Назначение состоит не в том, чтобы удалить всю пунктуацию, а в том, чтобы удалить начальную и конечную пунктуацию в каждом слове, т.Е. word.strip(string.punctuation) Правильно, просто оно возвращает новую строку (строки неизменяемы в Python), а оператор return находится в неправильном месте.