0

したがって、すべての ch が ch2 に置き換えられた新しい文字列を返したい場所の下に、この関数があります。

def replace(s, ch, ch2):
'''(str, str, str) - > str
Return a new string where every instance of ch in s is replaced with ch2
Precondition: len(ch) == 1 and len(ch2) == 1
'''

i = 0
m = s[i]
while i < len(s):
    if s[i] == ch:
        return ch2
    m = m + s[i]
    i += 1
return m

これを入力すると:

replace('razzmatazz', 'z', 'r')

出力を次のようにしたい:

'rarrmatarr'

いくつかの方法を試しましたが、取得できません'r' or 'rr'

誰かが私がどこで間違ったのか教えてもらえますか?

4

5 に答える 5

1

あなたのコードは.,

i = 0
m = s[i]
while i < len(s):
    if s[i] == ch:
        m = m + ch2 // Here you are lagging.
     else   
        m = m + s[i]
    i += 1
return m

なぜなら、あなたのコードでは、文字列内のrazzmatazzif firstzが then を置き換える代わりに一致する場合、ch2ie を返すからrです。したがって、あなたは得てrいます。

于 2013-06-16T19:21:35.087 に答える
0

returnループ中であっても、すぐに値を返し、関数を終了します。おそらく、そのループを取り除き、代わりにwhileナイス ループを使用することをお勧めします。for

def replace(s, ch, ch2):
    '''(str, str, str) - > str
    Return a new string where every instance of ch in s is replaced with ch2
    Precondition: len(ch) == 1 and len(ch2) == 1
    '''

    result = ''

    for char in s:
        if char == ch:
            result += ch2
        else:
            result += char

    return result

組み込みメソッドを使用した方が良いでしょうがstr.replace

def replace(s, ch, ch2):
    return s.replace(ch, ch2)

またはより簡潔に:

replace = str.replace
于 2013-06-16T19:21:14.307 に答える