Python Quiz 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.