Saltar a contenido

La elegancia de usar expresiones booleanas directas

Recordemos nuestro programa anterior que determina si un número es par o impar:

par_o_impar_operador_ternario.py
def es_par_ternario(numero):
    return True if numero % 2 == 0 else False

numero = int(input("Ingrese un número entero: "))

# Llamamos a la función `es_par_ternario` y evaluamos su resultado.
if es_par_ternario(numero): 
    print(f"El número {numero} es par")
else:
    print(f"El número {numero} es impar")

Debemos tomar el hábito de no solo escribir código correcto, sino escribir código cada vez mejor, manteniéndolo legible.

Habíamos resaltado, en la sección anterior, la siguiente línea de código:

par_o_impar_operador_ternario.py

    return True if numero % 2 == 0 else False

Podemos notar que numero % 2 == 0 es una expresión booleana. Esto quiere decir que cuando sea resuelta devolverá uno de estos dos únicos posibles valores: True (verdadero) o False (falso).

Entonces, si nuestra expresión booleana tendrá una respuesta verdadera o falsa, ¿por qué tendríamos la necesidad de utilizar una estructura condicional para preguntar si es verdadera o falsa? ¿Por qué si ya obtenemos una respuesta verdadera o falsa, tendríamos que preguntar si es verdadera o falsa?

¿Entiendes el concepto?

Por lo tanto, no es necesario preguntar si el valor verdadero de la expresión booleana es verdadero o si el valor falso de la expresión booleana es falso. Simplemente devolvemos el valor de la propia expresión booleana.

Por lo tanto, podemos simplificar nuestro código de la siguiente manera:

par_o_impar_expresion_booleana.py
def es_par_expresion_booleana(numero):
    return numero % 2 == 0

# Llamamos a la función `es_par_expresion_booleana` y evaluamos su resultado.
if es_par_expresion_booleana(numero): 
    print(f"El número {numero} es par")
else:
    print(f"El número {numero} es impar")

En nuestra función es_par_expresion_booleana(numero) numero dividido por dos tendrá, o no, un resto de cero.
Si lo tiene, la respuesta será True.
Si no es así, la respuesta será False.

Así que nuestra función devolverá el valor booleano obtenido de la expresión booleana (de la pregunta en sí) sin que sea necesario evaluar luego con un operador ternario o con una estructura condicional if… else dicho valor.

Antes de continuar, te voy a dejar un ejercicio final sobre este programa para que practiques lo aprendido.

¿Cómo podrías refactorizar esta parte del código para simplificarlo y que tenga mayor claridad?

par_o_impar_expresion_booleana.py

if es_par_expresion_booleana(numero): 
    print(f"El número {numero} es par")
else:
    print(f"El número {numero} es impar")

¡Buena suerte!

Haz clic aquí para ver la solución propuesta
par_o_impar_expresion_booleana.py
def es_par_expresion_booleana(numero):
    return numero % 2 == 0

# Llamamos a la función `es_par_expresion_booleana` y evaluamos su resultado.
print(f"El número {numero} es {"par" if es_par_expresion_booleana(numero) else "impar"}")

En esta solución, hemos utilizado una cadena de formato para imprimir el resultado correspondiente.
En dicha cadena de formato, hemos utilizado un operador ternario para determinar si el número es "par" o "impar" a partir del resultado booleano que devuelve la función es_par_expresion_booleana() al pasarle como argumento la variable numero.
De esta manera, hemos simplificado aún más nuestro código y lo hemos hecho más legible.

En la siguinte sección veremos otra palabra clave que nos permitirá abordar de diferente manera la lógica de nuestras expresiones condicionales y nuestras estructuras alternativas.