Match/Case e Condições Combinadas
O que é match/case?
O match/case é o "cardápio de opções" do Python. Você passa um valor é ele encontra o caso que combina. Pense nele como um if/elif/else mais elegante quando você tem muitas opções fixas.
Disponivel a partir do Python 3.10.
Match/case básico
A estrutura é simples: match valor: seguido de vários case padrão::
comando = input("Comando: ").lower()
match comando:
case "iniciar":
print("Iniciando...")
case "pausar":
print("Pausado.")
case "parar":
print("Encerrando...")
case _:
print(f"'{comando}' não reconhecido.")
Cada case testa um valor. O case _: no final pega qualquer coisa que não bateu com os anteriores.
Combinando padrões com |
Use | (pipe) para agrupar vários valores num único case:
dia = 6
match dia:
case 1 | 2 | 3 | 4 | 5:
tipo = "Dia útil"
case 6 | 7:
tipo = "Fim de semana"
case _:
tipo = "Dia inválido"
print(tipo) # → Fim de semana
Match com guardas (if extra)
Você pode adicionar uma condição extra depois do padrão usando if:
nota = 8.5
match nota:
case n if n >= 9:
conceito = "Excelente"
case n if n >= 7:
conceito = "Bom"
case n if n >= 5:
conceito = "Regular"
case _:
conceito = "Insuficiente"
print(f"Nota {nota}: {conceito}") # → Nota 8.5: Bom
O n captura o valor é o if testa a condição. É como ter elif dentro do match.
Valores falsy e truthy
Além do match/case, Python tem um conceito importante: qualquer valor pode ser tratado como verdadeiro ou falso. Isso permite escrever condições mais limpas.
# Falsy -- tratados como False
print(bool(0)) # → False
print(bool(0.0)) # → False
print(bool("")) # → False (string vazia)
print(bool([])) # → False (lista vazia)
print(bool({})) # → False (dict vazio)
print(bool(None)) # → False
# Truthy -- tratados como True
print(bool(1)) # → True
print(bool(-5)) # → True
print(bool("texto")) # → True
print(bool("0")) # → True (não é vazio!)
print(bool([1, 2])) # → True
| Valor | Falsy ou Truthy |
|---|---|
0, 0.0 | Falsy |
"" (string vazia) | Falsy |
[], {}, set() | Falsy |
None | Falsy |
False | Falsy |
| Qualquer outro valor | Truthy |
Uso prático de falsy/truthy
Saber isso permite escrever condições mais curtas e Pythonicas:
nome = input("Seu nome: ")
# Em vez de: if nome != ""
if nome:
print(f"Olá, {nome}!")
else:
print("Não digitou nada.")
# Lista vazia?
itens = []
if not itens:
print("Lista vazia!") # → Lista vazia!
# Verificando None antes de usar
resultado = None
if resultado is not None:
print(resultado.upper())
else:
print("Sem resultado") # → Sem resultado
Exemplo prático: menu interativo
print("=== Sistema ===")
print("1 - Novo cadastro")
print("2 - Consultar")
print("3 - Sair")
opção = input("Escolha: ")
match opção:
case "1":
nome = input("Nome: ")
if nome:
print(f"Cadastrado: {nome}")
else:
print("Nome não pode ser vazio!")
case "2":
print("Consultando...")
case "3":
print("Até logo!")
case _:
print(f"Opção '{opção}' inválida.")
O match cuida da navegação do menu. Dentro do case "1", o if nome: usa truthy/falsy para validar a entrada sem precisar de != "".
Referências
- match Statements -- documentação oficial do match/case
- Structural Pattern Matching -- artigo no Real Python
- Truth Value Testing -- documentação oficial sobre truthy/falsy
Testa o que você leu
4 perguntas sobre esta aula. Errar aqui não custa nada - a explicação vem junto da correção.