2016-08-02 7 views
0
def replaceChar(myString, oldChar, newChar): 

    # if myString has no characters left, return newString 
    if myString == '': 
     return newString 

    elif myString[0] == oldChar: 
     # then add newChar to newString 

    else: 
     # then add myString[0] to newString 

    # Chop the first character off of myString 
    myString = myString[1:] 

    # recurse 
    replaceChar(myString, oldChar, newChar) 

文字列が不変なので、newCharまたはoldCharをnewStringに追加できません。 newStringをリストにすることはできません。なぜなら、各再帰ループで上書きされるからです。私はまた、規則の中にすべてが関数の中になければならないので、関数の外でそのリストを定義することはできません。これらの文字を新しい文字列に追加するにはどうすればよいですか?Pythonを使用して文字列の文字を再帰的に置き換えます。

+0

ドゥいくつかのサンプル入力/期待出力がありますか? – sberry

+0

replaceChar( 'サンプル入力がいくつかありますか'、 'o'、 'X')は 'DX yXu have SXme sample input'を返します –

答えて

1

明らかにあなたが実際にこの種の問題のために、このような再帰的なソリューションを使用したことがないだろうが、ここでは、とにかくです:

def replaceChar(inval, old, new): 
    if inval == '': 
     return '' 
    if inval[0] == old: 
     return new + replaceChar(inval[1:], old, new) 
    return inval[0] + replaceChar(inval[1:], old, new) 

そして

print(replaceChar('Do you have some sample input', 'o', 'X')) 

利回り

DX yXu have sXme sample input 
+0

なぜ空の文字列を返しますか? –

+0

私はその理由を知っています。これは、new(inval [0])+ replaceChar(inval [1:] ...)を返すときにnewまたはinval [0]で何かを連結していると宣言したからです。連結が可能なように、値、具体的には文字列値を指定する必要があります。そのため、返り値や文字列型を連結するために ""を返すだけです。 –

+1

@ manbearpig1長い時間前に再帰で学んだ最高のレッスンは、あなたの最終ケースを決定する最初のステップです。そして、はい、あなたは常に文字列を返すことを望みます。 – sberry

関連する問題