Como usar o operador ternário do Python
Publicados: 2023-01-04Este 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!
A instrução If-Else em Python: uma revisão
Você pode codificar iniciando um Python REPL ou no editor Python online do Geekflare.
A sintaxe genérica da instrução if-else em Python é a seguinte:
if condition: # do this else: # do this
No trecho acima, condition
denota a condição a ser verificada. Se a condição for avaliada como True
, o bloco if será 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, energy
é -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:
-
condition
: A condição a ser verificada. -
expression1
: A expressão para avaliar se a condição é verdadeira. -
expression2
: A expressão para avaliar se a condição é False.
Agora, identificaremos qual expression1
, expression2
e condition
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]
fornece 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)
éFalse
. -
bool(<any non-zero integer>)
retornaTrue
.
>>> 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
condition
forFalse
. - Elemento no índice 1 da tupla: O valor a ser usado quando a
condition
forTrue
.
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 expression1
correspondente à chave True
será avaliada se a condition
for True
. E expression2
é avaliada quando a condition
é 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
. Portanto, discount_dict[numVisits > 7]
avaliado como 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 energy
cair para um valor menor ou igual a zero.
Porém, se a energy
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 exige que a expressão seja avaliada quando a condition
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 do que 10 | fácil |
Entre 10 e 20 | médio |
Maior que 20 | duro |
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:
expression1 if condition else expression2
. - 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.