Prova 2: substitua()

Prova 2: substitua()

por José Coelho de Pina -
Número de respostas: 2
def substitua(s, velha, nova):
    ''' (str, str) -> str
    Recebe três strings: s, velha, e nova. 
    Retorna uma string t que é obtida percorrendo-se a string s e 
    substituindo-se cada ocorrência da string velha pela string nova,
    a medida que velha é encontrada em s.

    Exemplos:
    >>> substitua("Catarina viu uma tarantula em cima da tartaruga", "a", "-|.")
    'C-|.t-|.rin-|. viu um-|. t-|.r-|.ntul-|. em cim-|. d-|. t-|.rt-|.rug-|.'
            
    >>> substitua("Catarina viu uma tarantula em cima da tartaruga", "tar", "")  
    'Caina viu uma antula em cima da uga'
    
    >>> substitua("comer correr conter c", "er c", ".")  
    'com.orr.ont.'

    >>> substitua("nanananan", "nan", "x")
    'xaxan'
    '''
    t = ""
    nV = len(velha)
    if nV == 0: return s # nada a fazer
    n  = len(s)
    i = 0 
    while i < n:
        j = 0
        while j < nV and i+j < n and velha[j] == s[i+j]:
            j += 1
        if j == nV:
            t += nova
            i += nV
        else:
            t += s[i]
            i += 1
    return t
Em resposta à José Coelho de Pina

Re: Prova 2: substituia()

por José Coelho de Pina -
def substitua(s, velha, nova):
    ''' (str, str) -> str
    Recebe três strings: s, velha, e nova. 
    Retorna uma string t que é obtida percorrendo-se a string s e 
    substituindo-se cada ocorrência da string velha pela string nova,
    a medida que velha é encontrada em s.

    Exemplos:
    >>> substitua("Catarina viu uma tarantula em cima da tartaruga", "a", "-|.")
    'C-|.t-|.rin-|. viu um-|. t-|.r-|.ntul-|. em cim-|. d-|. t-|.rt-|.rug-|.'
            
    >>> substitua("Catarina viu uma tarantula em cima da tartaruga", "tar", "")  
    'Caina viu uma antula em cima da uga'
    
    >>> substitua("comer correr conter c", "er c", ".")  
    'com.orr.ont.'

    >>> substitua("nanananan", "nan", "x")
    'xaxan'
    '''
    nV = len(velha)
    if nV == 0: return s # nada a fazer
    t = ""  
    ini = 0 # prefixo de s[ini:] será comparado com velha
    j   = 0 # j=0,1,...,nV percorre string velha
    for i in range(0, len(s), 1):
        if s[i] == velha[j]:
            j += 1
            if j == nV:
                t += nova
                j = 0
                ini = i + 1
        else:
            t += s[ini:i+1]
            j = 0
            ini = i + 1
    return t + s[ini:]
Em resposta à José Coelho de Pina

Re: Prova 2: substitua()

por José Coelho de Pina -
def substitua(s, velha, nova):
    ''' (str, str) -> str
    Recebe três strings: s, velha, e nova. 
    Retorna uma string t que é obtida percorrendo-se a string s e 
    substituindo-se cada ocorrência da string velha pela string nova,
    a medida que velha é encontrada em s.

    Exemplos:
    >>> substitua("Catarina viu uma tarantula em cima da tartaruga", "a", "-|.")
    'C-|.t-|.rin-|. viu um-|. t-|.r-|.ntul-|. em cim-|. d-|. t-|.rt-|.rug-|.'
            
    >>> substitua("Catarina viu uma tarantula em cima da tartaruga", "tar", "")  
    'Caina viu uma antula em cima da uga'
    
    >>> substitua("comer correr conter c", "er c", ".")  
    'com.orr.ont.'

    >>> substitua("nanananan", "nan", "x")
    'xaxan'
    '''
    t = ""
    nV = len(velha)
    n  = len(s)
    i = 0 # prefixo de s[i:] será comparado com a string velha 
    while i < n:
        if s[i:i+nV] == velha:
            t += nova
            i += nV
        else:
            t += s[i]
            i += 1
    return t