Questão 15: Crie uma função remover_impares ( n ) que retorne um novo número contendo apenas os dígitos pares de n , na ordem em que aparecem.
Exemplo: remover_impares(123456) deve retornar 246.
Passo 1
O enunciado pede para criar uma função chamada remover_impares(
) que retorne um novo número contendo apenas os dígitos pares de
, mantendo a ordem em que aparecem os dígitos em
.
Informações dadas e/ou assumidas:
Informações dadas e/ou assumidas:
- A entrada é um inteiro
. (Vou tratar também o caso de negativo de forma natural — isso não foi explicitado, mas deixa a função mais robusta.) - Exemplo dado: remover_impares(
) deve retornar . - Não foi dito o que fazer se não houver dígitos pares; adotarei o comportamento razoável: retornar
.
Passo 2
Visão geral do método escolhido (sem começar a calcular ainda): usar manipulação de string é a forma mais direta e fácil de entender. A ideia geral:
- Transformar
em string para percorrer os dígitos da esquerda para a direita — isso preserva a ordem original automaticamente. - Para cada caractere (dígito) verificar se é par. Se for, concatenar ao resultado parcial (string).
- Ao final, converter a string resultante para inteiro e devolver. Se nenhum dígito par existir, devolver
.
Essa abordagem é simples, fácil de implementar em prova e não exige raciocínio extra para manter a ordem dos dígitos.
Passo 3
Conceitos necessários (bem mastigados):
- Dígito: cada caractere em uma representação decimal. Por exemplo, em
os dígitos são , , . - Paridade: um dígito
é par quando o resto da divisão de por é . Em notação, é par se . Exemplos: é par, é par, é par; são ímpares. - Converter caractere para número: em Python usamos int(caractere) para transformar, por exemplo, o caractere
em . - Converter número para string: str(
) dá a representação decimal de , por exemplo str( ) = .
Passo 4
Escrevendo o algoritmo em palavras passo a passo (já detalhado para você poder reproduzir na prova):
- Se
for negativo, guardar o sinal e trabalhar com (valor absoluto), para não complicar a análise dos caracteres. No final, reaplicar o sinal se fizer sentido. - Fazer
str( ). Agora é a sequência de caracteres dos dígitos, por exemplo para temos . - Inicializar uma string vazia resultado:
. - Para cada caractere
em , faça: - Converter para inteiro:
int( ). - Checar paridade: se
então concatenar ao .
- Converter para inteiro:
- Depois do laço, se
estiver vazia isso significa que não havia dígitos pares; retornar . - Caso contrário, converter
int( ) e retornar (se original era negativo e , podemos retornar , mas é , então não há problema).
Observações:
- Ao converter a string final para inteiro, quaisquer zeros à esquerda são automaticamente removidos (por exemplo, se
o int vira ). Isso faz sentido porque a saída pedida é um número. - Se quiser garantir que quando
a função retorne , o algoritmo acima já cobre isso: str( ) = “0”, int(“0”) = 0, e como é par, o resultado é .
Passo 5
Implementação detalhada em Python (cada linha comentada para você entender e lembrar na hora da prova):
def remover_impares(n):
# Lidar com o sinal: se n for negativo, lembra e usa o absoluto
sign = -1 if n < 0 else 1
s = str(abs(n)) # s é a string dos dígitos de |n|
res_str = "" # vamos construir a string dos dígitos pares
for c in s: # percorre dígito por dígito, da esquerda para a direita
d = int\text{(c)} # converte o caractere para o número correspondente
if d % 2 == 0: # checa se o dígito é par (resto da divisão por 2 igual a 0)
res_str += c # concatena o caractere na string resultado
if res_str == "": # se não encontrou nenhum dígito par
return 0
res_num = int(res_str) # converte a string resultante para inteiro
return sign * res_num # reaplica o sinal (se houver); note que sign*0 = 0
Passo 6
Executando o exemplo passo a passo para fixar:
- Entrada:
. Então . - Iteração:
-
→ → (ímpar) → não concatena. -
→ → (par) → . -
→ → ímpar → não concatena. -
→ → par → . -
→ ímpar → não concatena. -
→ par → .
-
- Ao final,
→ int(“246”) = → retorna . Confere com o exemplo pedido.
Passo 7
Casos especiais e justificativas (pra tu não tropeçar na prova):
- Se
não tiver dígitos pares (por exemplo, ), o laço deixa e retornamos . Isso é uma escolha lógica: não existe número formado por nenhum dígito, então é um retorno neutro e numérico. - Se
tiver zeros entre os dígitos (por exemplo, ), zeros são dígitos pares; no processo pode começar com “0” — na conversão final para inteiro o zero à esquerda some: ex.: “02” → . Isso está de acordo com o pedido que a saída seja um número. - Se quiseres uma versão que retorne uma string em vez de número (mantendo zeros à esquerda), é só devolver
sem converter; mas o enunciado pediu “novo número”, então convertemos para inteiro.
Passo 8
Alternativa sem usar strings (apenas para saber): extrair dígitos com operações aritméticas dá os dígitos do fim para o começo. Então, para preservar ordem, devemos:
- Repetidamente fazer: pegar último dígito com
, dividir . - Se
for par, empilhar (por exemplo, adicionar a uma lista). - Ao final, a lista está na ordem inversa; inverter a lista e reconstruir o número dígito a dígito.
Esse método funciona e evita strings, mas é um pouco mais verboso — por isso em prova a solução por string costuma ser preferida por ser mais direta.
Resposta
def remover_impares(n):
sign = -1 if n < 0 else 1
s = str(abs(n))
res_str = “”
for c in s:
d = int(c)
if d % 2 == 0:
res_str += c
if res_str == “”:
return 0
res_num = int(res_str)
return sign * res_num
sign = -1 if n < 0 else 1
s = str(abs(n))
res_str = “”
for c in s:
d = int(c)
if d % 2 == 0:
res_str += c
if res_str == “”:
return 0
res_num = int(res_str)
return sign * res_num