Condicional: O que É e Como Funciona | Python Brasil
Aprenda condicionais em Python: if, elif, else, operadores logicos, ternario, match-case e boas praticas para controlar o fluxo do seu programa.
O que e um Condicional?
Um condicional em Python e uma estrutura de controle de fluxo que permite executar diferentes blocos de codigo com base em condicoes logicas. A estrutura principal e o if/elif/else, que avalia expressoes booleanas e direciona a execucao do programa de acordo com o resultado. Condicionais sao fundamentais para criar programas que tomam decisoes e respondem de formas diferentes a situacoes variadas.
Estrutura if/elif/else
# if simples
idade = 18
if idade >= 18:
print('Maior de idade')
# if/else
temperatura = 35
if temperatura > 30:
print('Esta quente')
else:
print('Temperatura agradavel')
# if/elif/else
nota = 7.5
if nota >= 9:
conceito = 'A'
elif nota >= 7:
conceito = 'B'
elif nota >= 5:
conceito = 'C'
else:
conceito = 'D'
print(f'Conceito: {conceito}') # Conceito: B
Operadores de Comparacao
a, b = 10, 20
print(a == b) # False — igualdade
print(a != b) # True — diferenca
print(a < b) # True — menor que
print(a > b) # False — maior que
print(a <= b) # True — menor ou igual
print(a >= b) # False — maior ou igual
# Comparacao encadeada (exclusividade do Python)
x = 15
print(10 < x < 20) # True
print(1 <= x <= 100) # True
Operadores Logicos
idade = 25
renda = 3000
# and — ambas condicoes devem ser verdadeiras
if idade >= 18 and renda >= 2000:
print('Elegivel para o credito')
# or — pelo menos uma condicao deve ser verdadeira
dia = 'sabado'
if dia == 'sabado' or dia == 'domingo':
print('Fim de semana')
# not — inverte o valor logico
usuario_ativo = True
if not usuario_ativo:
print('Conta desativada')
# Combinando operadores
tem_ingresso = True
idade = 16
acompanhado = True
if tem_ingresso and (idade >= 18 or acompanhado):
print('Entrada permitida')
Valores Truthy e Falsy
Em Python, qualquer objeto pode ser avaliado como booleano. Valores considerados falsy sao: False, None, 0, 0.0, '' (string vazia), [] (lista vazia), {} (dict vazio), set() e () (tupla vazia). Todo o resto e truthy.
# Aproveitando truthy/falsy
nome = input('Seu nome: ')
if nome:
print(f'Ola, {nome}')
else:
print('Nome nao informado')
# Lista vazia
itens = []
if not itens:
print('Lista vazia')
# Valor None
resultado = None
if resultado is None:
print('Sem resultado')
# IMPORTANTE: use 'is' para comparar com None, nao '=='
if resultado is None: # correto
pass
if resultado == None: # funciona, mas nao e Pythonico
pass
Operador Ternario
O Python permite condicionais em uma unica linha usando a sintaxe de expressao condicional.
# Sintaxe: valor_se_verdadeiro if condicao else valor_se_falso
idade = 20
status = 'maior' if idade >= 18 else 'menor'
print(status) # 'maior'
# Em atribuicoes
desconto = 0.1 if cliente_vip else 0.0
# Em chamadas de funcao
print('Par' if numero % 2 == 0 else 'Impar')
# Aninhado (evitar — prejudica legibilidade)
classificacao = 'A' if nota >= 9 else 'B' if nota >= 7 else 'C'
match/case (Python 3.10+)
O structural pattern matching, introduzido no Python 3.10, oferece uma alternativa poderosa a cadeias longas de if/elif.
# Pattern matching basico
comando = 'sair'
match comando:
case 'iniciar':
print('Iniciando...')
case 'pausar':
print('Pausando...')
case 'sair':
print('Encerrando...')
case _:
print('Comando desconhecido')
# Com desestruturacao
ponto = (3, 4)
match ponto:
case (0, 0):
print('Origem')
case (x, 0):
print(f'No eixo X: {x}')
case (0, y):
print(f'No eixo Y: {y}')
case (x, y):
print(f'Ponto ({x}, {y})')
# Com guardas (guard clauses)
match idade:
case n if n < 0:
print('Idade invalida')
case n if n < 18:
print('Menor de idade')
case n if n < 65:
print('Adulto')
case _:
print('Idoso')
Condicionais em Comprehensions
# Filtro com if
numeros = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
pares = [n for n in numeros if n % 2 == 0]
print(pares) # [2, 4, 6, 8, 10]
# if/else em comprehension (note a posicao diferente)
rotulos = ['par' if n % 2 == 0 else 'impar' for n in numeros]
print(rotulos) # ['impar', 'par', 'impar', 'par', ...]
# Filtro com multiplas condicoes
especiais = [n for n in numeros if n % 2 == 0 and n > 4]
Padroes Comuns
# Guard clause (retorno antecipado)
def processar_pedido(pedido):
if not pedido:
return None
if pedido.get('status') != 'ativo':
return None
if pedido.get('total', 0) <= 0:
return None
# logica principal aqui
return calcular_frete(pedido)
# Operador walrus (:=) com condicionais (Python 3.8+)
import re
texto = 'Meu email e ana@email.com'
if match := re.search(r'[\w.]+@[\w.]+', texto):
print(f'Email encontrado: {match.group()}')
# Dicionario como alternativa a if/elif
def calcular_imposto(estado):
impostos = {
'SP': 0.18,
'RJ': 0.20,
'MG': 0.17,
}
return impostos.get(estado, 0.15) # 0.15 como padrao
Erros Comuns
O erro mais frequente e usar = (atribuicao) em vez de == (comparacao), embora o Python levante um SyntaxError na maioria dos casos, evitando bugs silenciosos. Outro erro e encadear condicionais desnecessariamente quando um dicionario de mapeamento seria mais limpo. Tambem e comum esquecer que and e or em Python fazem avaliacao de curto-circuito e retornam o ultimo valor avaliado, nao necessariamente True ou False.
Boas Praticas
Use guard clauses para retornar cedo e reduzir aninhamento. Aproveite valores truthy e falsy em vez de comparacoes explicitas como if len(lista) > 0. Use is para comparar com None, True e False. Prefira dicionarios de mapeamento a longas cadeias de if/elif. Evite condicionais ternarios aninhados. Para Python 3.10 ou superior, considere match/case para logica de despacho complexa.
Quando Usar
Condicionais sao usados em qualquer situacao onde o programa precisa tomar decisoes: validacao de dados, controle de acesso, tratamento de casos especiais, roteamento de logica e muito mais. A escolha entre if/elif, dicionario de mapeamento ou match/case depende da complexidade e legibilidade desejada.