Это на самом деле две задачи, поэтому давайте разделим это на два вопроса. Я займусь вашей проблемой, касающейся удаления знаков препинания, потому что вы проявили собственные усилия в этом вопросе. Для определения уникальных слов, пожалуйста, откройте новый вопрос (а также ищите похожие вопросы здесь о переполнении стека, прежде чем публиковать новый вопрос, я уверен, что вы найдете что-то полезное!)
Вы правильно нашливыходит, что вы попали в бесконечный цикл. Это потому, что ваше while
условие цикла всегда выполняется, когда i
является символом пунктуации. Удаление i
из new
не меняет этого. Вы избегаете этого, используя простое if
-условие. На самом деле, ваш код смешивает концепцию while
и if
, а ваш сценарий адаптирован для if
заявления. Я думаю, вы думали, что вам нужен цикл while
, потому что вы имели в виду концепцию итерации. Но вы уже перебираете content
в цикле for. Итак, исправление ошибки будет выглядеть следующим образом:
for i in new:
if i in string.punctuation:
new.discard(i)
Однако другой и более «питонический» способ - использовать списочное понимание вместо for
-loop
with open("uniq_words.txt") as content:
stripped_content = "".join([
x
for x in content.read()
if x not in string.punctuation
])