Esta guía le enseñará a utilizar el operador ternario en Python. Aprenderá la sintaxis y codificará varios ejemplos para entender cómo funciona.
Empezaremos repasando cómo funciona la sentencia condicional if-else y luego aprenderemos a escribir una expresión equivalente utilizando el operador ternario.
A continuación, codificaremos algunos ejemplos y después aprenderemos a emular el comportamiento del operador ternario de Python utilizando una tupla y un diccionario de Python. Por último, repasaremos algunos casos de uso en los que debería preferir utilizar el operador ternario.
Comencemos
La sentencia If-Else en Python: Un repaso
Puede codificar a lo largo iniciando un REPL de Python o en el editor de Python en línea de Geekflare.
La sintaxis genérica de la sentencia if-else en Python es la siguiente:
si condición:
# hacer esto
else:
# haga esto
En el fragmento anterior, condition
denota la condición que debe comprobarse. Si la condición se evalúa como True
, entonces se ejecuta el bloque if. Si la condición evalúa a Falso
, entonces se ejecutan las declaraciones dentro del bloque else.
He aquí un ejemplo en el que a la variable game_over
se le asigna un valor booleano en función de si el valor de la energía
es menor o igual que cero.
- Si energía
<= 0
,game_over
esTrue
. - En caso contrario,
game_over
es Falso.
El siguiente fragmento de código muestra cómo hacer esto utilizando las sentencias condicionales if-else:
energía = -1
si energía <= 0
game_over = True
si no
game_over = Falso
print(game_over)
# Verdadero
En este ejemplo, la energía
es -1, que es menor que 0. Así que game_over
es True.
Operador Ternario de Python: Sintaxis y ejemplos
Python tiene un operador ternario que funciona de forma muy parecida al operador condicional ternario de lenguajes como C y C . La sintaxis general para utilizarlo es la siguiente:
expresión1 si condición else expresión2
Analicemos la sintaxis anterior:
condición
: La condición a comprobar.expression1
: La expresión a evaluar si la condición es True.expresión2
: La expresión a evaluar si la condición es Falsa.
Ahora, identificaremos cuáles deben ser la expresión1
, la expresión2
y la
condición a partir de la versión if-else del código.
Juntándolo todo, tenemos lo siguiente utilizando el operador ternario de Python.
game_over = True if energía <= 0 else False
print(game_over)
# Verdadero
Codifiquemos otro ejemplo. Supongamos que regenta una librería y ofrece a los lectores un descuento en su compra dependiendo de la frecuencia con la que hayan visitado su tienda en el último año.
Sea numVisitas
el número de visitas.
- Si numVisits
> 7
, el porcentaje de descuento,discount_perc
es 20. - Si no,
discount_perc
es 5.
Utilizamos el operador ternario para asignar valor a la variable discount_perc
.
numVisitas = 10
discount_perc = 20 if numVisits > 7 else 5
print(descuento_perc)
# 20 (ya que numVisitas = 10 que es > 7)
A continuación, aprenderemos a emular el operador ternario utilizando una tupla de Python y un diccionario.
Emular el operador ternario con una tupla de Python
Como todos los iterables en Python, las tuplas siguen la indexación cero. Así que si tiene dos elementos en una tupla, nombre_tupla [0]
denota el primer elemento de la tupla y nombre_tupla[1
] da el segundo elemento de la tupla.
Los tipos de datos básicos en Python son entero, flotante, cadena y booleano. Python admite el moldeado de tipos que le permite representar un tipo de datos concreto mediante su representación equivalente en otro tipo de datos.
Inicie un REPL de Python y ejecute los siguientes ejemplos. Si intenta convertir números enteros en booleanos, observará lo siguiente:
- bool
(0)
esFalso
. - bool
(<cualquier entero distinto de cero>
) devuelveVerdadero
.
>>> bool(0)
Falso
>>> bool(1)
Verdadero
>>> bool(-1)
Verdadero
>>> bool(10)
Verdadero
Del mismo modo, al convertir booleanos en enteros, tenemos lo siguiente:
>>> int(Verdadero)
1
>>> int(Falso)
0
Juntando el casting de tipos y la indexación, podemos hacer lo siguiente:
- Elemento en el índice 0 de la tupla: El valor que se utilizará cuando la
condición
seaFalso
. - Elemento en el índice 1 de la tupla: El valor que se utilizará cuando la
condición
seaVerdadero
.
Utilizando lo anterior, tenemos lo siguiente:
>>> numVisits = 10
>>> discount_perc = (5,20)[numVisits > 7]
>>> discount_perc
# 20
Aquí, la condición numVisitas
> 7 es Verdadera
ya que numVisitas
es 10. Como int(
Verdadero) es 1, el valor de discount_perc
es 20, el elemento en el índice 1.
Emulando el operador ternario con el diccionario de Python
Puede establecer Verdadero
y Falso
como claves del diccionario. Y puede establecer expresión1
y expresión2
como los valores correspondientes a las claves Verdadero
y Falso
, respectivamente.
algún_diccionario = {Verdadero: expresión1,
Falso: expresión2
}
¿Qué hace ahora? Ahora, si utiliza algún_dict [condición]
, la expresión1
correspondiente a la clave True
se evalúa si la condición
es True
. Y la expresión2
se evalúa si la condición
es Falsa
.
Codifiquemos el ejemplo de discount_perc
(de nuevo) pero esta vez utilizando un diccionario Python.
>>> numVisits = 10
>>> diccionario_descuento = {Verdadero: 20, Falso:5}
>>> discount_perc = discount_dict[numVisits > 7]
>>> discount_perc
# 20
Aquí, numVisits = 10
que es mayor que 7. Por lo tanto, la condición numVisits
> 7 es Verdadera
. Por lo tanto discount_dict[
numVisits > 7] se evalúa a discount_dict[True]
que es el valor 20.
¿Debe utilizar siempre el operador ternario de Python?
Hasta ahora, hemos aprendido a utilizar el operador ternario. Pero, ¿deberíamos utilizar siempre el operador ternario? Bueno, el operador ternario puede no ser la mejor opción para todos los casos de uso. Esta sección desglosa cuándo debería preferir utilizar el operador ternario en lugar de las sentencias if-else. También cubriremos cuándo deberíamos considerar el uso de la sentencia if-else en lugar del operador ternario.
Más conciso que los bloques if-else
Como se ha mencionado, en Python, la expresión del operador ternario es más concisa que la sentencia if-else. Por lo tanto, puede utilizarlo para comprobar condiciones y evaluar expresiones condicionalmente sobre la marcha.
En el siguiente ejemplo, nums
es una lista de 100 números enteros generados aleatoriamente. Para cada uno de los 100 números, comprobamos si es par o impar. Y esta evaluación se produce inline dentro de la cadena f.
importar aleatorio
nums = [random.choice(range(100)) for i in range(10)]
para num en nums:
print(f"{num} es {'par' si num%2==0 si no 'impar'}")
# salida de ejemplo
0 es par
56 es par
6 es par
53 es impar
62 es par
7 es impar
8 es par
77 es impar
41 es impar
94 es par
El operador ternario requiere la cláusula else
Cuando utilice las sentencias condicionales if-else, la cláusula else es opcional. Veamos un ejemplo. La variable game_over
se establece en True
si la energía
cae a un valor menor o igual que cero.
Sin embargo, si la energía
es mayor que cero, la variable game_over
nunca se inicializa. Así que se encontrará con errores si intenta acceder a la variable game_over
.
energía = 5
si energía <= 0
game_over = True
print(f "¿Ha terminado la partida? {game_over}")
Traceback (most recent call last):
File "ternary_op.py", line 39, in <module>
print(f "¿Se ha acabado la partida? {game_over}")
NameError: el nombre 'game_over' no está definido
Una forma de solucionar esto es establecer game_over
en False
inicialmente y actualizarlo a True
si el nivel de energía es menor o igual a cero.
energía = 5
game_over = False
si energía <= 0
game_over1 = True
print(f "¿Se ha acabado la partida? {game_over}")
Sin embargo, cuando se utiliza el operador ternario de Python equivalente al anterior, la cláusula else no es opcional. El operador ternario requiere que la expresión se evalúe cuando la condición
es False
.
game_over = True if energía <= 0 else False
Si cambia lo anterior a game_over = True if energy <=
0 eliminando la parte else, se encontrará con un error de sintaxis, como se muestra:
Archivo "ternary_op.py", línea 42
game_over = True si energía <= 0
^
SyntaxError: sintaxis inválida
Para comprobar varias condiciones, utilice las sentencias If-Else
Considere este ejemplo: Cada pregunta de un conjunto de preguntas de entrevista de codificación tiene una puntuación de dificultad asociada. En función de esta puntuación, asignamos uno de los tres niveles de dificultad: fácil, medio o difícil, a una pregunta concreta. Supongamos que tenemos lo siguiente
Puntuación | Nivel de dificultad |
Menos de 10 | fácil |
Entre 10 y 20 | medio |
Superior a 20 | difícil |
Dada la puntuación de dificultad, puede obtener su nivel de dificultad utilizando el operador ternario de Python como se muestra:
puntuación = 12
nivel_dificultad = "fácil" si puntuación < 10 si no "difícil" si puntuación > 20 si no "medio"
print(nivel_dificultad)
# medio
La expresión del operador ternario en el bloque de código anterior tiene la siguiente forma
expresión1 si condición1 else expresión2 si condición2 else expresión3
Aunque concisa, es un poco difícil de leer y analizar. La siguiente imagen muestra cómo se produce el flujo de control en este caso.
El siguiente fragmento de código muestra una implementación equivalente utilizando sentencias if-else. Como se ve, el flujo de control es mucho más fácil de entender y el código es más legible.
si puntuación < 10
nivel_dificultad="fácil"
elif puntuación > 20
nivel_dificultad="difícil"
si no
nivel_dificultad="medio"
print(nivel_dificultad)
Por lo tanto, cuando tenga varias condiciones, debe utilizar los bloques if-else en lugar del operador ternario. Esto garantiza que el código sea fácil de leer y comprender.
Además, cuando necesite ejecutar varias sentencias -dependiendo de si la condición es verdadera o falsa- debería considerar el uso de la sentencia if-else.
Conclusión
He aquí un resumen de lo que ha aprendido en este tutorial.
- En Python, el operador ternario puede utilizarse con la siguiente sintaxis:
expresión1 si condición else expresión2
. - Puede emular el comportamiento del operador ternario utilizando tuplas y diccionarios de Python.
- Aunque el operador ternario puede ser una alternativa más concisa a los bloques if-else, debe asegurarse de que el código sea legible. Para mejorar la legibilidad del código, puede utilizar las sentencias if-else en lugar del operador ternario, especialmente cuando necesite encadenar varias condiciones.
A continuación, aprenda a consultar el tutorial sobre operadores iguales y no iguales en Python.