Tipos de Datos en Python
Antes de construir clases y objetos necesitas dominar la materia prima con la que trabaja todo programa: los tipos de datos. Aprende a identificarlos, convertirlos y evitar los errores más comunes al mezclarlos, con ejemplos que puedes editar y ejecutar en vivo.
Bienvenido
Todo dato que manejas en un programa —un nombre, una edad, un precio, una condición verdadera o falsa— pertenece a un tipo de dato distinto. Python necesita saber de qué tipo es cada valor para decidir qué operaciones puede hacer con él y cómo almacenarlo en memoria.
Al finalizar esta guía identificarás los tipos de datos básicos de Python (int, float, bool, str), sabrás comprobarlos con type(), convertirlos con casting y evitar los errores más frecuentes al mezclar tipos distintos.
Todos los bloques con el encabezado Python son editables: presiona ✏️ Editar para modificar el código y ▶ Ejecutar para correrlo de verdad en tu navegador (usa Pyodide, un Python real compilado a WebAssembly). La primera ejecución tarda unos segundos porque descarga el intérprete.
📖 Aprende
Los tipos básicos y cómo Python los maneja internamente.
💻 Practica
Ejemplos editables y ejecutables en cada sección.
🎯 Domina
Conversión de tipos y los errores que evitan la mayoría de los principiantes.
¿Qué es un tipo de dato?
Un tipo de dato clasifica un valor y define qué operaciones son válidas sobre él. No tiene sentido dividir un texto entre 3, pero sí dividir un número; no tiene sentido poner en mayúsculas un número, pero sí un texto.
| Tipo | Ejemplo | Uso típico |
|---|---|---|
int | 25 | Contar, indexar, edades, cantidades. |
float | 3.14 | Precios, promedios, medidas. |
str | "Hola" | Texto, nombres, mensajes. |
bool | True / False | Condiciones, banderas de estado. |
Aunque en matemáticas 5 y 5.0 son "el mismo número", para Python son tipos distintos (int y float), y esa diferencia puede cambiar el resultado de una operación.
Tipado dinámico en Python
A diferencia de lenguajes como Java o C, en Python no declaras el tipo de una variable: Python lo infiere automáticamente a partir del valor que le asignas, y una misma variable puede cambiar de tipo durante la ejecución del programa.
edad = 20
print(type(edad))
edad = "veinte"
print(type(edad))
Que Python sea de tipado dinámico no significa que los tipos no importen: Python sigue siendo fuertemente tipado y verifica los tipos en cada operación. Solo significa que no necesitas declarar el tipo por adelantado.
La función type()
La función incorporada type() te dice exactamente con qué tipo de dato estás trabajando en cualquier momento del programa.
nombre = "Roy"
edad = 30
promedio = 88.5
activo = True
print(type(nombre))
print(type(edad))
print(type(promedio))
print(type(activo))
Salida:
<class 'str'> <class 'int'> <class 'float'> <class 'bool'>
Para comprobar un tipo dentro de una condición, se prefiere isinstance(valor, int) en lugar de type(valor) == int: isinstance() también reconoce subclases, algo importante cuando trabajes con herencia en POO.
Números enteros (int)
El tipo int representa números enteros, positivos o negativos, sin parte decimal. A diferencia de otros lenguajes, en Python los enteros no tienen un límite de tamaño fijo.
edad = 20
poblacion = 12_000_000
print(edad, poblacion)
print(type(poblacion))
El guion bajo _ dentro de un número (12_000_000) es solo un separador visual para el programador; Python lo ignora al interpretar el valor.
Los enteros admiten los operadores aritméticos habituales, incluyendo la división entera // y el módulo %:
a = 17
b = 5
print(a + b)
print(a - b)
print(a * b)
print(a // b)
print(a % b)
print(a ** b)
| Operador | Significado |
|---|---|
// | División entera (descarta la parte decimal). |
% | Módulo: el resto de la división. |
** | Potencia. |
Números decimales (float)
El tipo float representa números con parte decimal. También admite notación científica usando e.
precio = 19.99
distancia = 2.5e3
print(precio, distancia)
print(type(precio))
Los float se almacenan en binario y no siempre pueden representar exactamente un decimal, igual que 1/3 no tiene una representación decimal exacta en base 10. Ejecuta el siguiente bloque:
print(0.1 + 0.2)
El resultado no es exactamente 0.3. Para comparar o mostrar decimales de forma segura, usa round():
resultado = 0.1 + 0.2
print(round(resultado, 2))
Booleanos (bool)
El tipo bool solo tiene dos valores posibles: True o False. Se usa para representar condiciones y es el resultado natural de cualquier comparación.
mayor_edad = True
tiene_deuda = False
print(mayor_edad, tiene_deuda)
print(type(mayor_edad))
print(5 > 3)
print(10 == 10)
print("a" == "b")
En Python, bool es técnicamente una subclase de int: True equivale a 1 y False a 0. Por eso True + True da 2 sin ningún error.
Cadenas de texto (str)
El tipo str representa texto. Aquí lo vemos solo como parte del panorama general de tipos; si quieres profundizar en indexado, slicing, métodos y formato, revisa la guía dedicada de Strings.
nombre = "Roy Carrasco"
print(nombre)
print(type(nombre))
Conversión de tipos (casting)
Python ofrece funciones para convertir explícitamente un valor de un tipo a otro: int(), float(), str() y bool().
edad_texto = "20"
edad_numero = int(edad_texto)
print(edad_numero, type(edad_numero))
precio = float("19.99")
print(precio, type(precio))
numero = 42
texto = str(numero)
print(texto, type(texto))
| Conversión | Ejemplo |
|---|---|
| Texto a entero | int("20") |
| Texto a decimal | float("19.99") |
| Número a texto | str(42) |
| Cualquier valor a booleano | bool(valor) |
int() no puede convertir directamente un texto con decimales, como "3.5": primero debes pasarlo por float() y luego por int(), es decir, int(float("3.5")).
La conversión a bool() sigue una regla especial: existen valores que Python considera "falsos" (falsy) aunque no sean False explícitamente.
print(bool(0), bool(1))
print(bool(""), bool("hola"))
print(bool([]), bool([1, 2]))
| Valores "falsy" (equivalen a False) |
|---|
0, 0.0, "", None, [], {}, () |
Operaciones con tipos mixtos
Cuando mezclas un int y un float en una operación aritmética, Python "asciende" automáticamente el resultado a float, sin que tengas que convertir nada manualmente.
entero = 5
decimal = 2.5
resultado = entero + decimal
print(resultado, type(resultado))
Esa conversión automática solo ocurre entre tipos numéricos. Python no convierte números a texto por ti: por eso print("Edad: " + edad) produce un TypeError, como ya viste en la guía de print(). Con +, texto y número nunca se mezclan solos.
Tipos compuestos: una vista previa
Además de los tipos simples, Python tiene tipos que agrupan varios valores a la vez: list, tuple y dict son los más comunes. Aquí solo los presentamos como tipos de dato; los estudiarás en detalle más adelante en el curso.
numeros = [10, 20, 30]
coordenada = (4, 7)
persona = {"nombre": "Roy", "edad": 30}
print(type(numeros))
print(type(coordenada))
print(type(persona))
Igual que int o str, cada uno de estos tipos compuestos tiene sus propias reglas: si permite duplicados, si se puede modificar después de creado y si mantiene un orden. Los exploraremos con calma en las próximas guías.
Errores comunes
❌ Mezclar str y número con +
"Edad: " + 20 produce TypeError. Usa comas, str() o un f-String.
❌ Convertir texto no numérico
int("veinte") produce ValueError: solo se pueden convertir textos que representen números válidos.
❌ Confundir "5" con 5
"5" == 5 es False: un texto nunca es igual a un número, aunque se "vean" iguales.
Prueba el error
Ejecuta este bloque para observar en vivo el ValueError al convertir un texto no numérico.
edad = int("veinte")
print(edad)
Edita el bloque anterior y reemplaza "veinte" por un texto que sí represente un número, como "20", para ver la diferencia.
Ejercicios Propuestos
Pon en práctica lo aprendido resolviendo los siguientes ejercicios directamente en el bloque editable.
- Declara una variable de cada tipo básico (
int,float,str,bool) y usatype()para confirmar cada una. - Convierte el texto
"150"ainty súmale50. - Provoca a propósito un
ValueErrorconvirtiendo"hola"aint, y luego corrígelo evitando el error. - Escribe una expresión que mezcle un
inty unfloat, e imprime el resultado junto con sutype(). - Usa
bool()para comprobar si0,"","algo"y5son verdaderos o falsos. - Declara una lista, una tupla y un diccionario, e imprime el tipo de cada uno con
type().
Reto Final
Escribe un programa que parta de estos dos valores, guardados como texto (simulando datos que llegan de un formulario):
precio_texto = "45.90"cantidad_texto = "3"
El programa deberá:
- Convertir cada valor al tipo numérico correcto.
- Calcular el total (precio × cantidad).
- Mostrar el total con dos decimales usando un f-String.
- Imprimir el
type()de cada variable involucrada para confirmar las conversiones.
Total a pagar: $137.70 <class 'float'> <class 'int'> <class 'float'>
Cheat Sheet
| Uso | Ejemplo |
|---|---|
| Comprobar tipo | type(x) |
| Comprobar tipo (robusto) | isinstance(x, int) |
| Texto a entero | int("5") |
| Texto a decimal | float("3.14") |
| Número a texto | str(5) |
| A booleano | bool(x) |
| Redondear decimales | round(x, 2) |
¿Sabías que...?
🔢 Enteros sin límite
A diferencia de C o Java, en Python los int no tienen un tamaño fijo: pueden crecer tanto como lo permita la memoria de tu computadora.
🐍 bool hereda de int
True y False son técnicamente una subclase de int, por eso puedes usarlos en operaciones aritméticas.
📏 El estándar IEEE 754
Los float de Python siguen el mismo estándar binario que casi todos los lenguajes modernos; por eso 0.1 + 0.2 no da exactamente 0.3 en ninguno de ellos.