As estruturas condicionais são fundamentais em qualquer linguagem de programação, permitindo que o programa tome decisões baseadas em condições lógicas. Em Python, as palavras-chave if, elif e else são usadas para implementar esse controle de fluxo. Nesta aula, vamos explorar desde o básico até técnicas mais avançadas, incluindo o operador ternário e boas práticas para escrever condicionais legíveis e eficientes.

Dominar condicionais é essencial para criar programas que se adaptam a diferentes situações. Você aprenderá a avaliar expressões booleanas, combinar condições com operadores lógicos e estruturar decisões de forma clara. Vamos começar!

if/elif/else

A estrutura if avalia uma expressão booleana e executa um bloco de código se ela for verdadeira. Opcionalmente, podemos usar elif (abreviação de "else if") para testar múltiplas condições, e else para capturar qualquer caso não atendido pelas condições anteriores. A sintaxe básica é:

if condicao1:
    # código executado se condicao1 for True
elif condicao2:
    # código executado se condicao1 for False e condicao2 for True
else:
    # código executado se todas as condições anteriores forem False

É importante notar que Python usa indentação para definir blocos de código (geralmente 4 espaços). Diferente de outras linguagens, não usamos chaves. Exemplo prático:

nota = 85
if nota >= 90:
    conceito = 'A'
elif nota >= 80:
    conceito = 'B'
elif nota >= 70:
    conceito = 'C'
else:
    conceito = 'D'
print(f"Conceito: {conceito}")  # Saída: Conceito: B

Você pode usar operadores lógicos como and, or e not para combinar condições. Por exemplo:

idade = 25
if idade >= 18 and idade <= 65:
    print("Adulto em idade ativa")

Expressões condicionais (ternário)

Python oferece uma forma concisa de escrever condicionais de uma única linha: a expressão ternária. A sintaxe é:

valor_se_verdadeiro if condicao else valor_se_falso

Isso é útil para atribuições simples. Exemplo:

idade = 20
status = "Maior de idade" if idade >= 18 else "Menor de idade"
print(status)  # Maior de idade

Embora seja conciso, evite usar ternários aninhados ou muito complexos, pois podem prejudicar a legibilidade. Prefira if tradicional para múltiplas condições.

Aninhamento

Podemos colocar estruturas condicionais dentro de outras, criando aninhamento. Isso é útil para verificar condições hierárquicas, mas deve ser usado com moderação para não tornar o código difícil de ler. Exemplo:

usuario_autenticado = True
nivel_acesso = "admin"
if usuario_autenticado:
    if nivel_acesso == "admin":
        print("Acesso total")
    else:
        print("Acesso limitado")
else:
    print("Faça login")

Uma alternativa para evitar aninhamento excessivo é usar operadores lógicos ou funções auxiliares. Por exemplo, o código acima poderia ser reescrito como:

if not usuario_autenticado:
    print("Faça login")
elif nivel_acesso == "admin":
    print("Acesso total")
else:
    print("Acesso limitado")

Isso melhora a legibilidade ao eliminar um nível de indentação.

Boas práticas

Escrever condicionais claras é essencial para a manutenção do código. Aqui estão algumas recomendações:

  • Evite comparações com True/False: em vez de if x == True, use if x (pois Python avalia o valor verdadeiro).
  • Use nomes significativos: variáveis booleanas como eh_maior ou tem_permissao tornam a condição autoexplicativa.
  • Prefira elif a múltiplos ifs: se as condições são mutuamente exclusivas, elif evita verificações desnecessárias.
  • Simplifique condições complexas: extraia partes da condição para variáveis com nomes descritivos.
  • Evite aninhamento profundo: use cláusulas de guarda (early return) ou reestruture a lógica.
  • Cuidado com precedência de operadores: use parênteses para explicitar a ordem de avaliação.

Exemplo de aplicação de boas práticas:

# Ruim
if (x > 0 and y > 0) or (x < 0 and y < 0):
    print("Mesmo sinal")

# Melhor
mesmo_sinal = (x > 0 and y > 0) or (x < 0 and y < 0)
if mesmo_sinal:
    print("Mesmo sinal")

Exercícios

  1. Escreva um programa que leia um número inteiro e diga se ele é par ou ímpar.

    ✓ Resposta:
    numero = int(input("Digite um número: "))
    if numero % 2 == 0:
        print("Par")
    else:
        print("Ímpar")
  2. Dada a variável idade = 17, use uma expressão ternária para definir a string categoria como "Menor" se idade < 18, caso contrário "Maior".

    ✓ Resposta:
    idade = 17
    categoria = "Menor" if idade < 18 else "Maior"
    print(categoria)  # Menor
  3. Escreva um trecho de código que, dada uma variável senha, verifique se ela tem pelo menos 8 caracteres e contém um dígito. Use operadores lógicos.

    ✓ Resposta:
    senha = "abc12345"
    tem_digito = any(c.isdigit() for c in senha)
    if len(senha) >= 8 and tem_digito:
        print("Senha forte")
    else:
        print("Senha fraca")
  4. Reescreva o código a seguir usando elif para evitar aninhamento desnecessário:

    if a > 0:
        if b > 0:
            print("Ambos positivos")
        else:
            print("A positivo, B não")
    else:
        print("A não é positivo")

    ✓ Resposta:
    if a <= 0:
        print("A não é positivo")
    elif b > 0:
        print("Ambos positivos")
    else:
        print("A positivo, B não")
  5. Crie uma função classificar_nota(nota) que retorna o conceito (A, B, C, D ou F) baseado na nota (0-100). Use if/elif/else.

    ✓ Resposta:
    def classificar_nota(nota):
        if nota >= 90:
            return 'A'
        elif nota >= 80:
            return 'B'
        elif nota >= 70:
            return 'C'
        elif nota >= 60:
            return 'D'
        else:
            return 'F'
    
    print(classificar_nota(85))  # B

Referências