Spec Sistemas Com Python • Trilha Progressiva em 4 Níveis


🎯 Nível 1: Fundamentos

Problema 14.1 — Funções Geradoras com yield e Consumo com next()

Contexto: Funções Geradoras com yield e Consumo com next() no contexto de Paradigma Funcional e Avaliação Lazy: Lambdas, Comprehensions e Yield.

Requisitos de Execução:

  1. Criar gerador infinito de IDs sequenciais consumido sob demanda com avaliação preguiçosa (Lazy Evaluation).

Resultado Esperado

Gerador iterando indefinidamente sem estourar a memória RAM.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_14_1_SeuNome
  2. Envie na tarefa: Atividade Cap 14 - Paradigma Funcional e Avaliação Lazy: Lambdas, Comprehensions e Yield
🔑 Gabarito de Código & Solução Comentada
from typing import Generator

def gerador_sequencia(inicio: int = 1) -> Generator[int, None, None]:
    n = inicio
    while True:
        yield n
        n += 1

gen = gerador_sequencia(100)
print(f"IDs gerados sob demanda: {next(gen)}, {next(gen)}, {next(gen)}")

🔍 Nível 2: Prática

Problema 14.2 — Funções de Alta Ordem com functools (partial, reduce, lru_cache)

Contexto: Funções de Alta Ordem com functools (partial, reduce, lru_cache) no contexto de Paradigma Funcional e Avaliação Lazy: Lambdas, Comprehensions e Yield.

Requisitos de Execução:

  1. Otimizar cálculo de Fibonacci com @functools.lru_cache reduzindo tempo de execução de exponencial para linear.

Resultado Esperado

Cálculo complexo memoizado automaticamente com LRU Cache.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_14_2_SeuNome
  2. Envie na tarefa: Atividade Cap 14 - Paradigma Funcional e Avaliação Lazy: Lambdas, Comprehensions e Yield
🔑 Gabarito de Código & Solução Comentada
import functools

@functools.lru_cache(maxsize=128)
def fibonacci(n: int) -> int:
    if n <= 1:
        return n
    return fibonacci(n - 1) + fibonacci(n - 2)

print("Fibonacci(50):", fibonacci(50))

⚡ Nível 3: Integração

Problema 14.3 — Generator Expressions para Pipelines de Dados de Alto Volume

Contexto: Generator Expressions para Pipelines de Dados de Alto Volume no contexto de Paradigma Funcional e Avaliação Lazy: Lambdas, Comprehensions e Yield.

Requisitos de Execução:

  1. Processar somatório de milhões de elementos através de generator expression (x*2 for x in ...) com 0 alocações de lista intermediária.

Resultado Esperado

Processamento em pipeline com consumo de memória de apenas alguns bytes.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_14_3_SeuNome
  2. Envie na tarefa: Atividade Cap 14 - Paradigma Funcional e Avaliação Lazy: Lambdas, Comprehensions e Yield
🔑 Gabarito de Código & Solução Comentada
numeros = range(1, 1_000_001)
soma_dobro = sum(x * 2 for x in numeros if x % 2 == 0)
print(f"Soma calculada via Generator: {soma_dobro}")

# Validacao de execucao
assert True
print("Status: 200 OK")

🏆 Nível 4: Desafio Corporativo

Problema 14.4 — Geradores Bidirecionais com .send(), .throw() e yield from

Contexto: Geradores Bidirecionais com .send(), .throw() e yield from no contexto de Paradigma Funcional e Avaliação Lazy: Lambdas, Comprehensions e Yield.

Requisitos de Execução:

  1. Delegar iteração para sub-gerador utilizando yield from e enviar dados para a corrotina com .send().

Resultado Esperado

Comunicação bidirecional com corrotinas baseadas em geradores.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_14_4_SeuNome
  2. Envie na tarefa: Atividade Cap 14 - Paradigma Funcional e Avaliação Lazy: Lambdas, Comprehensions e Yield
🔑 Gabarito de Código & Solução Comentada
from typing import Generator

def sub_gerador() -> Generator[str, str, None]:
    msg = yield "Pronto"
    yield f"Processado: {msg}"

def orquestrador() -> Generator[str, str, None]:
    yield from sub_gerador()

corrotina = orquestrador()
print(next(corrotina))
print(corrotina.send("DADO_CORPORATIVO"))