Conversión de Tipos (Casting)
Transformar un dato de un tipo a otro es algo que vas a necesitar constantemente. No es un caso raro ni avanzado: ocurre desde el primer programa útil que escribas. Si recibes un número como texto (“25”) y quieres sumarle algo, Python no lo va a adivinar. Tienes que convertirlo tú.
Funciones de conversión (Casting)
Python trae funciones integradas que actúan como “máquinas transformadoras” del almacén: reciben un valor de un tipo y devuelven uno equivalente en otro formato.
1. A Entero: int()
Convierte cadenas de texto numéricas y flotantes a números enteros.
# Texto a entero
texto = "25"
numero = int(texto)
print(type(numero)) # <class 'int'>
# Flotante a entero: trunca hacia cero (no redondea)
precio = 19.99
print(int(precio)) # 19
# "Hacia cero" importa con negativos: NO baja al siguiente entero
print(int(-19.99)) # -19 (no -20)
2. A Flotante: float()
Convierte enteros y cadenas a números decimales.
cadena = "19.99"
valor = float(cadena)
print(valor) # 19.99
3. A Cadena: str()
Convierte cualquier tipo de dato a texto. Sin esto, concatenar un número con un mensaje lanza un error inmediato.
edad = 25
mensaje = "Tengo " + str(edad) + " años"
print(mensaje)
Adelanto:
+pega textos (y suma números). El catálogo completo de operadores llega en el Capítulo 6; por ahora basta con esto.
Formateo de Cadenas (f-strings)
Antes de las f-strings, construir mensajes con variables era engorroso: concatenaciones, llamadas a str(), mucho ruido visual. Desde Python 3.6 eso cambió. Las f-strings son la forma correcta de hacer esto ahora, y hay pocas razones para usar las alternativas en código nuevo.
Sintaxis
Se coloca una f antes de las comillas y las variables se encierran entre llaves {}.
nombre = "Ana"
edad = 25
altura = 1.65
# Formateo directo
mensaje = f"Hola {nombre}, tienes {edad} años."
# Formateo de números (ej. 2 decimales)
info = f"Altura: {altura:.2f} metros"
Comparación de métodos
| Método | Ejemplo | Recomendación |
|---|---|---|
| f-strings | f"Hola {nombre}" | Recomendado (legible y rápido) |
| Concatenación | "Hola " + nombre | Útil para casos muy simples |
| format() | "Hola {}".format(nombre) | Código legado (versiones antiguas) |
Errores comunes en conversión
- Convertir texto no numérico: Intentar
int("hola")generará unValueError. - Pérdida de precisión: Convertir
floataintelimina los decimales truncando hacia cero (int(-19.99)es-19, no-20), nunca redondea. - Texto decimal a entero:
int("19.99")también lanzaValueError.int()solo entiende cadenas de enteros, no de decimales. Si te llega"19.99"como texto y quieres un entero, hazlo en dos pasos:int(float("19.99"))→19.
Hablando con el Operario: input()
Hasta ahora tus programas trabajan solos. La función input() abre una ventanilla: detiene el programa, muestra un mensaje y espera a que el operario teclee algo y presione Enter. (Por eso este bloque y los que siguen con input() no traen botón de Ejecutar: el sandbox del navegador no puede esperar tu teclado, así que aquí funcionan solo como ejemplo de lectura.)
respuesta: str = input("¿Cuántas cajas llegaron hoy? ")
print(type(respuesta)) # <class 'str'> ¡Siempre!
Aquí está el detalle que causa más bugs de principiante: input() devuelve texto (str) SIEMPRE. No importa que el operario haya tecleado 50. Para Python eso es "50", una etiqueta, no una cantidad. Intenta hacer respuesta + 10 y obtendrás un TypeError. Sin esperar teclado, así se ve con el valor que input() te habría entregado:
respuesta: str = "50" # esto es lo que input() te habría devuelto
print(respuesta + 10)
Traceback (most recent call last):
File "almacen.py", line 2, in <module>
print(respuesta + 10)
~~~~~~~~~~^~~~
TypeError: can only concatenate str (not "int") to str
(“Solo se puede concatenar str (no ‘int’) con str”: Python no mezcla texto y número con +, aunque el texto sea puros dígitos.)
Por eso el casting no es un lujo: es el paso obligatorio entre la ventanilla y cualquier cálculo.
cajas = int(input("¿Cuántas cajas llegaron hoy? "))
print(cajas + 10) # Ahora sí es un número
Ejemplo práctico: Calculadora de edad
print("=== CALCULADORA DE EDAD ===")
# input() siempre devuelve texto (str)
anio_nacimiento_str = input("Ingresa tu año de nacimiento: ")
# Convertimos a entero para poder restar
anio_nacimiento = int(anio_nacimiento_str)
anio_actual = 2026
edad = anio_actual - anio_nacimiento
print(f"Tienes aproximadamente {edad} años.")