[MÚSICA] En esta lección del módulo, vamos a ver un truco muy útil cuando implementamos algoritmos utilizando la instrucción While. Vamos a trabajar sobre el problema de encontrar el máximo común divisor de dos números. La estrategia de solución que vamos a utilizar es la búsqueda exhaustiva, eso consiste en lo siguiente. Tomamos como denominador el menor de los dos números entre los cuales queremos buscar el máximo común divisor. Probamos si este denominador es divisor de los dos números, si lo es, lo encontramos, si no lo es, decrementamos el denominador y volvemos a empezar, es decir, volvemos a iterar. Veamos este código en Python. Nuestra función, la que estamos creando, se llama, máximo común divisor. Recibe como parámetro los dos números a los cuales queremos encontrar el máximo común divisor, esos son n1 y n2, y la función retorna un entero, que es el máximo común divisor de estos dos números. Lo primero que hacemos es crear una variable n, dentro de la cual vamos a guardar el menor número entre n1 y n2, y empezamos nuestra búsqueda exhaustiva mediante un ciclo implementado con la instrucción While. Veamos entonces. Vamos a iterar hasta que n, el divisor, sea divisor de n1 y de n2 al mismo tiempo. En otras palabras, eso quiere decir que vamos a iterar mientras que n no sea divisor de n1 o de n2. Recordemos que para saber si un número es divisor de otro podemos utilizar el operador matemático del módulo. Aquí estamos preguntando si n no es divisor de n1, es decir, si n1 módulo n es diferente de 0, y hacemos lo mismo con n 2. Analicemos detenidamente estas expresiones que son opuestas. Dijimos en la diapositiva anterior que, iteramos hasta que n sea divisor de n1 y de n2 al mismo tiempo. Dicho en otras palabras, iteramos mientras que n no sea divisor de n1 o de n2. Llegamos de la primera expresión a la segunda aplicando las leyes de Morgan para negar expresiones lógicas. Si no recuerdas las leyes de Morgan, repasa las lecciones del módulo dos. A veces se nos facilita más pensar en la condición de parada o de salida del ciclo, que en la condición de continuación, que es la condición de iteración. Para esto, hay una solución muy útil, es usar el truco del centinela. Veamos entonces en qué consiste el truco del centinela. El centinela no es más que una variable con la que vamos a controlar la continuación y salida de un ciclo, por eso es natural que sea una variable booleana, pero podría ser de cualquier otro tipo. En este ejemplo que mostramos en la diapositiva, estamos utilizando un centinela booleano y lo estamos inicializando en false. Esta variable la llamamos encontró, la inicializamos en false justamente porque no hemos encontrado lo que estamos buscando, que en este ejemplo es el máximo común divisor de los dos números que entran como parámetro. Y arrancamos nuestro ciclo. Vamos a iterar mientras nuestro centinela encontró tenga el valor de false. Como este fue el valor que le dimos al inicializar la variable, estamos seguros que por lo menos una vez entraremos al cuerpo del ciclo. Cuando la condición de parada del ciclo se cumple, es decir, que encontramos lo que estábamos buscando, que en este ejemplo concreto es el máximo común divisor, es decir, un número, n, que me divide tanto como a n1 como a n2, le cambiamos el valor al centinela, lo ponemos true, justamente para romper el ciclo. ¿Por qué se rompe? Porque la siguiente vez que vamos a iterar encontró you no es false porque le acabamos de asignar el valor true, y esto hace que el ciclo se suspenda. Miremos qué pasa si n no divide al mismo tiempo a n1 y a n2, quiere decir que no hemos encontrado aún al máximo común divisor. Por consiguiente, decrementamos su valor en 1 y volvemos a iterar. Este ciclo se repetirá hasta que encontremos un valor que divida a nuestros dos números. En el peor de los casos, será el valor 1 y este es el que se retorna al final de la función. [MÚSICA] [MÚSICA]