我最近一直在通过Codecademy学习Python,并遇到了以下问题。
要求学生编写一个简单的函数,该函数将使用两个字符串并用'*'
s替换第一个字符串中出现的第二个字符串的实例。因此,如果文本
包含字符串"What the fudge was that"
和包含字符串fudge的单词
函数应返回"What the ***** was that"
。
另一名学生要求他们的代码提供帮助,他们声称这些代码在他们的PC上工作但在Codecademy中没有。
他们的代码如下:
def censor(text, word):
frase = text.split()
for p in frase:
if p == word:
frase = [word.replace(p, "*"*len(word)) for word in frase]
return " ".join(frase)
今天早上我试着理解代码。我发现当使用Python 3解释器运行时,当函数分别传递"What the fudge was that"
和"fudge"
时,它可以正常工作。
使用Python 2解释器运行时(与Codecademy一样),该函数未返回正确的结果。通过一些更多的调查,我发现问题在于列表理解表达式。在第一次执行后,它会将word
的值更改为列表frase
中最后一项的值。
我不明白为什么会这样。有人可以对此有所了解吗?