Este guia ensinará como usar o operador ternário em Python. Você aprenderá a sintaxe e vários exemplos de código para entender como funciona.
Começaremos revisando como a instrução condicional if-else funciona e aprenderemos como escrever uma expressão equivalente usando o operador ternário.
A seguir, codificaremos alguns exemplos e aprenderemos como emular o comportamento do operador ternário do Python usando uma tupla e um dicionário do Python. Por fim, revisaremos alguns casos de uso em que você deve preferir usar o operador ternário.
Vamos começar!
últimas postagens
A instrução If-Else em Python: uma revisão
Você pode codificar iniciando um Python REPL ou no editor Python on-line do etechpt.com.
A sintaxe genérica da instrução if-else em Python é a seguinte:
if condition: # do this else: # do this
No trecho acima, condição denota a condição a ser verificada. Se a condição for avaliada como True, o bloco if é acionado. Se a condição for avaliada como False, as instruções dentro do bloco else serão executadas.
Aqui está um exemplo em que a variável game_over recebe um valor booleano, dependendo se o valor de energy é menor ou igual a zero.
- Se energy <= 0, game_over é True.
- Caso contrário, game_over é falso.
O trecho de código a seguir mostra como fazer isso 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, a energia é -1, que é menor que 0. Portanto, game_over é verdadeiro.
Operador ternário do Python: sintaxe e exemplos
Python tem um operador ternário que funciona muito como o operador condicional ternário em linguagens como C e C++. A sintaxe geral para usá-lo é a seguinte:
expression1 if condition else expression2
Vamos analisar a sintaxe acima:
- condição: A condição a ser verificada.
- expression1: A expressão para avaliar se a condição é True.
- expression2: A expressão para avaliar se a condição é False.
Agora, identificaremos qual expressão1, expressão2 e condição devem ser da versão if-else do código.
Juntando tudo, temos o seguinte usando o operador ternário do Python.
game_over = True if energy <= 0 else False print(game_over) # True
Vamos codificar outro exemplo. Suponha que você administre uma livraria e dê aos leitores um desconto em suas compras, dependendo da frequência com que eles visitaram sua loja no último ano.
Deixe numVisits denotar o número de visitas.
- Se numVisits > 7, a porcentagem de desconto, discount_perc é 20.
- Caso contrário, discount_perc é 5.
Usamos o operador ternário para atribuir valor à variável discount_perc.
numVisits = 10 discount_perc = 20 if numVisits > 7 else 5 print(discount_perc) # 20 (as numVisits = 10 which is > 7)
A seguir, aprenderemos como emular o operador ternário usando uma tupla do Python e um dicionário.
Emulando o operador ternário com Python Tuple
Como todos os iteráveis em Python, as tuplas seguem a indexação zero. Portanto, se você tiver dois elementos em uma tupla, tuple_name[0] denota o primeiro elemento na tupla e tuple_name[1] dá o segundo elemento na tupla.
Os tipos básicos de dados em Python são integer, float, string e boolean. O Python oferece suporte à conversão de tipos que permite representar um tipo de dados específico por sua representação equivalente em outro tipo de dados.
Inicie um Python REPL e execute os exemplos a seguir. Se você tentar converter números inteiros em booleanos, notará o seguinte:
- bool(0) é Falso.
- bool(
) retorna True.
>>> bool(0) False >>> bool(1) True >>> bool(-1) True >>> bool(10) True
Da mesma forma, ao converter Boolean para inteiros, temos o seguinte:
>>> int(True) 1 >>> int(False) 0
Juntando a conversão de tipos e a indexação, podemos fazer o seguinte:
- Elemento no índice 0 na tupla: O valor a ser usado quando a condição for False.
- Elemento no índice 1 da tupla: O valor a ser usado quando a condição for True.
Uisng o acima, temos o seguinte:
>>> numVisits = 10 >>> discount_perc = (5,20)[numVisits > 7] >>> discount_perc # 20
Aqui, a condição numVisits > 7 é True, pois numVisits é 10. Como int(True) é 1, o valor de discount_perc é 20, o elemento no índice 1.
Emulando o operador ternário com o dicionário Python
Você pode definir True e False como as chaves do dicionário. E você pode definir expression1 e expression2 como os valores correspondentes às chaves True e False, respectivamente.
some_dict = {True: expression1, False: expression2 }
O que você faz em seguida? Agora, se você usar some_dict[condition], a expressão1 correspondente à chave True será avaliada se a condição for True. E a expressão2 é avaliada quando a condição é False.
Vamos codificar o exemplo discount_perc (novamente), mas desta vez usando um dicionário 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 é True. Então desconto_dict[numVisits > 7] avalia para discount_dict[True] que é o valor 20.
Você deve sempre usar o operador ternário do Python?
Até agora, aprendemos como usar o operador ternário. Mas devemos sempre usar o operador ternário? Bem, o operador ternário pode não ser a melhor escolha para todos os casos de uso. Esta seção detalha quando você deve preferir usar o operador ternário em vez de instruções if-else. Também abordaremos quando devemos considerar o uso da instrução if-else em vez do operador ternário.
Blocos mais concisos do que if-else
Conforme mencionado, em Python, a expressão do operador ternário é mais concisa do que a instrução if-else. Portanto, você pode usá-lo para verificar condições e avaliar expressões condicionalmente em tempo real.
No exemplo a seguir, nums é uma lista de 100 inteiros gerados aleatoriamente. Para cada um dos 100 números, verificamos se é par ou ímpar. E essa avaliação ocorre em linha 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'}")
# sample output 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
Quando você estiver usando as instruções condicionais if-else, a cláusula else é opcional. Vamos dar um exemplo. A variável game_over é definida como True se a energia cair para um valor menor ou igual a zero.
Porém, se a energia for maior que zero, a variável game_over nunca é inicializada. Portanto, você encontrará erros se 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 maneira de corrigir isso é definir game_over como False inicialmente e atualizá-lo para True se o nível de energia 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}")
No entanto, ao usar o operador ternário do Python equivalente ao acima, a cláusula else não é opcional. O operador ternário requer que a expressão seja avaliada quando a condição for False.
game_over = True if energy <= 0 else False
Se você alterar o acima para game_over = True if energy <= 0 removendo a outra parte, você encontrará um erro de sintaxe, conforme mostrado:
File "ternary_op.py", line 42 game_over = True if energy <= 0 ^ SyntaxError: invalid syntax
Para verificar várias condições, use instruções If-Else
Considere o exemplo: Cada pergunta em um conjunto de perguntas de entrevista de codificação tem uma pontuação de dificuldade associada. Dependendo dessa pontuação, atribuímos um dos três níveis de dificuldade: fácil, médio ou difícil a uma determinada questão. Suponha que temos o seguinte:
Pontuação Nível de dificuldade Menos de 10 fácil Entre 10 e 20 médio Maior que 20 difícil
Dada a pontuação de dificuldade, você pode obter seu nível de dificuldade usando o operador ternário do Python, conforme mostrado:
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 o seguinte formato:
expression1 if condition1 else expression2 if condition2 else expression3
Embora conciso, é um pouco difícil de ler e analisar. A imagem a seguir mostra como ocorre o fluxo de controle neste caso.
O trecho de código a seguir mostra uma implementação equivalente usando instruções if-else. Como visto, o fluxo de controle é 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, quando você tiver várias condições, deverá usar os blocos if-else em vez do operador ternário. Isso garante que o código seja fácil de ler e entender.
Além disso, quando você precisa executar várias instruções — dependendo se a condição é verdadeira ou falsa — você deve considerar o uso da instrução if-else.
Conclusão
Aqui está uma recapitulação do que você aprendeu neste tutorial.
- Em Python, o operador ternário pode ser usado com a seguinte sintaxe: expressão1 if condição else expressão2.
- Você pode emular o comportamento do operador ternário usando tuplas e dicionários do Python.
- Embora o operador ternário possa ser uma alternativa mais concisa aos blocos if-else, você deve garantir que o código seja legível. Para melhorar a legibilidade do código, você pode usar as instruções if-else em vez do operador ternário, especialmente quando precisar encadear várias condições.
A seguir, aprenda a conferir o tutorial sobre operadores iguais e diferentes em Python.