2016-07-17 4 views
2

私はプログラミングに新しいです(そして、これは私の最初の投稿stackoverflowです)。私はこのケース(WUB)で指定された文字列を削除し、スペースで置き換えることになっています。たとえば、song_decoder(WUBWUBAWUBWUBWUBBWUBC)の場合、出力はA B Cとなります。このフォーラムの他の質問から、私は "WUB"を置き換え、空白を削除するには分割/結合を使用する必要があることを立証することができました。ここに私のコードは次のとおりです。Python:指定された文字列から単語を削除する

def song_decoder(song): 
    song.replace("WUB", " ") 
    return " ".join(song.split()) 

私は、コードを実行した後WUB should be replaced by 1 space: 'AWUBBWUBC' should equal 'A B C'のIエラーとしてこれで間違ってんだところ、私はわかりません。どんな助けや正しい方向への私の指しても感謝します。

+0

であることができ、それは短い(1も読みにくく、それを呼び出すことができます)にしますか? –

+0

プログラムを実行するたびに、追加されていない元の文字列が返されます。それは私の最後には構文エラーでなければならないが、どこが間違っているのかわからない。 – adep7

+0

元の文字列にスペースを入れることはできますか?はいの場合、WUTを交換した後に何が起こるはずですか? WUTとスペースが隣接しているとどうなりますか? – mcsim

答えて

4

もうすぐです! str.replace()は「インプレース」では動作しません。要求された置換が実行された新しい文字列を返します。

文字列のコピーを返します。部分文字列oldがすべてnewで置き換えられます。オプションの引数countが指定された場合は、最初のcount個のオカレンスだけが置き換えられます。

代わりにこれを行います。たとえば

def song_decoder(song): 
    song = song.replace("WUB", " ") 
    return " ".join(song.split()) 

In [14]: song_decoder("BWUBWUBFF") 
Out[14]: 'B FF' 
+0

aha!それは完璧な意味合いがあります。おかげさまでありがとう、本当にありがたいです:) – adep7

1

は、単一のラインで両方の手順を実行します。

def song_decoder(song): 
    return ' '.join(song.replace('WUB',' ').split()) 

結果

In [95]: song_decoder("WUBWUBAWUBWUBWUBBWUBC") 
Out[95]: 'A B C' 
+0

ありがとう!私はコードを切り詰めてできるだけ効率的にするのはあまりよく分かりませんが、私はもっと意識してみようと思います。 – adep7

+0

問題ありません別のオプションを示しただけです。 –

+2

実際にはすべてを1行に入れるのは効率的ではありません。しかし、 'song.replace()'は値を返すので、余分な一時変数を持たないので、これは良い方法です。 – Will

4

文字列はPythonで不変です。だから、文字列を変更する(あなたが "置換"機能を使っているように)変数 "曲"は変わりません。むしろ、新しい文字列を作成し、それを何かに割り当てないことによってすぐに捨てます。あなたは

def song_decoder(song): 
    result = song.replace("WUB", " ") # replace "WUB" with " " 
    result = result.split()   # split string at whitespaces producing a list 
    result = " ".join(result)   # create string by concatenating list elements around " "s 
    return result 

を行うことができますか、あなたはだからであなたの問題何

def song_decoder(song): 
    return " ".join(song.replace("WUB", " ").split()) 
+0

問題の本当の原因に言及してUpvoted ...文字列はimmutuableです! –

+0

しかし、これは '' A B C''のように出力に不要なスペースを作っています。 –

+0

申し訳ありませんが、パディングスペースを削除したいという点を忘れました。私はこれを含むように私の答えを更新します –

関連する問題