Pular para o conteúdo

A primeira escola especializada em tecnologia do Alto Solimões, com corpo técnico formado na área.

Módulo 3: Estruturas de Controle

Match/Case e Condições Combinadas

Pattern matching e valores falsy em Python

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
ValorFalsy ou Truthy
0, 0.0Falsy
"" (string vazia)Falsy
[], {}, set()Falsy
NoneFalsy
FalseFalsy
Qualquer outro valorTruthy

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

Testa o que você leu

4 perguntas sobre esta aula. Errar aqui não custa nada - a explicação vem junto da correção.

Pergunta 1 de 4
Qual é o equivalente do `default` do switch, em `match/case`?