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:

PYTHON
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.

PYTHON
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:

TEXT
Você é maior de idade!
Isso também está dentro do bloco if.
Isto está fora do if e sempre executa.
💡 Dica: Python usa indentação para definir blocos de código (outras linguagens usam {}). 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 ⭐)

PYTHON
score = 75

if score >= 60:
    print("Parabéns, você passou!")
    print(f"Sua nota é {score}.")

print("Nota registrada.")
▶ Experimente

Saída:

TEXT
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:

PYTHON
if condição:
    executa quando True
else:
    executa quando False
PYTHON
score = 45

if score >= 60:
    print("Aprovado!")
else:
    print("Reprovado, precisa refazer.")

Saída:

TEXT
Reprovado, precisa refazer.

Indentação para if e else

PYTHON
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'.")
⚠️ Observação: 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:

PYTHON
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.

PYTHON
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!
💡 Dica: Preste atenção à ordem das condições. Se você colocar 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 ⭐⭐)

PYTHON
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!")
▶ Experimente

Saída:

TEXT
=== 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.

PYTHON
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:

TEXT
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:

PYTHON
# ❌ 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:

PYTHON
# ✅ 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.")
💡 Dica: Uma regra prática: se o aninhamento exceder 3 níveis, considere combinar condições com and/or, ou extrair a lógica profunda para uma função. Código bom é "plano," não "profundo."

Exemplo: Calculadora de Frete (Dificuldade ⭐⭐)

PYTHON
# 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}")
▶ Experimente

Saída:

TEXT
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:

PYTHON
# 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:

TEXT
valor1 if condição else valor2

Se a condição for verdadeira, pegue valor1; caso contrário, pegue valor2.

Uso Prático

PYTHON
# 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)
⚠️ Observação: Expressões ternárias são concisas, mas não abuse delas. Se a lógica é complexa (precisando de 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:

PYTHON
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:

PYTHON
# Uso no mundo real
if user_age >= 18:
    register_user()      # Prossegue com o registro
else:
    pass                 # Nenhum tratamento especial para menores ainda
💡 Dica: Se você usa VS Code, escreva um comentário # TODO com pass. O VS Code coletará todos os itens TODO para referência futura.


Casos de Uso Comuns


❓ Perguntas Frequentes

P: Qual a diferença entre elif e if? Por que não usar todos como if? R: A diferença principal: elif só é verificado se as condições anteriores não foram atendidas, enquanto declarações if independentes são verificadas independentemente. Com três declarações if independentes para uma nota 85, "Excelente," "Bom" e "Médio" seriam todos executados. Com if-elif-elif, apenas o primeiro ramo correspondente "Bom" executa. Use elif para "escolher um," use múltiplos if para "verificar cada um independentemente." ⚠️ P: Por que o VS Code auto-indenta 4 espaços depois que escrevo if 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 levanta IndentationError: 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 usar elif? 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. Use if-elif-else regular para múltiplos ramos. P: Qual a diferença entre pass e return? R: pass significa "não faça nada, continue a execução"; return significa "saia imediatamente da função atual e retorne um valor" (abordaremos isso depois). Usar pass em um bloco if pula aquele bloco e continua. Usar return em uma função sai da função imediatamente. São conceitos completamente diferentes.


📖 Resumo


📝 Atividades

  1. 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 == 0 significa par.

  2. 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"
  3. 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
100%