En este video tutorial veremos la resolución de un ejercicio con sus respectivos tests. El ejercicio nos pide obtener los factores primos de un número. Entonces, por ejemplo, para el número 2, nos devuelve 2; para el número 4 nos va a devolver el 2 y el 2; para el número 6, nos devuelve el 2 y el 3; para el número 12, nos devuelve el 2, el 2 y el 3; y para el número 91 nos devuelve el 7 y el 13. Veamos los tests de la función que obtienen los factores primos. Primero, le preguntamos los factores primos al "uno"; el "uno", como no es un número primo y no es divisible por ningún número primo, entonces devuelve una lista vacía. Después pedimos los factores primos del 2, que nos devuelve la lista con el 2. Los factores primos del 4, nos devuelve la lista con el 2 y el 2. Los primos del 6 nos devuelve el 2 y el 3. Los factores primos del 12, nos devuelve el 2, el 2 y el 3. Y los factores primos del 91 nos devuelven el 7 y el 13. Notar que al chequear resultados que son listas, conjuntos, duplas o cualquier tipo de secuencia, en muchos casos es recomendable acertar sobre el tamaño de la secuencia y acertar que estén, únicamente, los objetos que deben estar. Esto es porque, salvo que el orden sea importante, podría haber una resolución válida del problema que no pase el test. Entonces, por ejemplo, podemos acertar porque la cantidad de los factores primos del 91 sean 2, y que el 7 sea un factor primo de 91 y que el 13 es un factor primo del 91. Veamos la implementación de la función. Entonces, vemos que la función "prime_factors" empieza a recorrer todos los primos hasta el número, que esa es una función que definimos arriba, y después se fija hacia un "while" de dividir el número por ese primo y, si lo divide, se agrega a la lista y se divide "n" por ese divisor. Luego se sigue haciendo el "while" por si este divisor divide otra vez a ese número y se agrega a la lista, o si no, ya sale del "while" y pasa al siguiente primo. Entonces, para hacer esto requerimos la función "primes_to" que nos devuelve una lista de los primos hasta cierto número. Entonces, lo que se hace es recorrer los números desde el 2, que es el primer primo hasta "n+1", para que lo incluya al número "n", y se pregunta si es primo, se agrega a la lista. Entonces otra vez definimos una función "es primo", para definir si un número es primo o no, que lo que hace es: si es menor o igual a uno, nos devuelve "False" y si es "dos" para arriba, empieza en "True" y empieza a recorrer desde el "dos" hasta "n", que es ese número que queremos saber si es primo, y empieza a dividir el número por el divisor. Si alguno le divide, quiere decir que no es primo, y si no lo divide ninguno, entonces, es primo. Ahora veamos los tests de estas funciones. Entonces, los tests de la función "es primo" se fija si es primo el 1, que devuelve que no, notar que usamos un "assertFalse". Luego preguntamos si el 2 es primo, le hacemos hacer un "assertTrue" de si es primo el 2. Lo mismo con el 3, si es primo el 3, devuelve "True", debería devolver "True", digamos; y el 4 debería devolver "False". El 5 debería devolver "True" y el 6 debería devolver "False" y el 7 debería devolver "True". Y, después, la función "primes_to", que, si le paso el 1, como no hay ningún primo hasta el 1, devuelve la lista vacía, si le paso el 2, devuelve la lista con el 2. Si le paso el 3, devuelve la lista con el 2 y el 3. Si le paso el 4, devuelve la lista con el 2 y el 3. Si le paso el 5, devuelve la lista con el 2, el 3 y el 5. Si le paso el 6, devuelve la lista con el 2, el 3 y el 5. Si le paso el 7, devuelve la lista con el 2, el 3, el 5 y el 7. Ahora vamos a correr los tests, para eso vamos a usar Python del archivo "factores_primos.py, y vemos que pasan 20 tests. Veamos, que nunca vimos, cuando falla uno. Por ejemplo, vamos a borrar el 3 en este "assert". Cuando corro los tests, me dice que se corrieron 20 tests y que una falló. Entonces, y vemos que la lista del 2, 5, el 7, es la que está, la que se espera, y llegó la lista con el 2, el 3, el 5 y el 7. Veamos otra funcionalidad que es hacer un "skip" de los tests. Para eso, podemos usar el decorador de unittest.skip. Entonces, acá le puedo poner un mensaje que yo quiera, y lo que va a hacer esto es que cuando lo corra, me va a decir que corrieron 20 test, pero que uno fue filtrado, o sea que no se corre. Entonces, con esto, hemos visto la implementación de la función "factores_primos" y sus tests.