Contenido del capítulo

En este capítulo se explica lo que son las conversiones de tipos de datos, y como puedes empezar a dominarla con Python, con muchos ejemplos prácticos.

Duración estimada de todo el contenido:
Duración del vídeo:
No contiene ejercicios. Contiene 3 vídeos.
Tabla de contenidos
Logo

    ¿Qué es la conversión de tipos?

    Conversión implícita y explícita
    Conversión implícita y explícita

    La conversión de tipos de datos, llamada casting en inglés, es el proceso de cambio de un tipo de dato a otro compatible. Esta acción la necesitaremos en múltiples ocasiones. Por ejemplo, si queremos transformar la entrada de un input(), la cual se guarda como str, pero necesitamos un int o un float, para operar con él.

    Espacio publicitario

    Funciones predefinidas para conversiones

    Muchas de las funciones predefinidas de Python sirven para realizar conversiones. A continuación tienes un listado de ellas:

    • int(): Convierte un valor a un número entero.
    • float(): Convierte un valor a un número de coma flotante.
    • str(): Convierte un valor a una cadena de caracteres.
    • bool(): Convierte un valor a un booleano.
    • complex(): Convierte un valor a un número complejo.
    • ord(): Convierte un carácter a su código Unicode.
    • chr(): Convierte un código Unicode a un carácter.
    • hex(): Convierte un número a su representación hexadecimal.
    • oct(): Convierte un número a su representación octal.
    • bin(): Convierte un número a su representación binaria.

    Conversión implícita

    La conversión implícita es la que ocurre cuando el intérprete de Python transforma el tipo de dato automáticamente. Por ejemplo, si sumamos un número entero (int) con un número con decimales (float), Python realizará la conversión implícita del entero, al tipo float, antes de realizar la suma.

    De esta forma es posible operar con ambos tipos de datos sin tener errores.

    numero_1 = 10
    numero_2 = 20.5
    
    print(numero_1 + numero_2)
    Resultado en la consola
    30.5

    Tanto los compiladores de otros lenguajes de programación, como el intérprete de Python, requieren hacer este tipo de conversiones para asegurarse de que la operación se realice correctamente y no se pierda ninguna parte decimal.

    Por ejemplo, al sumar 10 (int) y 20.5 (float), el int se convierte primero a float, resultando en 10.0, y luego se realiza la suma: 10.0 + 20.5 = 30.5.

    ¿Cómo saber el tipo de dato en Python?

    En Python podemos comprobar cualquier tipo de dato con la función predefinida type().

    Observa el siguiente ejemplo:

    numero_1 = 10
    numero_2 = 20.5
    
    print(type(numero_1 + numero_2))
    Resultado en la consola
    <class 'float'>

    En este ejemplo estoy pasándole a la función una expresión (una suma). Gracia a utilizar esta función de Python, el intérprete nos puede indicar el tipo de dato resultante de la expresión, en lugar del resultado de esta.

    Aquí tienes otro ejemplo de uso:

    numero_1 = 10
    numero_2 = 20.5
    
    print(type(numero_1))
    print(type(numero_2))
    Resultado en la consola
    <class 'int'>
    <class 'float'>

    En este otro ejemplo estoy pasando a cada type() un valor de variable. En el primero evalúa el valor 10 y nos indica que es de tipo int. En el segundo evalúa el valor 20.5 y nos indica que es un valor float.

    Muy pronto le verás la utilidad a este tipo de comprobaciones. Por el momento, utiliza la función type() cada vez que tengas dudas del valor que queda en alguna variable, en determinada línea de código. Así podrás ir aprendiendo bien como manipula Python los datos y los tipos que maneja en todo momento.

    Espacio publicitario

    Conversión explícita

    La conversión explícita es aquella que hacemos manualmente, escribiéndola en el código. Veamos un ejemplo de esto con la función predefinida int():

    numero = 100.43
                          
    numero_entero = int(numero) # Se convierte en int
    
    print(numero)
    print(numero_entero)
    Resultado en la consola
    100.43
    100

    La variable numero tiene un tipo de dato float. En la variable numero_entero hago la conversión de la variable numero, utilizando para ello la función predefinida int().

    Ten cuidado con este tipo de conversiones, ya que como ves, en ciertas acciones de conversión pierdes parte de la información. En el ejemplo anterior, acabo de perder un valor de 0.43.

    Habrá veces en las que no haga falta, o no afecte el hecho de desechar la parte decimal, pero en otras, como en aplicaciones que manejen dinero, será imprescindible hasta el último valor decimal.

    Analizar los tipos de datos

    Iniciación a las funciones predefinidas de conversión
    Iniciación a las funciones predefinidas de conversión

    Vamos a escribir un pequeño código con una entrada de datos. Este va a servir para introducir dos números en la consola, y que Python los sume.

    numero_1 = input("Introduzca el primer número: ")
    numero_2 = input("Introduzca el segundo número: ")
    
    suma = numero_1 + numero_2
    
    print(f"El resultado de la suma es: {suma}.")
    Resultado en la consola
    Introduzca el primer número: 10
    Introduzca el segundo número: 24
    El resultado de la suma es: 1024.

    ¡Vaya! Qué locura. Python acaba de decirme que 10 + 24 da como resultado 1024.

    ¿Se trata de un fallo de Python?
    En absoluto. Lo que ha ocurrido lo podemos averiguar investigando un poco con la función predefinida type(). Con ella podrás indagar en los tipos de datos que tiene cada cosa, como bien he explicado anteriormente.

    Espacio publicitario

    Lo normal sería pensar que si introduzco un número entero, se guarde como entero, pero la función predefinida input(), guarda siempre un tipo de dato str. Independientemente del valor que le pongamos. En el siguiente ejemplo, podrás apreciarlo:

    numero_1 = input("Introduzca el primer número: ")
    numero_2 = input("Introduzca el segundo número: ")
    
    suma = numero_1 + numero_2
    
    print(f"Tipo de numero_1: {type(numero_1)}")
    print(f"Tipo de numero_2: {type(numero_2)}")
    print(f"Tipo de suma: {type(suma)}")
    Resultado en la consola
    Introduzca el primer número: 10
    Introduzca el segundo número: 24
    Tipo de numero_1: <class 'str'>
    Tipo de numero_2: <class 'str'>
    Tipo de suma: <class 'str'>

    En este ejemplo estoy realizando la operación de suma de los dos valores entrados desde la consola (10 y 24).

    Después imprimo tanto los tipos de datos de los valores introducidos, como el tipo de dato que produce el resultado final, gracias a la función predefinida type().

    De este modo, en todo momento podemos apreciar en la consola los tipos de datos que se están manejando.

    Perfecto, ya sabemos cuál es el fallo. Al poner datos sobre el input(), se guardan como str.

    En conclusión a todo esto, en la variable suma se está utilizando el operador + con dos cadenas de caracteres. ¿Recuerdas que ocurría cuando hacíamos dicha acción? La respuesta es concatenación. Los dos str se concatenan formando un nuevo str en la variable suma. Así: "10" + "24" = "1024".

    Ahora que ya tienes algo de contexto para hacer conversiones de tipos de datos, es el momento de empezar a aplicarlas para solucionar problemas.

    Conversión int()

    Para realizar una conversión a tipo int, lo haremos con la función predefinida int().

    En el siguiente código, estoy transformando numero_1 y numero_2, que llevarán originalmente valores str, a tipo int:

    numero_1 = input("Introduzca el primer número: ")
    numero_2 = input("Introduzca el segundo número: ")
    
    numero_1 = int(numero_1)
    numero_2 = int(numero_2)
    
    suma = numero_1 + numero_2
    
    print(f"Tipo de numero_1: {type(numero_1)}")
    print(f"Tipo de numero_2: {type(numero_2)}")
    print(f"Tipo de suma: {type(suma)}")
    print("\n")
    print(f"El resultado de la suma es: {suma}.")
    Resultado en la consola
    Introduzca el primer número: 10
    Introduzca el segundo número: 24
    Tipo de numero_1: <class 'int'>
    Tipo de numero_2: <class 'int'>
    Tipo de suma: <class 'int'>
    El resultado de la suma es: 34.

    La conversión funciona. Después de ella podemos comprobar que los números ya no son str. Ahora son int, y podemos realizar la operación aritmética correctamente.

    Veamos un código que hace las mismas conversiones, pero expresado de forma más concisa:

    numero_1 = int(input("Introduzca el primer número: "))
    numero_2 = int(input("Introduzca el segundo número: "))
    
    suma = numero_1 + numero_2
    
    print(f"El resultado de la suma es: {suma}.")
    Resultado en la consola
    Introduzca el primer número: 100
    Introduzca el segundo número: 600
    El resultado de la suma es: 700.

    Espacio publicitario

    Orden de resolución

    Cuando utilizamos funciones dentro de otras funciones, como en las dos conversiones de este último ejemplo, el intérprete de Python resolverá primero la función interna, en este caso el input():

    numero_1 = int(input("Introduzca el primer número: "))

    Con el input() se pide el valor en la consola. Se introduce (por ejemplo 100), y se almacena como un str, quedando en ese momento de esta forma:

    numero_1 = int("100")

    Después de esto, el intérprete resuelve la última llamada a función, la de int(). El valor queda de esta forma en la variable:

    numero_1 = 100

    Observa el siguiente ejemplo:

    funcion_1(funcion_2(funcion_3(funcion_4())))

    ¿Sabrías decirme en qué orden se ejecutarían las llamadas a estas funciones? La respuesta la tienes si has prestado atención al orden de resolución del ejemplo anterior. El intérprete de Python resolverá primero la función más interna, la funcion_4(). Una vez realizada la tarea de esta hipotética función, resolverá la funcion_3(), luego la funcion_2() y finalmente la funcion_1().

    Conversión float()

    Conversión str a float
    Conversión str a float

    Volvamos a este ejemplo:

    numero_1 = int(input("Introduzca el primer número: "))
    numero_2 = int(input("Introduzca el segundo número: "))
    
    suma = numero_1 + numero_2
    
    print(f"El resultado de la suma es: {suma}.")

    En principio funciona perfecto, pero ¿qué ocurre si intento sumar un valor con decimales?

    Consola input()
    Introduzca el primer número: 14.678
    Error en la consola
    ValueError: invalid literal for int() with base 10: '14.678'
    Error de valor: literal inválido para int() con base 10: '14.678'

    Tenemos un código un tanto frágil, el cual no es capaz de sumar con decimales. Para solucionarlo solo tenemos que hacer la conversión de str a float, en lugar de utilizar int().

    numero_1 = float(input("Introduzca el primer número: "))
    numero_2 = float(input("Introduzca el segundo número: "))
    
    suma = numero_1 + numero_2
    
    print(f"Número 1: {numero_1}")
    print(f"Número 2: {numero_2}")
    print(f"El resultado de la suma es: {suma}.")
    Resultado en la consola
    Introduzca el primer número: 14.678
    Introduzca el segundo número: 10
    Número 1: 14.678
    Número 2: 10.0
    El resultado de la suma es: 24.678.

    Si el valor pasado a la función float() es un decimal, se convierte el valor str del input() a float. Por ejemplo "14.678" a 14.678.

    Si el valor pasado a la función float() es un entero, se convierte el valor str del input() a float. Por ejemplo "10" a 10.0.

    Con esto tan simple hemos conseguido mejorar esta mini calculadora de sumas.

    El utilizar una función de conversión u otra dependerá del resultado final que se desee obtener. Si no quieres decimales, haz las conversiones con int(). Y si quieres decimales, con float().

    Espacio publicitario

    Conversión bool()

    Las conversiones explícitas a tipo de dato bool las haremos con la función predefinida bool().

    La lógica booleana establece que numéricamente hablando, el valor 0 corresponde al valor booleano False, y 1 al valor True.

    interruptor = 1
    
    # Convierte el valor entero a bool
    booleano = bool(interruptor)
    
    print(booleano)
    Resultado en la consola
    True
    interruptor = 0
    
    # Convierte el valor entero a bool
    booleano = bool(interruptor)
    
    print(booleano)
    Resultado en la consola
    False

    Debes tener en cuenta las siguientes reglas de funcionamiento de bool():

    Convierte en True con:

    • Números distintos de cero
    • Cadenas de caracteres no vacías (con algún caracter)
    • Listas, tuplas, diccionarios y conjuntos no vacíos (con algún elemento)
    • Objetos de tipo bool que tienen el valor True

    Convierte en False con:

    • Valor 0
    • Cadenas de caracteres vacías
    • Listas, tuplas, diccionarios y conjuntos vacíos
    • Objetos de tipo bool que tienen el valor False
    • Valor especial None

    Hay algún que otro caso, pero creo que es suficiente para poder hacer una comparación entre ambos valores booleanos.

    Veamos un ejemplo. Si convertimos un str con un valor "Hola", nos da un resultado True:

    saludo = "Hola"
    
    # Convierte el valor a bool
    booleano = bool(saludo)
    
    print(booleano)
    Resultado en la consola
    True

    En cambio, si la cadena está vacía se convierte en False:

    saludo = ""
    
    # Convierte el valor a bool
    booleano = bool(saludo)
    
    print(booleano)
    Resultado en la consola
    False

    Puedes ir haciendo pruebas con cualquier otro valor, a ver que ocurre. En los próximos capítulos empezarás a aprender sobre la lógica booleana y le verás sentido a este sistema.

    Espacio publicitario

    Conversión str()

    Las conversiones explícitas a tipo de dato str, las haremos con la función str().

    Aquí tienes un ejemplo:

    numero = 1000
    
    # Convierte el valor int a str
    cadena = str(numero)
    
    print(type(cadena))
    Resultado en la consola
    <class 'str'>

    Aquí se obtiene el valor entero 1000 y se almacena con la conversión como str ("1000").

    El resto de funciones predefinidas son para usos más específicos, por lo que es necesario entender su propósito, y cómo funcionan antes de poder utilizarlas. De todas formas, si te manejas bien con diferentes tipos de números que no sean los decimales, no tendrás mucho problema en utilizarlas.

    Mira este ejemplo de conversión de número hexadecimal a decimal:

    decimal = 1000
    
    # Se convierte el decimal en hexadecimal
    hexadecimal = hex(decimal)
    
    print(hexadecimal)
    Resultado en la consola
    0x3e8

    Espacio publicitario




    Espacio publicitario




    Espacio publicitario