2017-12-19 8 views
0

マイコードは、リストに分割された文字列を繰り返し、古いオカレンスをすべて新しいオカレンスに置き換えてから文字列を返すことを意図しています。1つのオカレンスの破棄

まあ
def replace(s, old, new): 
    ch="" 
    i=0 
    newMsg=s.split() 
    print newMsg 
    for ch in newMsg: 
     if ch==old: 
      newMsg[i]=newMsg[i].replace(old, new) 
     else: 
      i = i +1 
    return ' '.join(newMsg) 
+1

「s.replace(old、new)」だけでなく、 – DJK

+0

私の悪い:< –

答えて

2

あなたのchは同じ古いなければ、私は増加しないので:私の問題は最初の発生がカウントされ、他の人が同じに維持されるように思われていることであるが 。このように修正できました。

def replace(s, old, new): 
    ch="" 
    i=0 
    newMsg=s.split() 
    print newMsg 
    for ch in newMsg: 
     if ch==old: 
      newMsg[i]=newMsg[i].replace(old, new) 
      i=i+1 
     else: 
      i = i +1 
    return ' '.join(newMsg) 

言われているように、そうする必要はありません。列挙を使用することができます。

def replace(s, old, new): 
    ch="" 
    newMsg=s.split() 
    print newMsg 
    for i,ch in enumerate(newMsg): 
     if ch==old: 
      newMsg[i]=newMsg[i].replace(old, new) 
    return ' '.join(newMsg) 
+0

または 'else'ステートメントは完全に削除でき、' i = i + 1'はインデントされていません。 –

+0

@ sam-pyt yeaまたはそれ – SuperStew

関連する問題