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 -> parComo 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 parOperaciones 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 imparSolució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!
📥 Llévate el cheatsheet de Python (gratis)
PDF de 6 páginas con lo esencial: tipos, condicionales, bucles, estructuras de datos, funciones y los errores que más vas a cometer. Para tener al lado mientras programas.
Sin spam. Te apuntas a la lista, descargas el cheatsheet y recibes contenido de Python cada semana.
Tutorial Python online
Aprender Python de forma gratuita siguiendo las secciones del tutorial de Python.
¿Quieres aprender Python en orden, no a saltos?
Esto que has leído es solo una pieza. En El Pythonista lo verás todo encadenado: 11 módulos, 37+ horas de vídeo, 734 actividades y un proyecto real (MovieTracker) que crece contigo desde la primera variable hasta el deploy a producción.
37+ horas · 734 actividades · Proyecto real · Acceso de por vida · 14 días de garantía











