Módulo 1 · Lección 7 de 59
Tipos de datos y conversiones
Los cinco tipos básicos, cómo saber cuál tienes delante, cómo pasar de uno a otro y qué conversiones fallan.
Los tipos básicos#
Todo dato en Python tiene un tipo, que determina qué se puede hacer con él. Los que necesitas ahora son cinco:
| Tipo | Nombre | Qué guarda | Ejemplo |
|---|---|---|---|
| Entero | int | Números sin decimales | 42, -7, 0 |
| Decimal | float | Números con decimales | 3.14, -0.5 |
| Cadena | str | Texto | "hola", "42" |
| Booleano | bool | Verdadero o falso | True, False |
| Nulo | NoneType | La ausencia de valor | None |
print(type(42))
print(type(3.14))
print(type("hola"))
print(type(True))
print(type(None))<class 'int'>
<class 'float'>
<class 'str'>
<class 'bool'>
<class 'NoneType'>Comprobar el tipo#
type() te lo dice, pero para tomar decisiones en el código se usa isinstance(), que devuelve True o False:
dato = 42
print(isinstance(dato, int))
print(isinstance(dato, str))True
FalseLas funciones de conversión#
Cada tipo tiene una función con su mismo nombre que convierte a él. Se llaman constructores:
print(int("42")) # texto a entero
print(float("3.14")) # texto a decimal
print(str(42)) # número a texto
print(bool(1)) # número a booleano42
3.14
42
TrueDe texto a número#
Es la conversión que más harás, porque input() siempre entrega texto:
print(int("100") + 5)
print(float("19.99") * 2)105
39.98Pero solo funciona si el texto contiene realmente un número:
int("hola") # ValueError
int("12.5") # ValueError: int() no acepta decimales en texto
int("") # ValueError
int(" 42 ") # esto sí funciona: ignora los espacios de los extremosDe decimal a entero#
int() no redondea, trunca: simplemente tira la parte decimal.
print(int(9.99)) # 9, no 10
print(int(-9.99)) # -9, corta hacia el cero
print(round(9.99)) # 10, esto sí redondea9
-9
10Recuérdalo: si quieres redondear, round(). Si quieres quedarte con la parte entera, int().
De número a texto#
Siempre funciona, nunca falla:
edad = 34
print("Tengo " + str(edad) + " años")En la práctica casi nunca escribirás str() a mano, porque las f-strings convierten solas:
print(f"Tengo {edad} años")Conversiones a booleano#
bool() sigue una regla sencilla: casi todo es verdadero, salvo el vacío y el cero.
print(bool(0), bool(1), bool(-5))
print(bool(""), bool("hola"), bool("0"))
print(bool(None))False True True
False True True
FalseLos valores que dan False se llaman falsy y son pocos: 0, 0.0, "", None, y las colecciones vacías que veremos más adelante. Todo lo demás es True.
Conversiones implícitas#
En algunos casos Python convierte por su cuenta, sin que se lo pidas:
resultado = 3 + 0.5 # int + float da float
print(resultado, type(resultado))
print(True + True) # los booleanos valen 1 y 03.5 <class 'float'>
2Lo que nunca hace automáticamente es convertir entre texto y número. Esa frontera siempre la cruzas tú a mano, y es una decisión de diseño deliberada: "5" + 5 es ambiguo, podría ser 10 o "55", así que Python prefiere dar error a adivinar.
Un validador sencillo#
Con lo que sabes puedes escribir esto, que anticipa la lección de condiciones:
entrada = input("Escribe un número entero: ").strip()
if entrada.isdigit():
numero = int(entrada)
print(f"Su doble es {numero * 2}")
else:
print("Eso no era un número entero.")Escribe un número entero: 21
Su doble es 42Tabla de conversiones#
| Desde | Hasta | Cómo | Cuidado |
|---|---|---|---|
str | int | int("42") | ValueError si no es un entero |
str | float | float("3.14") | ValueError si no es un número |
float | int | int(9.99) | Trunca, no redondea |
int | float | float(3) | Nunca falla |
| Cualquiera | str | str(x) | Nunca falla |
| Cualquiera | bool | bool(x) | Vacío y cero dan False |