我在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.]
答案 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)
克里斯托弗是正确的,它将dirty
与dirty.
与句号进行比较。正如您所说,您无法使用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)