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:
    1. Uma frase (linha inteira).
    2. Uma palavra antiga (a que deve ser substituída).
    3. 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ó)
  1. Ler a frase inteira (linha).
  2. Ler a palavra antiga (string simples).
  3. Ler a palavra nova (string simples).
  4. Criar um padrão regex que corresponda à palavra antiga como palavra inteira: concatenar o limite \b, a palavra antiga escapada e outro \b.
  5. Usar a função de substituição da regex para trocar todas as ocorrências dessa palavra pela palavra nova.
  6. 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 \text{old} = “parte”, o padrão será \verb|r’\b’ + re.escape(old) + r’\b’| que resulta efetivamente em \verb|\bparte\b|.
  • 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:
    1. Frase: Quem parte e reparte fica com a maior parte
    2. Palavra antiga: parte
    3. 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)

Exercícios relacionados