Python & AI Tutorials Logo
Programação Python

10. Usando Expressões Condicionais (expressões if-else)

No Capítulo 8, aprendemos como tomar decisões nos nossos programas usando if statements. Esses statements permitem executar diferentes blocos de código com base em condições. Porém, às vezes precisamos escolher entre dois valores em vez de dois blocos de código. O Python fornece uma sintaxe especial para essa situação comum: expressões condicionais.

Expressões condicionais (também chamadas de expressões ternárias ou operador ternário em outras linguagens) permitem escrever código compacto de tomada de decisão quando você só precisa selecionar um valor ou outro com base em uma condição. Elas são particularmente úteis para atribuições e ao construir expressões maiores.

10.1) O Que São Expressões Condicionais

Uma expressão condicional é uma única expressão que avalia para um de dois valores com base em uma condição. Diferente de um if statement, que controla qual bloco de código executa, uma expressão condicional produz um valor que pode ser usado imediatamente.

Vamos olhar um cenário comum. Suponha que estamos escrevendo um programa para categorizar estudantes por idade:

python
# Usando uma instrução if (o que já sabemos)
age = 16
if age >= 18:
    category = "adult"
else:
    category = "minor"
print(f"Category: {category}")  # Output: Category: minor

Isso funciona perfeitamente, mas repare que na verdade estamos apenas escolhendo entre dois valores de string. A estrutura é um pouco verbosa para uma decisão tão simples. Aqui está a mesma lógica usando uma expressão condicional:

python
# Usando uma expressão condicional
age = 16
category = "adult" if age >= 18 else "minor"
print(f"Category: {category}")  # Output: Category: minor

As duas versões produzem resultados idênticos, mas a expressão condicional é mais compacta. Ela atribui diretamente um de dois valores a category com base na condição.

Entendendo a Diferença Fundamental

A distinção principal é que expressões condicionais são expressões, não statements:

  • Uma expressão é algo que avalia para um valor. Você pode usá-la em qualquer lugar onde um valor é esperado: em atribuições, como argumentos de função, dentro de outras expressões etc.
  • Um statement é uma instrução completa que realiza uma ação, mas não produz um valor.
python
# Isto é uma expressão - ela produz um valor
result = 10 if True else 20
 
# Isto é um statement - ele realiza ações, mas não é um valor por si só
if True:
    result = 10
else:
    result = 20

Como expressões condicionais produzem valores, elas são mais flexíveis em certas situações. No entanto, isso não significa que elas sejam sempre melhores — vamos explorar quando usar cada abordagem mais adiante neste capítulo.

10.2) Sintaxe da Expressão if–else

A sintaxe de uma expressão condicional segue este padrão:

value_if_true if condition else value_if_false

Vamos detalhar cada componente:

  1. value_if_true: A expressão que é avaliada e retornada se a condição for True
  2. if: A palavra-chave que introduz a condição
  3. condition: Uma expressão booleana que determina qual valor é retornado
  4. else: A palavra-chave que introduz o valor alternativo
  5. value_if_false: A expressão que é avaliada e retornada se a condição for False

Repare que a ordem pode parecer incomum se você está familiarizado com outras linguagens de programação. Em Python, o valor do caso "verdadeiro" vem primeiro, depois a condição, e então o valor do caso "falso". Essa ordenação soa um pouco como inglês natural: "Me dê X se a condição for verdadeira, caso contrário me dê Y."

Sim

Não

Início: Avaliar Condição

Condição é True?

Avaliar e Retornar
value_if_true

Avaliar e Retornar
value_if_false

Resultado Disponível

Vamos ver vários exemplos com diferentes tipos de valores:

python
# Exemplo 1: Escolhendo entre números
temperature = 25
comfort_level = "warm" if temperature > 20 else "cool"
print(comfort_level)  # Output: warm
 
# Exemplo 2: Escolhendo entre cálculos
score = 85
bonus = 10 if score >= 90 else 5
print(f"Bonus points: {bonus}")  # Output: Bonus points: 5
 
# Exemplo 3: Escolhendo entre valores booleanos
has_permission = True
access = "granted" if has_permission else "denied"
print(f"Access: {access}")  # Output: Access: granted
 
# Exemplo 4: A condição pode ser qualquer expressão booleana
username = "admin"
role = "administrator" if username == "admin" else "regular user"
print(f"Role: {role}")  # Output: Role: administrator

Observações Importantes de Sintaxe

A parte else é obrigatória em uma expressão condicional. Diferente de um if statement em que else é opcional, você precisa fornecer as duas alternativas:

python
# Isto é INVÁLIDO - falta o else
# result = "yes" if True  # SyntaxError
 
# Isto é VÁLIDO - ambos os ramos fornecidos
result = "yes" if True else "no"

Esse requisito faz sentido porque uma expressão sempre precisa produzir um valor. Se a condição for False e não existir uma cláusula else, que valor a expressão deveria produzir? O Python exige que você seja explícito sobre as duas possibilidades.

10.3) Como Expressões Condicionais São Avaliadas

Entender como o Python avalia expressões condicionais ajuda você a escrever código correto e a prever o que seus programas vão fazer. A avaliação segue uma sequência específica e previsível.

O Processo de Avaliação

O Python avalia uma expressão condicional nesta ordem:

  1. Avalia a condição (a expressão booleana depois de if)
  2. Com base no resultado:
    • Se a condição for True, avalia e retorna value_if_true
    • Se a condição for False, avalia e retorna value_if_false

O ponto crucial é que o Python só avalia uma das duas expressões de valor, não as duas. Isso se chama avaliação de curto-circuito e é parecido com a forma como os operadores and e or funcionam (que aprendemos no Capítulo 9).

python
# Apenas o ramo relevante é avaliado
x = 10
result = x * 2 if x > 5 else x / 2
# Como x > 5 é True, o Python avalia x * 2 (resultando em 20)
# e nunca avalia x / 2
print(result)  # Output: 20

Por Que a Avaliação de Curto-Circuito Importa

A avaliação de curto-circuito pode evitar erros e melhorar a eficiência:

python
# Exemplo 1: Evitando divisão por zero
denominator = 0
result = "undefined" if denominator == 0 else 100 / denominator
print(result)  # Output: undefined
# A divisão 100 / denominator nunca é tentada porque
# a condição é True, então evitamos um ZeroDivisionError
python
# Exemplo 2: Evitando operações em None
data = None
length = 0 if data is None else len(data)
print(length)  # Output: 0
# len(data) nunca é chamado porque data é None,
# evitando um TypeError

Valores Truthy/Falsy em Expressões Condicionais

Assim como nos if statements (Capítulo 8), a condição em uma expressão condicional usa as regras de truthiness do Python. Qualquer valor pode ser usado como condição:

python
# String vazia é falsy
name = ""
greeting = f"Hello, {name}" if name else "Hello, guest"
print(greeting)  # Output: Hello, guest
 
# String não vazia é truthy
name = "Alice"
greeting = f"Hello, {name}" if name else "Hello, guest"
print(greeting)  # Output: Hello, Alice
 
# Zero é falsy, não-zero é truthy
items = 0
message = "You have items" if items else "Your cart is empty"
print(message)  # Output: Your cart is empty
 
items = 3
message = "You have items" if items else "Your cart is empty"
print(message)  # Output: You have items

Avaliação Aninhada

Os valores em uma expressão condicional podem ser, eles mesmos, expressões, incluindo outras expressões condicionais. O Python avalia essas do lado de dentro para fora:

python
# O value_if_true é ele mesmo um cálculo
age = 25
price = age * 2 if age < 18 else age * 3
print(price)  # Output: 75
# Etapas: age < 18 → False → avaliar age * 3 → 75
 
# A condição é uma expressão complexa
score = 85
grade = 90
status = "excellent" if score >= 80 and grade >= 85 else "good"
print(status)  # Output: excellent
# Etapas: score >= 80 → True, grade >= 85 → True
#        True and True → True → retorna "excellent"

10.4) Usando Expressões Condicionais em Atribuições

Um dos usos mais comuns de expressões condicionais é em atribuições, quando queremos definir uma variável como um de dois valores com base em uma condição. Esse padrão aparece com frequência em código do mundo real.

Padrões Simples de Atribuição

Vamos ver exemplos práticos em que expressões condicionais deixam as atribuições mais limpas:

python
# Exemplo 1: Definindo um desconto com base na associação
is_member = True
discount = 0.15 if is_member else 0.05
print(f"Discount: {discount * 100}%")  # Output: Discount: 15.0%
 
# Exemplo 2: Determinando o custo de envio
order_total = 45.00
shipping = 0 if order_total >= 50 else 5.99
print(f"Shipping: ${shipping:.2f}")  # Output: Shipping: $5.99
 
# Exemplo 3: Definindo um valor padrão
user_input = ""  # Simulando entrada vazia
page_size = int(user_input) if user_input else 10
print(f"Items per page: {page_size}")  # Output: Items per page: 10

Comparando com if Statements

Vamos ver as mesmas atribuições escritas com if statements para perceber a diferença:

python
# Usando if statement (mais verboso)
is_member = True
if is_member:
    discount = 0.15
else:
    discount = 0.05
 
# Usando expressão condicional (mais compacta)
is_member = True
discount = 0.15 if is_member else 0.05

As duas abordagens funcionam corretamente, mas a expressão condicional é mais concisa quando você só está escolhendo entre dois valores. A versão com if statement exige quatro linhas e repete o nome da variável discount duas vezes, enquanto a expressão condicional faz a mesma coisa em uma linha.

Múltiplas Atribuições com Lógica Consistente

Quando você precisa fazer várias atribuições com base na mesma condição, você tem escolhas:

python
# Abordagem 1: Múltiplas expressões condicionais
is_premium = True
price = 99.99 if is_premium else 149.99
features = "all" if is_premium else "basic"
support = "priority" if is_premium else "standard"
 
# Abordagem 2: Um if statement para múltiplas atribuições
is_premium = True
if is_premium:
    price = 99.99
    features = "all"
    support = "priority"
else:
    price = 149.99
    features = "basic"
    support = "standard"

Nesse caso, a abordagem com if statement (Abordagem 2) costuma ser mais legível porque agrupa atribuições relacionadas e deixa clara a relação entre elas. A abordagem com expressão condicional (Abordagem 1) funciona, mas repete a condição três vezes, o que pode ser mais difícil de manter se a condição precisar mudar.

10.5) Usando Expressões Condicionais Dentro de Expressões Maiores

Como expressões condicionais produzem valores, elas podem ser embutidas dentro de expressões maiores. Isso permite um código poderoso e compacto, embora exija cuidado para manter a legibilidade.

Expressões Condicionais em Aritmética

Você pode usar expressões condicionais como operandos em operações aritméticas:

python
# Adição condicional
base_score = 80
bonus_eligible = True
final_score = base_score + (10 if bonus_eligible else 0)
print(f"Final score: {final_score}")  # Output: Final score: 90

Expressões Condicionais em Formatação de Strings

Expressões condicionais funcionam perfeitamente com f-strings e outras operações com strings:

python
# Exemplo 1: Pluralização em mensagens
item_count = 1
message = f"You have {item_count} {'item' if item_count == 1 else 'items'}"
print(message)  # Output: You have 1 item
 
item_count = 3
message = f"You have {item_count} {'item' if item_count == 1 else 'items'}"
print(message)  # Output: You have 3 items
 
# Exemplo 2: Saudação condicional com base no horário
hour = 14
greeting = f"Good {'morning' if hour < 12 else 'afternoon'}, user!"
print(greeting)  # Output: Good afternoon, user!

Expressões Condicionais Aninhadas

Você pode aninhar expressões condicionais para lidar com múltiplas condições, embora isso deva ser feito com moderação:

python
# Exemplo 1: Classificação em três níveis
score = 85
grade = "A" if score >= 90 else ("B" if score >= 80 else "C")
print(f"Grade: {grade}")  # Output: Grade: B
 
# Vamos acompanhar isso:
# score >= 90? Não (85 < 90)
# Então avalia a parte else: ("B" if score >= 80 else "C")
# score >= 80? Sim (85 >= 80)
# Retorna "B"
 
# Exemplo 2: Classificação de temperatura
temp = 15
category = "hot" if temp > 25 else ("warm" if temp > 15 else "cold")
print(f"Category: {category}")  # Output: Category: cold
 
# Exemplo 3: Preço por idade com múltiplas faixas
age = 65
price = 0 if age < 5 else (8 if age < 18 else (12 if age < 65 else 8))
print(f"Ticket price: ${price}")  # Output: Ticket price: $8

Observação Importante sobre Aninhamento: Embora expressões condicionais aninhadas sejam possíveis, elas podem rapidamente ficar difíceis de ler. O terceiro exemplo acima é tecnicamente correto, mas difícil de entender. Vamos discutir alternativas melhores na Seção 10.7.

Expressões Condicionais em Comparações

Você pode usar expressões condicionais dentro de operações de comparação:

python
# Exemplo 1: Comparando com um valor condicional
base_value = 10
threshold = 15
is_large = True
result = base_value > (threshold if is_large else 5)
print(result)  # Output: False
# Avalia: base_value > 15 → 10 > 15 → False
 
# Exemplo 2: Verificação condicional de igualdade
user_role = "admin"
required_role = "admin" if True else "user"
has_access = user_role == required_role
print(has_access)  # Output: True

10.6) Expressão condicional vs if statement (Expressão vs Statement)

Entender quando usar uma expressão condicional versus um if statement é crucial para escrever código claro e fácil de manter. A distinção se resume à diferença fundamental entre expressões e statements em Python.

Expressões vs Statements: A Diferença Central

Vamos esclarecer esses termos com precisão:

  • Uma expressão é uma combinação de valores, variáveis, operadores e chamadas de função que o Python avalia para produzir um valor. Exemplos: 2 + 3, "hello".upper(), x if x > 0 else 0

  • Um statement é uma instrução completa que realiza uma ação. Statements não produzem valores — eles fazem coisas. Exemplos: if x > 0: print("positive"), x = 5, for i in range(10): print(i)

python
# Isto é uma expressão - ela produz um valor (7)
result = 3 + 4
 
# Isto é um statement - ele realiza uma ação (imprime)
print("Hello")
 
# Uma expressão condicional é uma expressão
value = "yes" if True else "no"  # Produz "yes"
 
# Um if statement é um statement
if True:
    value = "yes"
else:
    value = "no"
# Realiza atribuição, mas o if em si não produz um valor

Quando Usar Expressões Condicionais

Expressões condicionais são ideais quando:

1. Você está escolhendo entre dois valores para uma atribuição:

python
# Bom uso de expressão condicional
age = 16
status = "adult" if age >= 18 else "minor"
 
# Menos conciso com if statement
age = 16
if age >= 18:
    status = "adult"
else:
    status = "minor"

2. Você precisa de um valor inline dentro de uma expressão maior:

python
# Bom uso - valor necessário na f-string
items = 1
print(f"You have {items} {'item' if items == 1 else 'items'}")
# Output: You have 1 item
 
# Estranho com if statement - exige pré-atribuição
items = 1
if items == 1:
    word = "item"
else:
    word = "items"
print(f"You have {items} {word}")

3. A lógica é simples e a expressão continua legível:

python
# Bom uso - lógica simples e clara
discount = 0.15 if is_member else 0.05
max_value = a if a > b else b
sign = "positive" if x > 0 else "non-positive"

Quando Usar if Statements

Use if statements quando:

1. Você precisa executar múltiplos statements em cada ramo:

python
# Use if statement - múltiplas ações por ramo
if score >= 90:
    grade = "A"
    message = "Excellent work!"
    bonus_points = 10
else:
    grade = "B"
    message = "Good job!"
    bonus_points = 5
 
# Expressões condicionais seriam estranhas aqui:
# grade = "A" if score >= 90 else "B"
# message = "Excellent work!" if score >= 90 else "Good job!"
# bonus_points = 10 if score >= 90 else 5
# (Repete a condição desnecessariamente)

2. Você tem mais de dois ramos (elif):

python
# Use if statement - múltiplos ramos
if score >= 90:
    grade = "A"
elif score >= 80:
    grade = "B"
elif score >= 70:
    grade = "C"
else:
    grade = "F"
 
# Expressões condicionais aninhadas ficam difíceis de ler:
# grade = "A" if score >= 90 else ("B" if score >= 80 else ("C" if score >= 70 else "F"))

3. Um dos ramos não deve fazer nada:

python
# Use if statement - o ramo else não faz nada
if error_occurred:
    print("An error occurred")
    log_error(error_message)
# Não precisa de else
 
# Expressão condicional exige ambos os ramos:
# result = handle_error() if error_occurred else None  # Estranho

Comparação Lado a Lado

Vamos ver a mesma lógica implementada das duas formas:

python
# Cenário: Definindo uma taxa de envio
 
# Versão 1: Expressão condicional (boa para escolha simples de valor)
order_total = 45.00
shipping = 0 if order_total >= 50 else 5.99
 
# Versão 2: if statement (mais verboso, mas mais claro para alguns)
order_total = 45.00
if order_total >= 50:
    shipping = 0
else:
    shipping = 5.99
 
# Ambas produzem o mesmo resultado
print(f"Shipping: ${shipping:.2f}")  # Output: Shipping: $5.99

Para este caso simples, a expressão condicional é mais concisa e igualmente clara. Mas considere um cenário mais complexo:

python
# Cenário: Processando um pedido com múltiplas etapas
 
# Versão 1: if statement (apropriado para múltiplas ações)
order_total = 45.00
if order_total >= 50:
    shipping = 0
    discount = 0.10
    message = "Free shipping applied!"
else:
    shipping = 5.99
    discount = 0
    message = "Add $5 more for free shipping"
 
# Versão 2: Expressões condicionais (estranhas e repetitivas)
order_total = 45.00
shipping = 0 if order_total >= 50 else 5.99
discount = 0.10 if order_total >= 50 else 0
message = "Free shipping applied!" if order_total >= 50 else "Add $5 more for free shipping"

A versão com if statement é mais clara aqui porque agrupa a lógica relacionada e não repete a condição.

10.7) Quando Expressões Condicionais Melhoram a Legibilidade (e Quando Não)

Expressões condicionais são uma ferramenta poderosa, mas como qualquer ferramenta, podem ser usadas de forma inadequada. O objetivo é sempre escrever código que não seja apenas correto, mas também claro e fácil de manter. Vamos explorar diretrizes para usar expressões condicionais de forma eficaz.

Quando Expressões Condicionais Melhoram a Legibilidade

1. Escolhas Simples e Claras Entre Dois Valores

Expressões condicionais brilham quando a lógica é direta:

python
# Uso excelente - cristalino
discount = 0.20 if is_member else 0.10
 
# Uso excelente - significado óbvio
status = "active" if user_logged_in else "inactive"
 
# Uso excelente - escolha booleana simples
can_vote = True if age >= 18 else False
# Embora isto pudesse ser ainda mais simples: can_vote = age >= 18

2. Seleção Inline de Valor em Expressões

Quando você precisa de um valor inline e separar isso seria estranho:

python
# Uso excelente - pluralização natural
print(f"Found {count} {'result' if count == 1 else 'results'}")
 
# Uso excelente - ajuste inline em cálculo
total = base_price * (0.9 if is_sale else 1.0)
 
# Uso excelente - formatação condicional
output = f"Status: {status.upper() if is_error else status.lower()}"

3. Definindo Valores Padrão

Expressões condicionais funcionam bem para fornecer valores de fallback:

python
# Uso excelente - padrão de valor padrão
display_name = username if username else "Guest"
 
# Uso excelente - configuração com padrões
page_size = user_preference if user_preference else 25
 
# Uso excelente - divisão segura
result = total / count if count > 0 else 0

Quando Expressões Condicionais Prejudicam a Legibilidade

1. Expressões Condicionais Aninhadas

Aninhar expressões condicionais cria código difícil de ler:

python
# Baixa legibilidade - expressões condicionais aninhadas
grade = "A" if score >= 90 else ("B" if score >= 80 else ("C" if score >= 70 else "F"))
 
# Muito melhor - use if-elif-else statement
if score >= 90:
    grade = "A"
elif score >= 80:
    grade = "B"
elif score >= 70:
    grade = "C"
else:
    grade = "F"

A versão com if-elif-else é imediatamente compreensível. A expressão condicional aninhada exige uma análise cuidadosa para entender a lógica.

2. Condições Complexas

Quando a condição em si é complexa, expressões condicionais ficam difíceis de ler:

python
# Baixa legibilidade - condição complexa
result = "eligible" if age >= 18 and income > 30000 and credit_score > 650 and not has_bankruptcy else "not eligible"
 
# Melhor - use if statement com estrutura clara
if age >= 18 and income > 30000 and credit_score > 650 and not has_bankruptcy:
    result = "eligible"
else:
    result = "not eligible"
 
# Ainda melhor - quebre a condição
meets_age_requirement = age >= 18
meets_income_requirement = income > 30000
meets_credit_requirement = credit_score > 650
has_clean_record = not has_bankruptcy
 
if meets_age_requirement and meets_income_requirement and meets_credit_requirement and has_clean_record:
    result = "eligible"
else:
    result = "not eligible"

3. Múltiplas Expressões Condicionais em Uma Linha

Combinar múltiplas expressões condicionais em uma única linha:

python
# Baixa legibilidade - coisa demais em uma linha
price = base * (0.9 if is_member else 1.0) * (0.85 if is_sale else 1.0) + (0 if free_shipping else 5.99)
 
# Melhor - quebre em etapas
member_multiplier = 0.9 if is_member else 1.0
sale_multiplier = 0.85 if is_sale else 1.0
shipping_cost = 0 if free_shipping else 5.99
price = base * member_multiplier * sale_multiplier + shipping_cost
 
# Ou use if statement se a lógica for complexa
if is_member:
    price = base * 0.9
else:
    price = base
 
if is_sale:
    price = price * 0.85
 
if free_shipping:
    shipping_cost = 0
else:
    shipping_cost = 5.99
 
price = price + shipping_cost

A Essência

Use expressões condicionais quando elas deixarem seu código mais claro e mais conciso. Use if statements quando você precisar de:

  • Múltiplos statements por ramo
  • Mais de dois ramos (elif)
  • Condições ou lógica complexas
  • Efeitos colaterais ou ações em vez de seleção de valor

Quando estiver em dúvida, prefira clareza a esperteza. Código é lido muito mais vezes do que é escrito, então otimize para quem vai ler.


Expressões condicionais são um acréscimo valioso ao seu kit de ferramentas Python. Elas permitem escrever código conciso e elegante ao escolher entre dois valores. Ao entender quando elas melhoram a legibilidade e quando não, você consegue tomar decisões bem informadas sobre quando usá-las.

Os princípios-chave para lembrar:

  1. Expressões condicionais produzem valores e podem ser usadas em qualquer lugar onde um valor é necessário
  2. A sintaxe é value_if_true if condition else value_if_false
  3. O Python avalia apenas o ramo relevante (avaliação de curto-circuito)
  4. Elas são ideais para escolhas simples de valores em atribuições e expressões
  5. Use if statements para múltiplas ações, lógica complexa ou mais de dois ramos
  6. Priorize legibilidade — se uma expressão condicional for difícil de entender, use um if statement em vez disso

Conforme você continuar aprendendo Python, vai desenvolver uma intuição sobre quando expressões condicionais melhoram seu código. Pratique usá-las em casos simples primeiro, e aos poucos você vai reconhecer os padrões em que elas brilham. No próximo capítulo, vamos explorar loops while, que permitem repetir ações com base em condições — construindo sobre as habilidades de tomada de decisão que desenvolvemos nesta parte do livro.

© 2025. Primesoft Co., Ltd.
support@primesoft.ai