Python:在文本中删除一个单词但是最后一个单词不会审查

时间:2017-01-09 10:43:54

标签: python

我在Codecademy上做Python试图检查文本中的单词。代码有效,但如果文本中的最后一个单词有单词,则不会被删除。

我认为for语句需要更改for x in (text + 1),但当然会导致错误。我们不要使用内置函数,例如replace()任何想法?

def censor(text,word):
    text = text.split()
    for x in text:
        if x == word:
            text[text.index(x)] = "*" * len(word)
    return " ".join(text)

print(censor("You dirty guy and dirty boy dirty.", "dirty"))

这会返回[You ***** guy and ***** boy dirty.]

5 个答案:

答案 0 :(得分:17)

可能包括最后一个令牌中的句号,因此它将"dirty.""dirty"进行比较。

答案 1 :(得分:14)

脏的最后一次出现是'dirty.'而不是'dirty'。 使用replace函数可能更容易:

def censor(text,word):
    return text.replace(word, len(word)*'*')

没有内置功能:

def censor(text,word):
    while 1:
        wordPosition = text.find(word)
        if wordPosition < 0:
            break
        text = text[:wordPosition] + len(word)*'*' + text[wordPosition+len(word):]
    return text

答案 2 :(得分:6)

克里斯托弗是正确的,它将dirtydirty.与句号进行比较。正如您所说,您无法使用replace函数,因此您可以将if语句更改为

if x.startswith(word) == True:

答案 3 :(得分:1)

由于最后一个脏.因此,脏和脏(。)之间存在差异。这是解决问题的方法:

def censor(text, word):
    wordlist = text.split()
    new_words_list = []
    for item in wordlist:
        if item.find(word) > -1:
            new_words_list.append( '*' * len(word))
        else:
            new_words_list.append(item)
    return " ".join(new_words_list)

print(censor("You dirty guy and dirty boy dirty.", "dirty"))

输出:

You ***** guy and ***** boy *****

答案 4 :(得分:1)

您可以使用re.sub替换文本中的作品

import re
re.sub("word", "new_replaced_word", text)