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
, e retorne uma nova lista contendo apenas os elementos da lista original que NÃO são múltiplos de
.
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
(assumo inteiro; trataremos o caso separadamente) - Saída: nova lista com os elementos da lista original que não são múltiplos de
- 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
), então vou escolher um comportamento razoável e explicá-lo.
Passo 2
O que significa "ser múltiplo de
"? Vou explicar isso de forma bem direta.
Definição: dizemos que um número
é múltiplo de
se existe um inteiro
tal que
Exemplos concretos:
-
é múltiplo de porque . -
não é múltiplo de porque não existe inteiro com .
Na prática de programação usamos a operação de resto (o operador módulo) para testar múltiplos: um número
é múltiplo de
exatamente quando o resto da divisão de
por
é zero, isto é, quando
. Em Python isso é testado com
a % k == 0.Passo 3
Como implementar a verificação num passo prático:
- Para cada elemento
da lista, calculamos x % k. - Se
x % k == 0, entãoé múltiplo de e devemos removê-lo (ou seja, não colocá-lo na lista resultante). - Se
x % k != 0, entãonão é múltiplo de e devemos mantê-lo na lista resultante.
Exemplo rápido de uso do módulo:
12 % 3 == 0→12é múltiplo de3.7 % 3 == 1→7não é múltiplo de3.
Passo 4
Tratamento do caso
: por que é especial?
- Matematicamente, os múltiplos de
são exatamente os números da forma , isto é, apenas . - Em Python, fazer
x % 0gera um erro (ZeroDivisionError), portanto NÃO podemos usar o operador%quando.
Decisão de projeto (escolha razoável para a prova): quando
, 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:
- Se
, retornamos uma nova lista contendo apenas os elementos da lista original que são diferentes de 0. - Caso contrário (
), iteramos por cada elemento da lista original e mantemos na nova lista só se x % k != 0. - 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 é
onde
é 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-40 % 2 == 0→ múltiplo → remover07 % 2 == 1→ não múltiplo → manter7- Resultado:
[7]
Passo 7
Observações finais e dicas para a prova:
- Se o enunciado da prova não mencionar o caso
, vale explicitar rapidamente qual decisão você tomou (por exemplo: “assumi que significa remover zeros” ou "assumi "); isso evita perda de pontos por ambiguidade. - Na prova, escreva a função limpa, com comentário curto explicando o comportamento para
. - Se quiser uma versão que lance erro quando
, 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
que NÃO são múltiplos de
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]
“”"
Retorna uma nova lista contendo apenas os elementos de
listaque 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]