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


🗺️ Mapa Conceitual do Tópico

flowchart TD
    A["Requisição de Operação"] --> B{"Tipo de Estrutura"}
    B -->|if-elif-else| C["Validações Booleanas e Intervalares (and / or)"]
    B -->|match-case| D["Structural Pattern Matching (PEP 634)"]
    
    D --> E["Desestruturação de Tuplas / Dicionários"]
    D --> F["Cláusulas de Guarda (if condicional)"]
    D --> G["Captura de Caso Curinga (_ padrão)"]
    
    C & E & F & G --> H["Decisão Homologada ou Bloqueio"]
    
    style A fill:#e1f5fe,stroke:#03a9f4,stroke-width:2px
    style D fill:#ede7f6,stroke:#7e57c2,stroke-width:2px
    style H fill:#e8f5e9,stroke:#4caf50,stroke-width:2px

🔀 1. Estruturas Condicionais Tradicionais (if-elif-else)

O fluxo de controle condicional direciona a execução do programa com base em expressões booleanas com curto-circuito (Short-Circuit Evaluation):

  • and: Avalia o segundo operando somente se o primeiro for verdadeiro.
  • or: Avalia o segundo operando somente se o primeiro for falso.
  • not: Inverte o valor lógico.

🎯 2. Structural Pattern Matching (match-case / PEP 634)

Introduzido no Python 3.10+, o Pattern Matching vai muito além do switch-case tradicional de linguagens como C ou Java: ele permite desestruturação de sequências, mapeamentos e instâncias de classes com verificação de padrões e guardas.

Principais Recursos do match-case:

  1. Padrão de Literais e Sequências: case (acao, valor):
  2. Cláusulas de Guarda (Guards): case valor if valor > 10000:
  3. Padrões de Mapeamento: case {"status": "ERRO", "codigo": int(c)}:
  4. Padrão Curinga (Wildcard): case _: (Captura qualquer padrão restante como fallback seguro).

💻 Exemplo Prático e Tipado

"""
exemplo_02_estrutura_condicional_e_match.py - Motor de Análise de Risco de Crédito
"""

from decimal import Decimal
from typing import Any


def analisar_proposta_credito(proposta: dict[str, Any]) -> tuple[str, str, Decimal]:
    """Classifica propostas de crédito utilizando Pattern Matching moderno com guardas."""
    match proposta:
        case {"perfil": "VIP", "score": int(s), "renda": Decimal(r)} if s >= 800 and r >= Decimal("10000.00"):
            limite = r * Decimal("3.5")
            return "APROVADO_IMEDIATO", "Crédito Platinum pré-aprovado sem garantias.", limite

        case {"perfil": "CORPORATE", "faturamento": Decimal(f)} if f >= Decimal("50000.00"):
            limite = f * Decimal("0.40")
            return "APROVADO_CORPORATIVO", "Linha de capital de giro aprovada.", limite

        case {"perfil": "STANDARD", "score": int(s), "renda": Decimal(r)} if s >= 500:
            limite = r * Decimal("1.2")
            return "APROVADO_RESTRITO", "Crédito com retenção de margem consignada.", limite

        case {"score": int(s)} if s < 500:
            return "RECUSADO_RISCO", "Score de crédito insuficiente para concessão.", Decimal("0.00")

        case _:
            return "ERRO_PAYLOAD", "Estrutura de proposta de crédito não reconhecida.", Decimal("0.00")


if __name__ == "__main__":
    proposta_amostra = {
        "perfil": "VIP",
        "score": 850,
        "renda": Decimal("15000.00"),
    }
    parecer, motivo, limite_concedido = analisar_proposta_credito(proposta_amostra)
    print(f"Status : [{parecer}]")
    print(f"Motivo : {motivo}")
    print(f"Limite : R$ {limite_concedido:,.2f}")

🔗 Recursos Pedagógicos do Capítulo 02

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