2016-07-17 92 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'錯誤。任何幫助或指引我在正確的方向將不勝感激。

+0

那麼,什麼是你的問題呢? –

+0

每次執行程序時,它都會返回原始字符串,而不是附加的字符串。它一定是我的一個語法錯誤,但我不確定它出錯的地方。 – adep7

+0

原始字符串可以有空格嗎?如果是,在更換WUT後應該怎麼辦?如果WUT和空間相鄰,該怎麼辦? – mcsim

回答

4

你很近! str.replace()不能「in-place」工作;它會返回一個新的字符串,它已經執行了所請求的替換。

返回字符串的副本,其中所有出現的舊字符串都被new替換。如果給出可選的參數計數,則僅替換第一個計數事件。

執行此代替:

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

例如:

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

啊!這很有道理。非常感謝您的幫助,我真的很感激:) – 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

實際上並沒有把它全部放在一行上更高效。但是,由於'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提及問題的真正來源......字符串是不可改變的! –

+0

但是這樣會造成不必要的輸出空間,就像這個「A B C」一樣。 –

+0

對不起,我錯過了你想要刪除填充空間的點。我會更新我的答案,包括這個 –

相關問題