问题: 编写一个名为censor的函数,它将两个字符串(文本和单词)作为输入。它应该返回带有您选择用星号替换的单词的文本。
我的代码:
def censor(text, word):
t=text
w=word
l2=len(word)
res=""
p=["*" * l2]
str1="".join(p)
for i in range(0,len(text)):
if t[i] in text and t[i] not in word:
res=res+t[i]+str1
return res
输入("嘿嘿嘿","嘿");正确的结果是三组,每组三个***。我的代码只给出了两组3星。知道为什么吗?
答案 0 :(得分:2)
更容易拆分,或者用"*" *
替换单词的len来替换或只保留单词:
def censor(text, word):
l2 = len(word)
p = "*" * l2
return " ".join([ch if ch != word else p for ch in text.split(" ")])
str1="".join(p)
os不需要你可以简单地使用p = "*" * l2
如果您按照其他答案中的建议使用str.replace
,则会替换部分匹配,以便heys -> ***s
我们还明确地将分隔符传递给分割,因此当我们重新加入时,我们将保持原始字符串长度不变。
如果您想在比较前删除标点符号,请使用rstrip
:
from string import punctuation
def censor(text, word):
l2 = len(word)
p = "*" * l2
return " ".join([ch if ch.rstrip(punctuation) != word else p for ch in text.split(" ")])
In [3]: censor("foo! foobar","foo")
Out[3]: '*** foobar'
答案 1 :(得分:2)
严肃地使用电池...... - )
def censor(text, word):
r = "*" * len(word)
return text.replace(word, r)
print censor("hey hey hey", "hey")
测试:
python replace.py
*** *** ***
str.replace的文档:
答案 2 :(得分:1)
使用内置的string.replace
方法:
def censor(text, word):
new = len(word) * '*' # as many asterisks as characters in word
return text.replace(word, new) # return censored string
现在我们应该测试censor
方法:
>>> print censor('Holy crap.', 'crap') # prints Holy ****.
答案 3 :(得分:0)
您尝试做的只是替换字符串中的内容。有一种方法:
def censor(text, word):
return text.replace(word, "*" * len(word))
In [2]: censor("hey hey hey", "hey")
Out[2]: '*** *** ***'
答案 4 :(得分:0)
这比你做的简单得多 -
def censor(text, word):
p = '*' * len(word)
return text.replace(word,p)