0

我想用另一个词替换字符串中的一个词。前任。replaceWord("cool","awesome","堆栈溢出很酷。") 输出将是:"堆栈溢出很棒" 我不明白为什么我的代码不起作用。

def replaceWord(oldWord,newWord,aStr):
    aStr.replace(oldWord,newWord)
    return aStr
4

4 回答 4

7
def replaceWord(old, new, astr):
   return astr.replace(old, new)

字符串操作永远不会就地 - 而 replace() 将创建一个新字符串,因为字符串是不可变的。

但是等等......为什么你想要你自己的字符串 replaceWord() 方法?

字符串有自己的内置 replace() 方法!

于 2013-09-13T05:13:46.517 回答
1

试试这个

def replaceWord(oldWord,newWord,aStr): 
   aStr = aStr.replace(oldWord,newWord) 
   return aStr
于 2013-09-13T05:15:10.760 回答
1

为什么你不只是使用的返回值aStr.replace(oldWord,newWord)?为什么必须将此函数嵌套在另一个函数中?至于您的问题,这是因为replace不是就地操作。您需要执行以下操作:

return aStr.replace(oldWord, newWord)

无论如何,我仍然觉得你将它包装在一个函数中很奇怪......

于 2013-09-13T05:18:39.840 回答
1

根据http://docs.python.org/2/library/string.html

string.replace(s, old, new[, maxreplace]) 返回字符串 s 的副本,其中所有出现的子字符串 old 都替换为 new。如果给出了可选参数 maxreplace,则替换第一个 maxreplace 出现。

因此,您的代码应修改为:

def replaceWord(oldWord,newWord,aStr):
    return aStr.replace(oldWord,newWord)

这种区别在于您没有从替换函数中捕获返回的(新)字符串。

理想情况下,您应该只使用aStr.replace(oldWord,newWord)而不将其包装在函数中。这样会减少开销,并使代码更清晰。

如果您希望它只替换第一个单词,您可以添加第三个可选参数,即要替换的次数。

于 2013-09-13T05:35:21.107 回答