Questão 20: Crie uma função remover_multiplos(lista, k) que retorne uma nova lista contendo apenas os elementos da lista original que não são múltiplos de k.

Passo 1

O enunciado pede que eu crie uma função chamada remover_multiplos que receba dois parâmetros: uma lista e um número k, e retorne uma nova lista contendo apenas os elementos da lista original que NÃO são múltiplos de k.
Informações dadas/esperadas:
  • Nome da função: remover_multiplos(lista, k)
  • Entrada 1: uma lista (vou assumir que contém números inteiros, que é o caso mais comum em provas)
  • Entrada 2: um número k (assumo inteiro; trataremos o caso k=0 separadamente)
  • Saída: nova lista com os elementos da lista original que não são múltiplos de k
  • Deve preservar a ordem dos elementos que permanecem
Não foi dada nenhuma outra restrição no enunciado (por exemplo: tipo dos elementos, comportamento para k=0), então vou escolher um comportamento razoável e explicá-lo.

Passo 2

O que significa "ser múltiplo de k"? Vou explicar isso de forma bem direta.
Definição: dizemos que um número a é múltiplo de k se existe um inteiro n tal que
a = n \cdot k.
Exemplos concretos:
  • 12 é múltiplo de 3 porque 12 = 4 \cdot 3.
  • 7 não é múltiplo de 3 porque não existe inteiro n com 7 = n\cdot 3.
Na prática de programação usamos a operação de resto (o operador módulo) para testar múltiplos: um número a é múltiplo de k exatamente quando o resto da divisão de a por k é zero, isto é, quando a \bmod k = 0. Em Python isso é testado com a % k == 0.

Passo 3

Como implementar a verificação num passo prático:
  • Para cada elemento x da lista, calculamos x % k.
  • Se x % k == 0, então x é múltiplo de k e devemos removê-lo (ou seja, não colocá-lo na lista resultante).
  • Se x % k != 0, então x não é múltiplo de k e devemos mantê-lo na lista resultante.
Exemplo rápido de uso do módulo:
  • 12 % 3 == 012 é múltiplo de 3.
  • 7 % 3 == 17 não é múltiplo de 3.

Passo 4

Tratamento do caso k = 0: por que é especial?
  • Matematicamente, os múltiplos de 0 são exatamente os números da forma n\cdot 0, isto é, apenas 0.
  • Em Python, fazer x % 0 gera um erro (ZeroDivisionError), portanto NÃO podemos usar o operador % quando k=0.
Decisão de projeto (escolha razoável para a prova): quando k = 0, consideramos que “ser múltiplo de 0” significa ser igual a 0; portanto a função vai remover apenas os zeros da lista. Outra alternativa seria lançar exceção, mas remover zeros é mais tolerante e útil em exercícios desse tipo — vou implementar dessa forma e explicar o porquê.

Passo 5

Algoritmo final (passo a passo) que implementaremos:
  1. Se k = 0, retornamos uma nova lista contendo apenas os elementos da lista original que são diferentes de 0.
  2. Caso contrário ( k \ne 0 ), iteramos por cada elemento x da lista original e mantemos x na nova lista só se x % k != 0.
  3. A implementação mais curta e clara em Python usa list comprehension para construir a nova lista mantendo a ordem dos elementos.
Complexidade: percorremos a lista uma vez, portanto a complexidade é O(n) onde n é o tamanho da lista.

Passo 6

Testes/Exemplos para fixar a ideia (cada verificação explicada passo a passo):
Exemplo 1:
  • Entrada: lista = [1, 2, 3, 4, 5, 6, 9, 12, 0, -3], k = 3
  • Múltiplos de 3 na lista: 3, 6, 9, 12, 0, -3
  • Resultado esperado (removendo esses múltiplos): [1, 2, 4, 5]
Passo a passo para 4: 4 % 3 == 1 → não é múltiplo → mantemos 4.
Exemplo 2 (caso especial k = 0):
  • Entrada: lista = [0, 1, 2, 0, 3], k = 0
  • Como k = 0, removemos apenas os zeros.
  • Resultado esperado: [1, 2, 3]
Exemplo 3 (números negativos e zero):
  • Entrada: lista = [-6, -4, 0, 7], k = 2
  • -6 % 2 == 0 → múltiplo → remover -6
  • -4 % 2 == 0 → múltiplo → remover -4
  • 0 % 2 == 0 → múltiplo → remover 0
  • 7 % 2 == 1 → não múltiplo → manter 7
  • Resultado: [7]

Passo 7

Observações finais e dicas para a prova:
  • Se o enunciado da prova não mencionar o caso k=0, vale explicitar rapidamente qual decisão você tomou (por exemplo: “assumi que k=0 significa remover zeros” ou "assumi k\neq 0"); isso evita perda de pontos por ambiguidade.
  • Na prova, escreva a função limpa, com comentário curto explicando o comportamento para k=0.
  • Se quiser uma versão que lance erro quando k=0, basta substituir o tratamento por if k == 0: raise ValueError("k não pode ser zero").

Resposta

def remover_multiplos(lista, k):
“”"
Retorna uma nova lista contendo apenas os elementos de lista
que NÃO são múltiplos de k.
Comportamento para k == 0: considera-se que apenas 0 é múltiplo de 0,
portanto remove os zeros da lista.
“”"
if k == 0:
return [x for x in lista if x != 0]
return [x for x in lista if x % k != 0]

Exercícios relacionados