[MÚSICA] Hola y bienvenidos. En esta lección vamos a ver algunos cuidados que debemos tener al operar con tipos de datos que son distintos entre sí y vamos a ver cómo podemos solucionar algunos de estos problemas. Hasta ahora lo que sabemos es cómo calcular expresiones entre enteros, expresiones entre floats, entre valores lógicos y entre strings. Y también sabemos por qué se están obteniendo cada uno de estos valores. Más aún, también sabemos que podemos utilizar type para saber a qué tipo de datos pertenece el resultado de cada una de estas expresiones. En cada caso, type primero calcula el valor de la expresión entre paréntesis y luego nos indica el tipo de dato al que pertenece ese valor. Pero ahora, ¿qué pasa si intentamos operar con palabras que pertenecen a tipos de datos distintos? En general con los tipos numéricos al parecer no hay problemas. Aquí si multiplicamos un entero y un float, obtenemos un float. Si dividimos un entero por un float, también obtenemos un float. Pero tal vez queremos escribir un string que incluya el resultado de un cálculo. De acuerdo a las reglas de precedencia esta expresión de aquí debería calcular 3 más 12, que es 15, y luego escribir el texto son las 15. Pero en lugar de eso, obtenemos un error que dice type error, no puedo convertir un entero a un string implícitamente. ¿Qué está pasando aquí? Eso es lo que vamos a intentar entender ahora. Revisemos los casos numéricos. Cuando operamos entre int y float, Python convierte internamente el int a un float. Este cambio es fácil porque todos los enteros pueden ser representados por un float. Por lo tanto, lo que se está ejecutando en el fondo es 3.0 multiplicado por 5.37, que es una operación entre floats. Lo mismo pasa con 8 dividido 1.5, que también internamente se convierte a una operación entre dos floats. Pero en este último caso estamos efectuando una operación entre un string y un entero. Y cuando el primer operando es un string, Python intenta hacer una concatenación y no una suma. Pero el segundo operando no es un string, es un entero, y de ahí que Python no sabe bien qué hacer. Pues no conoce una manera automática de convertir un entero a un string. Pero la buena noticia es que tenemos una solución. Podemos decirle explícitamente a Python, mira, quiero que utilices este valor que está aquí como un string. Y para eso escribimos str y entre paréntesis el valor que queremos utilizar como string, y Python nos devuelve otra versión del mismo valor pero you no es un entero, sino que es un string. Si no me creen que es un string, podemos recurrir a type y Python nos firma que sí, el resultado de str, entre paréntesis 15, es un string. Pero ahora podemos entonces tomar la expresión que nos causaba problemas y en lugar de escribir 3 más 12, agregamos str a la expresión. De esta manera, escribimos str 3 más 12. Por lo tanto, ahora lo que Python ve es una concatenación entre strings y nos da el resultado esperado. De esta manera sabemos cómo convertir valores enteros a un string. Pero no solo podemos convertir strings. Para cada tipo de datos podemos anteponer int a una expresión y con eso le estamos diciendo a Python, mira, quiero que este valor que está acá lo utilices como si fuera un int. De esta manera, el valor 3.5546 se convierte a 3. Pero también, y esto sí es bastante útil, podemos extraer un valor entero de un string. Si agregamos int a un string que tenga solamente el carácter 3, Python nos entrega el valor entero 3 que lo podemos usar para operar con cualquier otro entero. Pero para que esto funcione el string debe tener solamente los caracteres que representan al entero. Si agregamos texto que no corresponde a un entero, Python nos dirá, mira, en verdad no sé cómo sacar un entero a partir de este string. Lo mismo podemos hacer para obtener valores de tipo float. Si lo aplicamos a un entero, bueno, obtenemos la versión float de este entero. Si lo aplicamos a un string que contenga el texto que representa a un float, el texto 3.5, podemos extraer su valor numérico y operar con ese float. Pero al igual que con los ints intentamos hacerlo con un string que tenga un poco más que la representación del número, en este caso si le agregamos una s al float, obtendremos un error indicando que Python no sabe cómo hacer la conversión a float porque le pasamos algo que tenía algo más que solamente el número. También podemos hacer conversiones a bool. En este caso la regla aunque parezca un tanto extraña, es bastante simple. Si le entregamos un número 0 o un string vacío, lo convierte a False, como en los dos primeros casos. Bool de 0 es False, bool de un string vacío es False. Pero cualquier otro valor que escribamos lo va a convertir siempre a True, aunque sea el número 0, aunque sea el float 15.5, o un string que diga True, o un string que diga False, o un string que diga 0, independientemente de lo que haya, si hay algo es True. Finalmente, lo que nos motivó a hacer todas estas conversiones es cómo pasar de un tipo numérico a un tipo string. Podemos convertir cualquier valor numérico a un string escribiendo algo dentro de str. Podemos hacerlo también con números o con expresiones que calculan un valor numérico, como en este segundo ejemplo. Y también podemos hacer lo mismo con valores lógicos, como en esta expresión que calcula un valor lógico y lo imprime como un string que dice simplemente True. Entonces, en esta lección hemos visto que para poder operar con los valores necesitamos que estos pertenezcan al mismo tipo de datos. Y si no lo son, podemos hacer una conversión de tipos. Y cuando Python no sabe cómo hacer esta conversión automáticamente, podemos ayudarlo y decirle que queremos obtener un valor del tipo que queramos agregando int, float, bool o str. Muchas gracias, y nos vemos en una siguiente lección. [AUDIO EN BLANCO]