Especialização em Sistemas com Python & POO com Type Hints • Capítulo 03


🗺️ Mapa Conceitual do Tópico

flowchart LR
    A["Iterável (list, range, generator)"] -->|"iter()"| B["Iterador (__iter__, __next__)"]
    B -->|for item in iteravel| C["Processamento por Elemento"]
    C -->|"enumerate()"| D["Gera (índice, elemento)"]
    C -->|"zip(a, b)"| E["Combina N coleções em Tuplas"]
    C -->|"Critério de Parada (break)"| F["Encerramento Prematuro"]
    C -->|Conclusão Natural| G["Cláusula else do Laço"]
    
    style A fill:#e1f5fe,stroke:#03a9f4,stroke-width:2px
    style B fill:#fff3e0,stroke:#ff9800,stroke-width:2px
    style C fill:#ede7f6,stroke:#7e57c2,stroke-width:2px
    style G fill:#e8f5e9,stroke:#4caf50,stroke-width:2px

🔁 1. Estruturas Repetitivas e o Protocolo de Iteração

Em Python, a iteração é fundamentada no Protocolo de Iterador (__iter__() e __next__()), tornando laços for extremamente rápidos e eficientes em memória.

Principais Ferramentas de Repetição:

  • while: Repetição orientada a condição ou sentinela.
  • for ... in: Iteração direta sobre qualquer objeto iterável.
  • enumerate(iteravel, start=0): Produz tuplas (indice, elemento) sem a necessidade de contadores manuais.
  • zip(col_a, col_b): Combina múltiplas coleções elemento a elemento em tuplas sincronizadas.
  • for ... else: O bloco else só é executado se o laço for concluído sem interrupção por break.

💻 Exemplo Prático e Tipado

"""
exemplo_03_estruturas_repetitivas.py - Simulação Financeira com Laços Iterativos
"""

from decimal import Decimal, ROUND_HALF_EVEN


def simular_evolucao_capital(
    aporte_inicial: Decimal,
    aporte_mensal: Decimal,
    taxa_mensal: Decimal,
    meses: int
) -> list[dict[str, Decimal]]:
    """Projeta a evolução mensal de investimentos com cálculo de juros compostos."""
    saldo = aporte_inicial
    historico = []

    for mes in range(1, meses + 1):
        rendimento = (saldo * taxa_mensal).quantize(Decimal("0.01"), ROUND_HALF_EVEN)
        saldo += rendimento + aporte_mensal
        historico.append({
            "mes": mes,
            "rendimento": rendimento,
            "saldo_acumulado": saldo,
        })

    return historico


if __name__ == "__main__":
    projecao = simular_evolucao_capital(
        aporte_inicial=Decimal("10000.00"),
        aporte_mensal=Decimal("500.00"),
        taxa_mensal=Decimal("0.01"),
        meses=6
    )

    print("Mês | Rendimento (R$) | Saldo Final (R$)")
    print("-" * 40)
    for p in projecao:
        print(f"{p['mes']:>3} | R$ {p['rendimento']:>12.2f} | R$ {p['saldo_acumulado']:>14.2f}")

🔗 Recursos Pedagógicos do Capítulo 03

Recurso Didático Finalidade Link de Acesso
📊 Slides de Aula Apresentação visual interativa com Dark Mode e suporte a teclado Ver Slides
🧠 Quiz Formativo Teste interativo de fixação com feedback imediato por alternativa Fazer Quiz
💻 Exemplos de Código Demonstrações funcionais com Type Hints e saída no console Ver Exemplos
🧩 Exercícios em 4 Níveis Lista progressiva de fixação com gabarito em bloco colapsável Resolver Exercícios

🔀 Capítulo Anterior 📚 Sumário de Tópicos 🔢 Próximo Capítulo