函数,将字符串中的单词变成星号

时间:2018-09-06 16:19:18

标签: python function

我正在做一个练习,其中im定义了一个需要两个输入的函数-一个句子和一个单词,在句子输入中将被星号代替。

问题是,我无法获得最终的输出来在单词之间放置空格,即,它会打印所有挤在一起的单词。有什么帮助吗?

def censor(text, word):

  lis = text.split()

  output =""

  p = []

  for w in lis:
    if w != word:
      p.append(w)

    else:
      l = len(w)
      y = "*" * l
      p.append(y)

  output = output.join(p)

  print output

  censor("Hello world televison", "world")

2 个答案:

答案 0 :(得分:2)

您不需要先将output初始化为空字符串。您可以

 output = " ".join(p)

请注意" ".join(),它决定了如何连接字符串。在这种情况下,它是一个空格。另外,您需要从函数中返回一些内容,因此应该使用{p> 1代替

print

答案 1 :(得分:0)

这是另一种解决方案,尽管有些棘手,但它应该处理所有可能发生的不同情况:

def censor(text, word):
    text = '.' + text + '.'
    for i in range(len(text)):
        if text[i].lower() == word[0].lower():
            toCensor = True
            for j in range(len(word)):
                if text[i + j].lower() != word[j].lower():
                    toCensor = False
                    break
            if toCensor:
                if (ord(text[i - 1]) < ord('A') or ord(text[i - 1]) > ord('z'))\
                and (ord(text[i + len(word)]) < ord('A') or ord(text[i + len(word)]) > ord('z')):
                    lst = list(text)
                    for j in range(len(word)):
                        lst[i + j] = '*'
                    text = "".join(lst)
    lst = list(text)
    lst = lst[1 : -1]
    return "".join(lst)

censor("World worlds world television", "world")

>>> ***** worlds ***** television

它处理大写字母和所有标点符号。