对于在线课程,我想创建一个称为censor的函数,该函数将两个字符串作为输入(文本和单词),并返回所选单词由星号替换的文本。 示例:
censor("this hack is wack hack", "hack")
应返回:
"this **** is wack ****"
使用for循环,我可以使用该函数,但是我想通过列表理解来实现它,但似乎无法使其正常工作。
def censor(text, word):
words = text.split()
result = ''
censored = '*' * len(word)
[censored if i == word else i for i in words]
result =' '.join(words)
return result
print censor("this hack is wack hack", "hack")
但是,底部的打印功能仅输出'this hack is wack hack'
我在这里想念什么?
答案 0 :(得分:0)
这里
[censored if i == word else i for i in words]
您创建了经过审查的单词列表,但没有对其进行任何引用。
也许您打算将此列表分配回words
变量
words = [censored if i == word else i for i in words]
因为您继续使用该变量来生成返回值。
答案 1 :(得分:0)
从您的归来开始倒退。您返回结果。结果是''.join(words)。什么是单词?单词就是单词= text.split()。您基本上忽略了其他行。
def censor(text, word):
return ' '.join(['*' * len(word) if x == word else x for x in text.split()])
print(censor("this hack is wack hack", "hack"))
答案 2 :(得分:0)
首先, return语句不在函数体内。
第二, 您需要将列表理解的结果存储到某个变量中。
以下代码将起作用:
def censor(text, word):
words = text.split()
result = ''
censored = '*' * len(word)
result=[censored if i == word else i for i in words]
return ' '.join(result)
print(censor("this hack is wack hack", "hack"))
this **** is wack ****