Este guia prático tem como objetivo elucidar o uso do operador ternário em Python. Através dele, você irá desvendar a sintaxe e explorar diversos exemplos de código, que facilitarão a sua compreensão sobre o funcionamento deste operador.
Iniciaremos com uma revisão do comportamento da instrução condicional if-else, preparando o terreno para a escrita de uma expressão equivalente utilizando o operador ternário.
Em seguida, mergulharemos em exemplos práticos, aprendendo a simular o comportamento do operador ternário do Python por meio de tuplas e dicionários. Por fim, examinaremos cenários específicos onde a utilização do operador ternário é a opção mais vantajosa.
Vamos dar início à nossa jornada!
Uma Análise da Instrução If-Else em Python
Para praticar, você pode utilizar um ambiente Python REPL ou o editor online disponível em etechpt.com.
A estrutura geral da instrução if-else em Python é definida da seguinte forma:
if condição: # executar este bloco else: # executar este outro bloco
Neste trecho, “condição” representa a expressão a ser avaliada. Se a avaliação da condição resultar em Verdadeiro (True), o bloco “if” é ativado. Caso contrário, se a condição for Falsa (False), o bloco “else” será executado.
A seguir, apresentamos um exemplo onde a variável “game_over” recebe um valor booleano, determinado pela comparação do valor de “energy” com zero.
- Se “energy” for menor ou igual a 0, “game_over” será definido como Verdadeiro (True).
- Caso contrário, “game_over” será definido como Falso (False).
O código abaixo ilustra como implementar essa lógica usando as instruções condicionais if-else:
energy = -1 if energy <= 0: game_over = True else: game_over = False print(game_over) # True
Neste exemplo, como “energy” é -1 (menor que 0), “game_over” recebe o valor Verdadeiro.
Sintaxe e Exemplos do Operador Ternário em Python
Python dispõe de um operador ternário, que opera de maneira similar ao operador condicional ternário presente em linguagens como C e C++. Sua estrutura geral é a seguinte:
expressão1 if condição else expressão2
Vamos detalhar essa estrutura:
- condição: A expressão que será avaliada.
- expressão1: A expressão a ser executada se a condição for avaliada como Verdadeira.
- expressão2: A expressão a ser executada se a condição for avaliada como Falsa.
Agora, vamos identificar como os elementos “expressão1”, “expressão2” e “condição” se encaixam na versão if-else do código anterior.
Unindo todos os elementos, o resultado com o operador ternário do Python é:
game_over = True if energy <= 0 else False print(game_over) # True
Vamos analisar outro exemplo. Imagine que você gerencia uma livraria e oferece descontos aos clientes, baseados em suas visitas à loja no último ano.
Seja “numVisits” a variável que armazena o número de visitas.
- Se “numVisits” for maior que 7, a porcentagem de desconto, “discount_perc”, será de 20%.
- Caso contrário, “discount_perc” será de 5%.
Utilizaremos o operador ternário para atribuir o valor correto à variável “discount_perc”.
numVisits = 10 discount_perc = 20 if numVisits > 7 else 5 print(discount_perc) # 20 (pois numVisits = 10 que é > 7)
A seguir, vamos explorar como simular o operador ternário usando tuplas e dicionários em Python.
Simulando o Operador Ternário com Tuplas em Python
Assim como em outras estruturas iteráveis em Python, as tuplas utilizam indexação baseada em zero. Ou seja, se você tem dois elementos em uma tupla, “tuple_name[0]” se refere ao primeiro elemento, e “tuple_name[1]” ao segundo.
Os tipos de dados fundamentais em Python são números inteiros, números de ponto flutuante, strings e booleanos. Python oferece suporte à conversão de tipos, permitindo representar um dado de um tipo específico em sua representação equivalente em outro tipo.
Inicie um ambiente Python REPL e execute os exemplos a seguir. Ao tentar converter números inteiros em booleanos, você observará o seguinte:
- “bool(0)” resulta em Falso (False).
- “bool(
)” resulta em Verdadeiro (True).
>>> bool(0) False >>> bool(1) True >>> bool(-1) True >>> bool(10) True
De maneira similar, ao converter Booleanos em inteiros, temos o seguinte:
>>> int(True) 1 >>> int(False) 0
Combinando a conversão de tipos com a indexação, podemos fazer o seguinte:
- Elemento no índice 0 da tupla: Valor a ser utilizado quando a condição for Falsa.
- Elemento no índice 1 da tupla: Valor a ser utilizado quando a condição for Verdadeira.
Com base no acima, temos:
>>> numVisits = 10 >>> discount_perc = (5,20)[numVisits > 7] >>> discount_perc # 20
Nesse caso, a condição “numVisits > 7” é Verdadeira, pois “numVisits” é 10. Como “int(True)” é 1, o valor de “discount_perc” passa a ser 20, o elemento no índice 1.
Simulando o Operador Ternário com Dicionários em Python
Você pode definir Verdadeiro (True) e Falso (False) como chaves em um dicionário. Em seguida, você pode definir “expressão1” e “expressão2” como os valores correspondentes às chaves Verdadeiro e Falso, respectivamente.
some_dict = {True: expressão1, False: expressão2 }
O que fazer em seguida? Ao utilizar “some_dict[condição]”, a “expressão1” correspondente à chave Verdadeiro será avaliada se a condição for Verdadeira. Caso contrário, “expressão2” será avaliada se a condição for Falsa.
Vamos codificar o exemplo “discount_perc” mais uma vez, mas desta vez utilizando um dicionário do Python.
>>> numVisits = 10 >>> discount_dict = {True: 20, False:5} >>> discount_perc = discount_dict[numVisits > 7] >>> discount_perc # 20
Aqui, “numVisits = 10”, que é maior que 7. Portanto, a condição “numVisits > 7” é Verdadeira. Assim, “discount_dict[numVisits > 7]” se traduz em “discount_dict[True]”, que tem o valor 20.
Sempre Utilizar o Operador Ternário em Python?
Até este ponto, já aprendemos como usar o operador ternário. Mas será que devemos utilizá-lo em todas as situações? A resposta é que o operador ternário pode não ser a escolha ideal em todos os casos. Esta seção explora os cenários em que o operador ternário é preferível às instruções if-else, e vice-versa.
Maior Concisão do que Blocos If-Else
Como mencionado, em Python, a expressão do operador ternário é mais concisa do que a instrução if-else. Assim, ele se torna útil para verificar condições e avaliar expressões condicionais em tempo real.
No exemplo abaixo, “nums” é uma lista de 100 números inteiros gerados aleatoriamente. Para cada um desses números, verificamos se ele é par ou ímpar. Essa avaliação é feita diretamente dentro da f-string.
import random nums = [random.choice(range(100)) for i in range(10)] for num in nums: print(f"{num} is {'even' if num%2==0 else 'odd'}")
# exemplo de saída 0 is even 56 is even 6 is even 53 is odd 62 is even 7 is odd 8 is even 77 is odd 41 is odd 94 is even
O Operador Ternário Requer a Cláusula Else
Ao utilizar as instruções condicionais if-else, a cláusula else é opcional. Veja este exemplo: a variável “game_over” é definida como Verdadeira se “energy” for menor ou igual a zero.
Entretanto, se “energy” for maior que zero, “game_over” não é inicializada. Logo, você encontrará erros ao tentar acessar a variável “game_over”.
energy = 5 if energy <= 0: game_over = True print(f"Is the game over? {game_over}")
Traceback (most recent call last): File "ternary_op.py", line 39, in <module> print(f"Is the game over? {game_over}") NameError: name 'game_over' is not defined
Uma solução para este problema é definir “game_over” como Falsa inicialmente, e atualizá-la para Verdadeira se o nível de “energy” for menor ou igual a zero.
energy = 5 game_over = False if energy <= 0: game_over1 = True print(f"Is the game over? {game_over}")
Por outro lado, ao utilizar o operador ternário do Python, a cláusula else não é opcional. O operador ternário exige que uma expressão seja avaliada quando a condição for Falsa.
game_over = True if energy <= 0 else False
Se você modificar o código anterior para “game_over = True if energy <= 0”, omitindo a parte “else”, você se deparará com um erro de sintaxe, como demonstrado:
File "ternary_op.py", line 42 game_over = True if energy <= 0 ^ SyntaxError: invalid syntax
Use Instruções If-Else para Verificar Múltiplas Condições
Considere o seguinte cenário: cada pergunta em um conjunto de perguntas de entrevista de programação tem um nível de dificuldade associado. Com base nesse nível, atribuímos um dos três níveis de dificuldade: fácil, médio ou difícil. Suponha que temos as seguintes faixas:
Pontuação Nível de dificuldade
Menos de 10 Fácil
Entre 10 e 20 Médio
Maior que 20 Difícil
Com a pontuação de dificuldade, você pode obter o nível de dificuldade correspondente usando o operador ternário do Python da seguinte forma:
score = 12 difficulty_level = "easy" if score < 10 else "hard" if score > 20 else "medium" print(difficulty_level) # medium
A expressão do operador ternário no bloco de código acima tem a seguinte estrutura:
expressão1 if condição1 else expressão2 if condição2 else expressão3
Apesar de sua concisão, essa estrutura pode ser difícil de ler e interpretar. A imagem abaixo ilustra o fluxo de controle nesse caso:
O código a seguir apresenta uma implementação equivalente utilizando instruções if-else. Como pode ser observado, o fluxo de controle se torna muito mais fácil de entender, e o código é mais legível.
if score < 10: difficulty_level="easy" elif score > 20: difficulty_level="hard" else: difficulty_level="medium" print(difficulty_level)
Portanto, ao lidar com múltiplas condições, é mais recomendado utilizar os blocos if-else em vez do operador ternário. Isso garante que o código seja mais fácil de ler e compreender.
Adicionalmente, quando é necessário executar múltiplas instruções – dependendo se a condição é verdadeira ou falsa – você também deve considerar utilizar a instrução if-else.
Conclusão
Aqui está um resumo do que você aprendeu neste tutorial:
- Em Python, o operador ternário pode ser utilizado com a seguinte sintaxe: “expressão1 if condição else expressão2”.
- O comportamento do operador ternário pode ser simulado utilizando tuplas e dicionários em Python.
- Embora o operador ternário possa ser uma alternativa mais concisa aos blocos if-else, é fundamental garantir que o código seja legível. Para aumentar a legibilidade, é aconselhável utilizar as instruções if-else em vez do operador ternário, principalmente quando houver encadeamento de múltiplas condições.
A seguir, aprenda sobre os operadores de igualdade e diferença em Python.