我正在做一个练习,其中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")
答案 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
它处理大写字母和所有标点符号。