Fácil Python
Gerador de números pares
Enunciado
Escreva uma função geradora pares(n) que produza os números pares de 0 até n-1 (inclusive se n for ímpar). Use yield.
Requisitos
- A função deve ser um gerador (usar
yield). - Deve aceitar um inteiro
ne gerar apenas números pares menores quen. - O resultado deve ser consumido em um
fore impresso um por linha.
Código inicial
def pares(n):
# complete usando yield
pass
# Teste:
for p in pares(10):
print(p)
Saída esperada
0
2
4
6
8
Ver dica
Percorra range(0, n) e verifique se o número é par com if x % 2 == 0 antes de dar yield.
Mostrar solução
def pares(n):
"""Gera números pares de 0 até n-1."""
for x in range(n):
if x % 2 == 0:
yield x # só produz quando o número é par
# Consome o gerador e imprime cada valor
for p in pares(10):
print(p)
Passo a passo
- Definimos a função
pares(n)com umforque percorrerange(n). - A cada iteração, testamos
x % 2 == 0para saber sexé par. - Se for par,
yield xpausa a função e devolve o valor para quem está consumindo. - O laço
for p in pares(10)chamanext()repetidamente até o gerador se esgotar. - Cada valor par é impresso em uma linha.
Por que funciona
O yield transforma a função em um gerador. Em vez de construir uma lista inteira, o código só calcula o próximo par quando o for pede. Isso é avaliação preguiçosa: os valores são produzidos um a um, sob demanda.
Erros comuns
- Esquecer o
yielde usarreturn: a função retornaNonee oforfalha comTypeError: 'NoneType' object is not iterable. - Usar
range(0, n, 2)diretamente noforsem gerador: funciona, mas não é um gerador; o enunciado pedeyield. - Confundir
range(n)comrange(n+1): o intervalo é0an-1, entãopares(10)não inclui 10.
Outra forma de resolver
Se a intenção fosse apenas obter os pares, poderia ser uma expressão geradora:
def pares(n):
return (x for x in range(n) if x % 2 == 0)
Essa versão é mais curta e também preguiçosa, mas o enunciado pede explicitamente yield.
Saída esperada
0
2
4
6
8