[MÚSICA] [MÚSICA] Hola de nuevo. Hoy vamos a finalizar el repaso de lógica matemática con dos teoremas muy importantes que se deben tener en cuenta cuando se están reescribiendo operaciones lógicas. Estamos hablando de las leyes o teoremas de De Morgan, que dicen que la negación de p y q es equivalente a negar p o negar q, y que la negación de p o q es equivalente a negar p y negar q. Veamos un ejemplo. Supongamos que tenemos un juego donde la misión es matar a un dragón, pero esto solo lo podemos hacer si el sable de luz mágica tiene el 90% más de batería y tenemos 100 o más unidades de energía en el escudo protector. Para expresar esta regla del juego tenemos la siguiente función en Python. Voy a leerla. Si no es cierto que el sable tiene el 90% o más de batería, y además el escudo tiene 100 o más unidades de energía, entonces el ataque no tendrá efecto y el dragón me freirá. En caso contrario, lograré mi misión, rescatar a la princesa. Si se dieron cuenta, es un poco difícil leerlo. Noten que el not está negando todo el condicional y esto hace que sea complejo expresar el caso. También identifiquemos los operadores relacionales para cada una de las condiciones, que en este caso es el mayor igual. Y por último, el operador lógico que es el and, es decir, que para que le mostremos el primer mensaje al usuario, las dos condiciones tienen que ser falsas para que la negación convierta al valor a verdadero. Aplicando las leyes de De Morgan y los supuestos lógicos, obtenemos, si la carga del sable es menor a 90 o la energía del escudo es menor a 100, mi ataque no será exitoso. En realidad, es mucho más sencillo de entender y de leer. Analicemos paso a paso la transformación. Aplicaremos la ley de De Morgan que dice que la negación de p y q es equivalente a la negación de p o a la negación de q. Entonces, primero negamos la expresión carga sable mayor igual a 90. Para esto, usamos el opuesto lógico y obtenemos carga sable menor a 90. Lo mismo hacemos con la segunda expresión obteniendo, energía escudo menor que 100. Solo nos falta negar el operador lógico obteniendo or. Otra forma de simplificar nuestros condicionales o hacerlos más claros es invertir el orden de las condiciones. Por ejemplo, en esta oportunidad el if describe el caso en que el ataque es exitoso, es decir, cuando la carga del sable es mayor igual a 90 y la energía del escudo es mayor igual a 100. Y el else, es el caso no exitoso. Para ser honesta, en programación con seguridad usaremos muchas veces las reglas de álgebra booleana de los supuestos lógicos, y las leyes de De Morgan, pero muchas veces hasta sin darnos cuenta. Así que por ahora practiquemos conscientemente con esta pregunta. Cerremos este repaso con una moraleja, que está relacionada con el estilo de programación del que hablamos en el módulo anterior. A medida que desarrollemos nuestras habilidades de programación encontraremos que tenemos más de una forma de resolver cualquier problema. Y la claridad de nuestro código para nosotros mismos y para otras personas siempre debe tener prioridad. Así que siempre debemos tratar que sea fácil de ver, que el código que escribimos hace lo que se espera. Para esto, una vez que nuestro programa funcione debemos tratar de pulirlo, documentarlo bien, escribir buenos comentarios, pensar si el código sería más claro con diferentes nombres de variables, preguntarse si podemos hacerlo más elegante, si podemos más bien utilizar una función, si podemos simplificar los condicionales, etcétera. [MÚSICA]