Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

[Dúvida] Dúvida no uso do método str.replace(antigo, novo)

Vi durante as aulas que é possível substituir uma letra em uma string utilizando o método str.replace(antigo, novo). Entretanto, fiquei com uma dúvida. Usando parte do meu nome como exemplo, vamos supor que eu precisasse manipular a string "Lys Marie Sanyana" para produzir o resultado escrito de forma correta, "Lys Marie Santana". Eu utilizaria o seguinte código:

nome = 'Lys Marie Sanyana'
nome = nome.replace('y', 't')

O resultado seria então "Lts Marie Santana" (fiz o teste no notebook do collab e resulta nisso mesmo). Como faço para produzir o resultado correto?

Obrigada!

Lys Marie Santana dos Santos Silva.

4 respostas

Olá Lys! Como vai?

Seu nome é tão bonito!

Agradeço por compartilhar sua dúvida conosco. O método str.replace() substitui todas as ocorrências da letra 'y' por 't' na string. Para produzir o resultado correto, você pode utilizar o método str.replace() duas vezes, uma para substituir a letra 'y' por 't' e outra para substituir a letra 'n' por 'm'. Assim:

nome = 'Lys Marie Sanyana'
nome = nome.replace('y', 't')
nome = nome.replace('n', 'm')

Entretanto, esse código funciona bem no exemplo que você compartilhou, mas pode não ser viável em strings muito maiores. Sendo assim, é possível utilizar outro método em conjunto, o str.find(), que procura a primeira ocorrência de um caractere dentro de uma string. O código fica um pouquinho mais complexo, assim:

nome = 'Lys Marie Sanyana'
posicao = nome.find('y')  # Encontra a posição da primeira ocorrência de 'y'
nome = nome[:posicao] + 't' + nome[posicao+1:]

print(nome)

Espero que tenha feito sentido para você!

Abraços.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Obrigada pelo elogio Larissa!!

Eu confesso que não entendi muito bem o que a linha abaixo faz:

nome = nome[:posicao] + 't' + nome[posicao+1:]

Eu fiz o teste do código que usa essa linha no Collab e o resultado que saiu em resposta do print foi: "Lts Marie Sanyana". Pedi para imprimir a variável "posicao' e o valor retornado foi "1". Então vendo o resultado, imagino que o programa procurou mesmo pela ocorrência da primeira letra "y" e substituiu pela letra "t". Mas meu objetivo era ter como resultado do print a resposta "Lys Marie Santana", trocando a segunda ocorrência do "y" e não a primeira. De qualquer forma, o seu código me fez conhecer um método novo, então acho que vou avançar um pouco mais nas aulas e tentar pensar novamente nesse código!

Muito obrigada!!

Lys Marie Santana dos Santos Silva.

solução!

Lys, oi, é verdade!

Você está certa, desculpa pela confusão! Outro método, o rfind(), é o que busca a última ocorrência de uma letra na string, e retorna o nome certinho. Esses métodos também tem a possibilidade de usar mais dois parâmetros que definam onde inicia e onde termina a busca, considerando que cada caractere em uma string seria um número, começando pelo 0, e considerando também os espaços.

Então, se usássemos posicao = nome.find('y', 4, -1), o resultado retornaria correto: 4 representa o caractere M, e -1 é sempre o último valor da string. Podemos utilizar o sinal de negativo para procurar valores de trás para frente.

Sobre essa linha que você ficou com dúvida, funciona assim:

Quando tratamos uma string como se fosse uma lista, cada caractere é um elemento. Fazendo essa concatenação que está na linha nome = nome[:posicao] + 't' + nome[posicao+1:], estamos separando a string nome em

  • nome[:posicao]: Todos os caracteres, desde o início, até o valor da variável posição, que contém o índice da letra 'y' encontrada
  • 't' : a nova letra, que vai substituir
  • nome[posicao+1:] : os caracteres a partir do valor seguinte ao índice da letra 'y' encontrada, até o final

Sendo assim, o valor atribuído a variável nome será a própria variável reconstruída por essa concatenação.

Abraços, Lys! Bons estudos :)

Obrigada mais uma vez Larissa!!

Agora não só entendi, como aprendi mais um método!

Até a próxima!!

:-)