Escreva um programa que lê uma frase, uma palavra antiga e uma palavra nova. O programa deve imprimir a frase com as ocorrências da palavra antiga substituídas pela palavra nova.
Exemplo:
- Frase: “Quem parte e reparte fica com a maior parte”
- Palavra antiga: “parte”
- Palavra nova: “parcela”
- Saída: “Quem parcela e reparte fica com a maior parcela”
Passo 1
O que o enunciado pede e quais informações ele dá:
- O programa deve ler três entradas, nesta ordem:
- Uma frase (linha inteira).
- Uma palavra antiga (a que deve ser substituída).
- Uma palavra nova (pela qual substituímos).
- O programa deve imprimir a frase com as ocorrências da palavra antiga trocadas pela palavra nova.
- Observação importante retirada do exemplo: na frase “Quem parte e reparte fica com a maior parte”, substituindo a palavra antiga “parte” pela nova “parcela”, o resultado é “Quem parcela e reparte fica com a maior parcela”. Ou seja, a ocorrência em “reparte” não foi trocada — implicando que devemos substituir somente ocorrências como palavra inteira (limites de palavra), não substrings dentro de outras palavras.
- O enunciado não especifica sensibilidade a maiúsculas/minúsculas; siga o comportamento mais direto: substituição sensível a maiúsculas (case-sensitive). Explico depois como alterar isso se quiseres.
Passo 2
Escolha do método de resolução (sem resolver ainda):
- Há várias formas de fazer isso: dividir a frase em palavras e reconstituir, fazer varredura manual caractere a caractere, ou usar expressões regulares (regex) com limites de palavra.
- Vou usar expressões regulares porque são a forma direta e robusta para “substituir somente palavras inteiras” mesmo quando há pontuação (por exemplo, “parte,” ou “parte.”) ao redor. Também permitem escapar caracteres especiais se a palavra antiga tiver algum deles.
- Vou demonstrar o código em Python — é curto, legível e comum em provas/programas desse tipo.
Passo 3
Conceitos que você precisa entender (explicado de forma leve e prática)
- O que é uma expressão regular (regex): é uma forma de descrever padrões em texto. Por exemplo, um padrão pode dizer “ache a palavra ‘parte’ apenas quando estiver sozinha”.
- Limite de palavra: na regex usa-se o metacaractere \b (backslash b) para significar “borda de palavra” — começa ou termina uma palavra. Assim, o padrão \bparte\b encontra “parte” como palavra inteira, mas não dentro de “reparte”.
- Função de substituição: em Python usamos re.sub(pattern, replacement, string) para substituir todas as ocorrências do pattern por replacement na string.
- Escapar caracteres: se a palavra antiga tem caracteres que a regex interpretaria (como “.”, “*”, “?”, etc.), usamos re.escape(palavra) para tratar literalmente a palavra.
- Todas essas ferramentas juntas nos dão uma substituição correta e simples.
Passo 4
Passo a passo do algoritmo (o raciocínio — ainda não o código de uma tacada só)
- Ler a frase inteira (linha).
- Ler a palavra antiga (string simples).
- Ler a palavra nova (string simples).
- Criar um padrão regex que corresponda à palavra antiga como palavra inteira: concatenar o limite \b, a palavra antiga escapada e outro \b.
- Usar a função de substituição da regex para trocar todas as ocorrências dessa palavra pela palavra nova.
- Imprimir a frase resultante.
Passo 5
Detalhes práticos e explicação de cada operação (para você fazer na prova)
- Como ler linhas em Python: a função \input() lê uma linha do teclado como string. Para ler três entradas em três linhas, usamos três chamadas a \input().
- Como construir o padrão com limites de palavra: use um raw string (prefixo r) e re.escape para que a palavra antiga seja interpretada literalmente.
- Exemplo de padrão gerado: se
“parte”, o padrão será \verb|r’\b’ + re.escape(old) + r’\b’| que resulta efetivamente em \verb|\bparte\b|.
- Exemplo de padrão gerado: se
- Como substituir: \verb|re.sub(pattern, new, frase)| retorna a nova frase com todas as substituições.
- Caso a palavra antiga apareça com pontuação colada (ex.: “parte,”), o \b funciona e a substituição ocorre corretamente.
- Caso queiras ignorar maiúsculas/minúsculas (substituir “Parte” ou “PARTE”), usar \verb|flags=re.IGNORECASE| em re.sub. Se precisares preservar o estilo de capitalização (ex.: “Parte” → “Parcela”), precisa-se de função de substituição mais elaborada; explico rapidamente: usar uma função que verifica a case da ocorrência e devolve a replacement com case ajustado.
Passo 6
Possíveis armadilhas e como evitá-las (coisas que costumam pegar quem está com pressa)
- Não usar apenas \str.replace(old, new) porque isso troca substrings dentro de outras palavras (ex.: “reparte” vira “reparcela”) — e o exemplo mostra que isso é indesejável.
- Se a palavra antiga estiver vazia (string vazia), convém decidir um comportamento (na implementação abaixo, vamos assumir que a palavra antiga não é vazia; em prova podes checar e, se vazia, apenas imprimir a frase original).
- Se a palavra antiga contiver caracteres especiais da regex, re.escape cuida disso.
- Em Python 3, \w e \b trabalham bem com caracteres Unicode (acentos), então normalmente funciona para palavras em português.
Passo 7
Teste mental com o exemplo do enunciado (para ganhar confiança)
- Entradas:
- Frase: Quem parte e reparte fica com a maior parte
- Palavra antiga: parte
- Palavra nova: parcela
- O padrão será \verb|\bparte\b| e a substituição resultará em “Quem parcela e reparte fica com a maior parcela” — exatamente o esperado.
Passo 8
Agora o código final em Python (curto e pronto para usar). Este código lê as três linhas, faz a substituição só por palavras inteiras e imprime o resultado.
Resposta
import re
frase = input()
old = input()
new = input()
# Se a palavra antiga for vazia, não fazemos nada (evita loop/erro)
if old == "":
print(frase)
else:
pattern = r"\b" + re.escape(old) + r"\b"
resultado = re.sub(pattern, new, frase)
print(resultado)