文字列内の単語を別の単語に置き換えたい。元。replaceWord("cool","awesome","Stack Overflow is cool.") 出力は次のようになります。
def replaceWord(oldWord,newWord,aStr):
aStr.replace(oldWord,newWord)
return aStr
文字列内の単語を別の単語に置き換えたい。元。replaceWord("cool","awesome","Stack Overflow is cool.") 出力は次のようになります。
def replaceWord(oldWord,newWord,aStr):
aStr.replace(oldWord,newWord)
return aStr
def replaceWord(old, new, astr):
return astr.replace(old, new)
文字列操作はインプレースではありません。代わりに、文字列は不変であるため、replace() は新しい文字列を作成します。
しかし、待ってください...なぜ独自の文字列 replaceWord() メソッドが必要なのですか?
文字列には独自の組み込みの replace() メソッドがあります。
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)
この違いは、replace 関数から返された (新しい) 文字列をキャッチしなかったことです。
理想的aStr.replace(oldWord,newWord)
には、関数にラップせずに使用する必要があると考えました。その方がオーバーヘッドが少なくなり、コードがより明確になります。
最初の単語のみを置き換えたい場合は、3 番目のオプションのパラメーターを追加できます。これは、置換の回数です。
の戻り値を使用しないのはなぜaStr.replace(oldWord,newWord)
ですか? この関数を別の関数内にネストする必要があるのはなぜですか? あなたの質問はreplace
、インプレース操作ではないためです。次のようなことをする必要があります:
return aStr.replace(oldWord, newWord)
とにかく、関数でラップしたのはまだ奇妙だと思います...
これを試して
def replaceWord(oldWord,newWord,aStr):
aStr = aStr.replace(oldWord,newWord)
return aStr