Hola. En esta lección vamos a ver cómo podemos obtener valores nuevos manipulando los que ya tenemos, usando operadores y expresiones en el lenguaje de programación. Veamos cómo hacerlo. Una vez que sabemos cómo representar valores mediante tipos de datos apropiados, tenemos que decir al computador qué hacer con esos valores. Nuestro objetivo, entonces, va a ser cómo efectuar operaciones con los datos y, para esto, necesitamos saber decirle al computador qué queremos hacer, qué operaciones queremos realizar. Por ejemplo, ¿cómo conseguir que si ingresamos el entero cinco y el entero siete, el computador responda aquí con el entero doce? Para eso, vamos a utilizar símbolos que llamamos "operadores" y, en este ejemplo, podríamos utilizar el símbolo "más", que también representa un operador. Teniendo el operador "más" y los datos enteros cinco y siete, podemos ahora expresar el cálculo, que aquí no sabíamos cuál era, y escribir la expresión "cinco más siete", que el computador puede evaluar a doce. Entonces, podemos construir lo que llamamos "expresiones" utilizando datos y operadores y, cada expresión, puede ser evaluada por el intérprete de Python para obtener un nuevo valor. Veamos, primero, cómo podemos operar sobre los tipos numéricos "int" y "float". Aquí, tenemos los operadores aritméticos habituales, que nos permiten efectuar las operaciones aritméticas comunes como suma, resta, multiplicación, división, y siempre con los resultados que esperamos en cada caso. Además de ellos, hay operaciones como la negación que se le aplica a un número para obtener su inverso aditivo. Tenemos la operación de "exponenciación", que utiliza el primer número como base y el segundo como exponente. También, tenemos la operación de "división entera" que efectúa una división pero, en este caso, solamente a la parte entera del cociente e ignora el resto. Y la operación "módulo", que entrega el resto de la división del primer número por el segundo número. Pero, también, podemos escribir operaciones o expresiones que sean bastante complejas. Por ejemplo, si escribimos esto, esta expresión que se ve bastante larga y temible, ¿cómo la evalúa Python? Si escribimos ésto, Python nos dirá que el resultado, naturalmente, es "uno", pero hay que entender bien por qué ocurre esto. Cuando tenemos más de un operador en una misma expresión, esta se evalúa siempre de acuerdo a la precedencia de los operadores, la prioridad que tienen. Y cuando tenemos operadores con la misma precedencia, estos se evalúan de acuerdo a su regla de asociatividad. Y ahora, ¿cuáles son estas reglas tanto de precedencia como asociatividad? Si hacemos un poco de memoria, estas reglas las conocemos desde nuestros cursos escolares de matemática. Si utilizamos los operadores de agrupación, o que conocemos típicamente como paréntesis, le podemos dar prioridad a ciertas expresiones que se evalúan siempre en primer lugar y siempre de adentro hacia afuera. Dentro de ellas, las operaciones se evalúan de acuerdo al orden que está indicado en la siguiente tabla. Primero, las operaciones de exponenciación que tienen asociatividad de izquierda a derecha. Aquí, sí vemos que si escribimos "dos" elevado a "tres" elevado a "dos", primero se evalúa "tres" elevado a "dos", que es "nueve", y luego, "dos" elevado a "tres", que es 512. Tenemos también las expresiones unarias que se aplican a, solamente, un entero y se aplican antes que las operaciones de división y de multiplicación. En tercer lugar, las operaciones de multiplicación y de división que se evalúan también con la asociatividad de izquierda a derecha. Y finalmente, la menor prioridad la tienen las operaciones de suma y resta, también con asociatividad de izquierda a derecha, como podemos ver en el ejemplo de aquí abajo. Otro tipo importante de operador, son los operadores de comparación, y aquí tenemos el menor, el menor igual, el mayor, el mayor igual, el distinto y el operador de igualdad. Estos operadores se aplican siempre a valores numéricos, y entregan como resultado siempre un valor de tipo "bool". Eso significa que entrega un valor que puede ser verdadero, "True", o falso, "False". Tenemos también los operadores tipo lógicos, que se aplican a uno o a dos valores de tipo "bool", y entregan otro valor de tipo "bool". Estos son la "negación", que invierte el resultado de un valor lógico, la "conjunción lógica AND" que entrega "True" solamente cuando ambos valores son verdaderos, y el operador de "disyunción lógica OR" que entrega "True" cuando, al menos, uno de los valores es verdadero. Y, con tantos operadores, ahora vamos a poder mezclar en una misma expresión operaciones aritméticas, comparaciones y operaciones lógicas. Podemos escribir expresiones como ésta. ¿Cómo sabemos cómo evaluarla? Ahora, tenemos que actualizar nuestra tabla de precedencia de la siguiente manera. La tabla se ve más grande, pero la parte superior es lo mismo que habíamos visto anteriormente. Ahora, podemos notar que los operadores de comparación tienen una menor precedencia que todos los operadores aritméticos. Y, de la misma manera, los operadores lógicos tienen un orden estricto entre sí en que, primero, se evalúa el "not", luego se evalúa el "and" y, finalmente, se evalúa el "or". Con todas estas reglas, los invito a evaluar la expresión que escribimos aquí y comprobar que, al momento de evaluarlo en Python, Python aplica las reglas en el orden indicado y obtiene que el valor es "True". Entonces, ahora que conocemos los operadores disponibles, tanto para valores numéricos como para lógicos, vamos a ver que Python también incorpora operadores para tipos "str" o tipo "string". En este caso, tenemos dos operadores, el operador de concatenación, que se aplica a dos "strings" y entrega como resultado un tercer "string" que resulta de pegar, o de concatenar, el primero con el segundo, como en este caso. El operador de "repetición", el asterisco, se aplica entre un "string" a la izquierda y un "int" a la derecha, y entrega el resultado de concatenar consigo mismo el "string" la cantidad de veces indicada por el entero, como en este caso. Entonces, en esta lección hemos visto a los operadores más comunes que tenemos para manipular datos, ya sean numéricos o "strings". Python nos provee operadores aritméticos para manipular valores numéricos, operadores para compararlos, operadores lógicos para valores de tipo "bool", y operadores para manipular valores de tipo texto o "strings". Vimos, también, las reglas del lenguaje que nos permiten evaluar expresiones que construimos utilizando cada uno de estos operadores. Muchas gracias.