Capítulo 02: Estruturas de Decisão: Condicionais Compostas e Pattern Matching (match-case)
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:
- Padrão de Literais e Sequências:
case (acao, valor): - Cláusulas de Guarda (Guards):
case valor if valor > 10000: - Padrões de Mapeamento:
case {"status": "ERRO", "codigo": int(c)}: - 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 |