python中的基本字符串错误

时间:2015-01-22 18:17:53

标签: python string

问题: 编写一个名为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星。知道为什么吗?

5 个答案:

答案 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)