Estruturas Condicionais
Na última lição aprendemos como fazer julgamentos de verdadeiro/falso com lógica booleana. Agora vamos aprender condicionais — fazer o programa executar código diferente com base em diferentes condições. Esta é uma das estruturas de controle mais fundamentais em qualquer linguagem de programação.
1. A Declaração if: Condição Simples
O formato do if é direto:
if condição:
código a executar quando a condição é True
Observe os dois pontos : e a indentação (geralmente 4 espaços) — a indentação informa ao Python qual código pertence ao if.
age = 18
if age >= 18:
print("Você é maior de idade!")
print("Isso também está dentro do bloco if.")
print("Isto está fora do if e sempre executa.")
Saída:
Você é maior de idade!
Isso também está dentro do bloco if.
Isto está fora do if e sempre executa.
{}). Código dentro do mesmo bloco if deve ter a mesma indentação. Se você está acostumado com C ou Java, isso requer adaptação, mas Python força você a escrever código limpo.
Exemplo: Verificação de Aprovado/Reprovado (Dificuldade ⭐)
score = 75
if score >= 60:
print("Parabéns, você passou!")
print(f"Sua nota é {score}.")
print("Nota registrada.")
Saída:
Parabéns, você passou!
Sua nota é 75.
Nota registrada.
2. if-else: Escolher Entre Dois
Quando a condição é verdadeira, faça uma coisa; quando falsa, faça outra:
if condição:
executa quando True
else:
executa quando False
score = 45
if score >= 60:
print("Aprovado!")
else:
print("Reprovado, precisa refazer.")
Saída:
Reprovado, precisa refazer.
Indentação para if e else
password = "123456"
if password == "123456":
print("Senha correta, bem-vindo de volta!")
else:
print("Senha errada, tente novamente.")
print("Se esqueceu sua senha, clique em 'Esqueci a Senha'.")
else também precisa de dois pontos :, e else deve estar alinhado com seu if correspondente (mesmo nível de indentação).
3. if-elif-else: Escolher Entre Múltiplas Opções
Cenários do mundo real geralmente têm mais de duas possibilidades. Use elif (abreviação de else if) para lidar com múltiplos ramos:
if condição1:
executa quando condição1 é True
elif condição2:
executa quando condição2 é True
elif condição3:
executa quando condição3 é True
else:
executa quando nenhuma das acima é True
Python verifica de cima para baixo — a primeira condição verdadeira é executada, então toda a estrutura if-elif-else é encerrada.
score = 85
if score >= 90:
print("Excelente!")
elif score >= 80:
print("Bom!")
elif score >= 70:
print("Médio.")
elif score >= 60:
print("Aprovado.")
else:
print("Reprovado, precisa refazer.")
# Saída: Bom!
if score >= 60: primeiro, uma nota 85 entraria no ramo "Aprovado" e nunca alcançaria "Bom" ou "Excelente." Coloque condições mais estritas primeiro.
Exemplo: Sistema de Pedidos de Restaurante (Dificuldade ⭐⭐)
print("=== Refeições de Hoje ===")
print("1. Macarrão de Carne R$10")
print("2. Arroz com Carne Desfiada R$8")
print("3. Arroz com Tomate e Ovo R$6")
print("4. Arroz Frito com Ovo R$4")
choice = 3
if choice == 1:
print("Você pediu Macarrão de Carne, R$10.")
elif choice == 2:
print("Você pediu Arroz com Carne Desfiada, R$8.")
elif choice == 3:
print("Você pediu Arroz com Tomate e Ovo, R$6.")
elif choice == 4:
print("Você pediu Arroz Frito com Ovo, R$4.")
else:
print("Desculpe, opção inválida.")
print("Bom apetite!")
Saída:
=== Refeições de Hoje ===
1. Macarrão de Carne R$10
2. Arroz com Carne Desfiada R$8
3. Arroz com Tomate e Ovo R$6
4. Arroz Frito com Ovo R$4
Você pediu Arroz com Tomate e Ovo, R$6.
Bom apetite!
4. Condições Aninhadas
Condições podem conter outras condições. Isso é chamado de aninhamento.
age = 20
has_ticket = True
if age >= 18:
print("Adulto, pode entrar.")
if has_ticket:
print("Tem ingresso, por favor prossiga.")
else:
print("Por favor, compre um ingresso primeiro.")
else:
print("Menor de idade, entrada negada.")
Saída:
Adulto, pode entrar.
Tem ingresso, por favor prossiga.
Não Aninhe Muito Profundamente
Aninhamento em si não é errado, mas mais de 3 níveis de profundidade torna o código difícil de ler:
# ❌ Não recomendado: muito aninhamento
user_input = "y"
is_admin = True
has_permission = True
if user_input == "y":
if is_admin:
if has_permission:
print("Operação bem-sucedida!")
else:
print("Sem permissão.")
else:
print("Não é admin.")
else:
print("Operação cancelada.")
Achate usando operadores lógicos:
# ✅ Recomendado: use and para reduzir aninhamento
user_input = "y"
is_admin = True
has_permission = True
if user_input != "y":
print("Operação cancelada.")
elif is_admin and has_permission:
print("Operação bem-sucedida!")
else:
print("Permissões insuficientes.")
and/or, ou extrair a lógica profunda para uma função. Código bom é "plano," não "profundo."
Exemplo: Calculadora de Frete (Dificuldade ⭐⭐)
# Calcula frete baseado em região, peso e nível de membro
region = "domestic" # "domestic" ou "international"
weight = 3.5 # kg
is_vip = False
if region == "domestic":
if weight <= 1:
shipping = 10
elif weight <= 5:
shipping = 15
else:
shipping = 20
else:
if weight <= 1:
shipping = 50
elif weight <= 5:
shipping = 80
else:
shipping = 120
# VIP tem 20% de desconto
if is_vip:
shipping *= 0.8
print(f"Região: {region}")
print(f"Peso: {weight}kg")
print(f"Frete: R${shipping:.0f}")
Saída:
Região: domestic
Peso: 3.5kg
Frete: R$15
5. Expressão Ternária (Expressão Condicional)
Python tem uma sintaxe if-else em uma linha chamada expressão ternária:
# Forma regular
age = 20
if age >= 18:
status = "adulto"
else:
status = "menor"
# Expressão ternária (uma linha)
status = "adulto" if age >= 18 else "menor"
print(status) # adulto
A estrutura:
valor1 if condição else valor2
Se a condição for verdadeira, pegue valor1; caso contrário, pegue valor2.
Uso Prático
# Exibe um resultado baseado na nota
score = 88
result = "aprovado" if score >= 60 else "reprovado"
print(f"Resultado do exame: {result}") # Resultado do exame: aprovado
# Busca de valor padrão
name = input("Digite seu nome: ") or "Convidado"
greeting = f"Olá, {name}" if name else "Olá, Convidado"
print(greeting)
elif) ou os ramos são longos, mantenha o if-elif-else regular. Conciso ≠ Legível.
6. pass: Não Fazer Nada
Às vezes você precisa de um espaço reservado — a sintaxe exige código, mas você ainda não decidiu o que escrever. Use pass:
if age >= 18:
pass # TODO: adicionar lógica de adulto depois
else:
print("Menor, não pode se registrar.")
pass significa "não faça nada aqui, continue." É frequentemente usado para:
- Espaço reservado: estruture primeiro, preencha detalhes depois
- Função vazia:
def minha_funcao(): pass - Classe vazia:
class MinhaClasse: pass
# Uso no mundo real
if user_age >= 18:
register_user() # Prossegue com o registro
else:
pass # Nenhum tratamento especial para menores ainda
# TODO com pass. O VS Code coletará todos os itens TODO para referência futura.
Casos de Uso Comuns
- Validação de formulário: Verifique se a entrada está vazia, o formato está correto, o comprimento atende aos requisitos.
- Níveis de permissão: Usuários regulares veem UI A, usuários VIP veem UI B, admins veem UI C.
- Máquina de estado de jogos: Verifique se o jogo acabou, uma fase foi limpa ou uma conquista foi ganha.
- Cálculo de preço: Descontos, ofertas para membros, promoções sazonais — diferentes combinações de condições produzem diferentes preços finais.
- Navegação por menu: O usuário digita 1/2/3/4 no console, e o programa entra em diferentes módulos de função.
❓ Perguntas Frequentes
P: Qual a diferença entre
elifeif? Por que não usar todos comoif? R: A diferença principal:elifsó é verificado se as condições anteriores não foram atendidas, enquanto declaraçõesifindependentes são verificadas independentemente. Com três declaraçõesifindependentes para uma nota 85, "Excelente," "Bom" e "Médio" seriam todos executados. Comif-elif-elif, apenas o primeiro ramo correspondente "Bom" executa. Useelifpara "escolher um," use múltiplosifpara "verificar cada um independentemente." ⚠️ P: Por que o VS Code auto-indenta 4 espaços depois que escrevoif condição:? R: Python requer indentação após dois pontos. A extensão Python do VS Code lida com isso automaticamente. Se você esquecer de indentar, Python levantaIndentationError: expected an indented block. Indentação em Python não é uma "sugestão de estilo" — é sintaxe. Indentação errada significa que o código não será executado. P: Expressões ternárias podem usarelif? R: Não. Expressões ternárias só lidam com "escolher entre dois" (valor1 if condição else valor2). Para múltiplas escolhas, você pode aninhar ternárias:a if cond1 else b if cond2 else c, mas isso é fortemente desencorajado — ternárias aninhadas são quase ilegíveis. Useif-elif-elseregular para múltiplos ramos. P: Qual a diferença entrepassereturn? R:passsignifica "não faça nada, continue a execução";returnsignifica "saia imediatamente da função atual e retorne um valor" (abordaremos isso depois). Usarpassem um bloco if pula aquele bloco e continua. Usarreturnem uma função sai da função imediatamente. São conceitos completamente diferentes.
📖 Resumo
ifé seguido por uma condição; se verdadeira, o bloco indentado executaelselida com o caso falso; não pode ser usado sozinhoeliflida com múltiplos ramos, verificado de cima para baixo; o primeiro verdadeiro executa- Condições aninhadas lidam com hierarquias complexas, mas mantenha o aninhamento abaixo de 3 níveis
- Expressão ternária
x if condição else ypara escolhas simples em uma linha passé um espaço reservado quando a sintaxe exige código mas você não tem nada para fazer ainda- Boas práticas: condições mais estritas primeiro, mantenha aninhamento abaixo de 3 níveis, achate com
and/orquando possível
📝 Atividades
-
Básico (Dificuldade ⭐): Escreva um programa para verificar se um número é ímpar ou par. Insira um inteiro; exiba "ímpar" ou "par." Dica:
n % 2 == 0significa par. -
Intermediário (Dificuldade ⭐⭐): Escreva um programa de avaliação de saúde IMC. Insira peso (kg) e altura (m), calcule o IMC, depois exiba:
- IMC < 18.5 → "Abaixo do peso"
- 18.5 ≤ IMC < 24 → "Normal"
- 24 ≤ IMC < 28 → "Sobrepeso"
- IMC ≥ 28 → "Obeso"
-
Desafio (Dificuldade ⭐⭐⭐): Escreva uma calculadora simples. O programa recebe três entradas: primeiro número, operador (
+-*/), segundo número. Execute a operação e exiba o resultado. Trate:- Divisão por zero: exiba "Não é possível dividir por zero"
- Operador inválido: exiba "Operador inválido"
- Caso normal: exiba o resultado do cálculo



