Python Quiz 9 – Cómo identificar números pares en Python

Pyquiz 9 - Cómo identificar números pares en Python

Pregunta principal del PyQuiz:

>>> nums = set()
>>> for x in range(5):
...     if not x % 2:
...         nums.add(x)
...
>>> print(nums)
- ?? -
# A - {0, 2, 4}
# B - {1, 3, 5}
# C - {1, 2, 3, 4, 5}

Concepto y explicación

En esta pregunta hay diferentes aspectos a tener en cuenta.

La lógica principal de la pregunta es:

  • Creación de un conjuntos para guardar valores.
  • Iteración sobre un range.
  • Comprobación por cada elemento si es par o no.
  • Adición del elemento par al conjunto de números.
  • Impresión por pantalla de los números guardados.

La lógica principal es simple y la parte principal radica en saber cómo identificar si un número es par o no.

Identificar si un número es par o impar usando operación módulo

La forma más simple y utilizada para calcular si un número es par o impar es utilizando la operación módulo.

El operador % es el encargado de realizar la operación de módulo, que devuelve el resto de la división entre dos números:

>>> 3 % 2
1
>>> 17 % 3
2
>>> 17 // 3
5
>>> 17 / 3
5.666666666666667
>>> 19 / 10, 19 // 10, 19 % 10
(1.9, 1, 9)
>>> 16 / 5, 16 // 5, 16 % 5
(3.2, 3, 1)

Como se puede ver en los ejemplos, la operación es muy rápida y simple pero ¿cómo se podría utilizar la operación módulo para obtener números pares?.

Dada la dualidad de los números pares e impares, en los que si un número x es par, el siguiente es impar y el siguiente es par, se puede ver que hay una gran relación entre ellos.

La mágia aparece si se piensa en qué ocurre cuando a un número se le aplica la función módulo de 2. En este caso los valores devueltos pueden ser 0, si el número es divisible por 2, o 1 si el número no es divisible entre 2 (dado que al dividirlo entre 2 sobre una unidad).

Siguiendo esta lógica obtenemos una fórmula para calcular si un número es par (divisible entre 2) o impar (no es divisible entre 2):

>>> for x in range(15):
...     print(f"{x} mod 2 es: {x % 2} -> {'par' if x % 2 == 0 else 'impar'}")
...
0 mod 2 es: 0 -> par
1 mod 2 es: 1 -> impar
2 mod 2 es: 0 -> par
3 mod 2 es: 1 -> impar
4 mod 2 es: 0 -> par
5 mod 2 es: 1 -> impar
6 mod 2 es: 0 -> par
7 mod 2 es: 1 -> impar
8 mod 2 es: 0 -> par
9 mod 2 es: 1 -> impar
10 mod 2 es: 0 -> par
11 mod 2 es: 1 -> impar
12 mod 2 es: 0 -> par
13 mod 2 es: 1 -> impar
14 mod 2 es: 0 -> par

Como se puede ver en el ejemplo, si se comprueba si el módulo 2 de un número devuelve 0, significa que es par.

Para simplificar la comprobación se puede aplicar el operador not a la comprobación y simplificarla como if not x % 2 para comprobar si x es par, dando la operación utilizada en la pregunta.

Esto ocurre porque todos los valores distintos de 0 se evalúan como verdadero, y 0 se evalúa como falso. Al buscar que la ecuación devuelva 0, hay que comprobar que not(valor_devuelto) para que devuelva verdadero.

Para saber si un número es impar sólo hay que hacer la operación contraria de si es par.

División entre 2 para detectar números pares o impares

La forma más lógica de saber si un número es divisible entre 2 sin que quede ningún resto. Para obtener este resultado nos basamos en que la división entera de un número entre 2 y su multiplicación por 2 debe de ser el número original, de lo contrario, el número no es par.

>>> def is_even(x):
...     return (x // 2) * 2 == x
...
>>> def is_odd(x):
...     return not(is_even(x))
...
>>> for x in range(5):
...     print(f"{x} es {'par' if is_even(x) else 'impar'}")
...
0 es par
1 es impar
2 es par
3 es impar
4 es par

Operaciones a nivel de bits para detectar números pares o impares

Otra forma de calcular si un número es par se puede obtener analizando el número binario que representa el entero.

Todos los número pares tienen como primer número un 0 mientras que los impares lo tienen a 1.

Por tanto aplicando una máscara a nivel de bit en el primer bit del número en su formato binario se puede saber si ese número es par o no.

>>> bin(5)
'0b101'
>>> bin(6)
'0b110'
>>> bin(7)
'0b111'
>>> bin(8)
'0b1000'
>>> def is_even(x):
...     return x & 1 == 0
...
>>> for x in range(10):
...    print(f"{x} es {'par' if is_even(x) else 'impar'}")
...
0 es par
1 es impar
2 es par
3 es impar
4 es par
5 es impar
6 es par
7 es impar
8 es par
9 es impar

Solución

Por tanto la solución correcta es la A:

A) {0, 2, 4}


Practica Python con PyQuizzes

En la sección de PyQuizzes puedes encontrar ejercicios prácticos explicados pormenorizado para mejorar tus habilidades como pythonista. ¡No te los pierdas!


Tutorial Python online

Aprender Python de forma gratuita siguiendo las secciones del tutorial de Python.


Libros recomendados para aprender Python

Estos son los libros que pueden ayudarte a aprender Python, aprender a programar, tipos de datos, algoritmia y mucho más.

Disponible en:

Compartir

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

Ver más

  • Responsable: Oscar Ramirez.
  • Finalidad:  Moderar los comentarios.
  • Legitimación:  Por consentimiento del interesado.
  • Destinatarios y encargados de tratamiento: No se ceden o comunican datos a terceros para prestar este servicio. El Titular ha contratado los servicios de alojamiento web a ionos (1&1) que actúa como encargado de tratamiento.
  • Derechos: Acceder, rectificar y suprimir los datos.
  • Información Adicional: Puede consultar la información detallada en la Política de Privacidad.

Publicar un comentario