Aprende leyendo en orden

Conversión entre números y cadenas

Aprende a convertir entre números y cadenas en Python con str(), int() y float(), y a evitar errores comunes.

Por qué importa la conversión de tipo

En Python no puedes simplemente sumar o comparar valores de tipos distintos tal cual.

El caso clásico es la mezcla de números (int / float) y cadenas (str). Por ejemplo, "25" a primera vista parece el número 25, pero para Python son solo dos caracteres puestos uno al lado del otro y no se pueden usar en operaciones aritméticas.

Tipos distintos no se pueden combinar
25int+"años"strTypeErrortipo distintotipo distinto

Aquí es donde entra la conversión de tipo (casting) para igualar los tipos. Una vez que dominas str() / int() / float(), puedes convertir libremente entre números y cadenas.

Primero, veamos qué pasa si no igualas los tipos: revisa el mensaje de error. Ejecuta el código tal como está.

Editor Python

Ejecutar el código para ver el resultado

Número → Cadena (str())

Cuando pasas un número a str(), obtienes una cadena que representa ese número.

Ya sea un int, un float o un bool, str() convierte casi cualquier cosa en una forma de cadena legible por humanos.

Lo que hace str()
25intstr()"25"str-20.5floatstr()"-20.5"strpasara strpasara str

Pasas del número en sí a su representación como cadena.

Piénsalo como una preparación previa antes de unir (+) valores en una frase.

age = 25
temp = -20.5

# Número -> Cadena
print(str(age))        # '25'
print(type(str(age)))  # <class 'str'>

# Una vez que es cadena, + puede unirla
print("Edad: " + str(age) + " años")         # Edad: 25 años
print("Temperatura actual: " + str(temp) + " grados") # Temperatura actual: -20.5 grados

Cuándo usar f-strings en su lugar

Dentro de un f-string (f"Edad: {age} años"), los valores se convierten automáticamente a str, así que no necesitas llamar a str() tú mismo. str() brilla cuando construyes cadenas con + o .join(), o cuando quieres fijar algo como cadena: nombres de archivos, líneas de log, claves JSON y similares.

Usando user = "Ana" y score = 95, construye un informe de una línea.

① Usando solo str() y +, imprime "La puntuación de Ana es 95".

② Escribe lo mismo con un f-string, sin llamar a str().

Editor Python

Ejecutar el código para ver el resultado

Cadena → Número (int() / float())

Para la dirección contraria, usa int() y float(). Aunque un valor parezca una cadena, mientras su contenido sea un número, puedes convertirlo y usarlo en cálculos.

Cosas como la entrada del usuario, las columnas de CSV y las respuestas de API suelen llegar como str, así que convertirlas a números es algo que harás mucho.

Elegir entre int() y float()
"100"strint()100int"3.14"strfloat()3.14floatpasara intpasara float

Usa int() cuando quieras un entero, y float() cuando quieras permitir decimales.

int("3.14") falla: no puede hacer esa conversión.

quantity = "12"
price    = "198.5"

# Cadena -> int
q = int(quantity)
print(q + 3)            # 15 (funciona como número)

# Cadena -> float
p = float(price)
print(p * q)            # 2382.0 (es float, por eso tiene .0)

print(type(q), type(p)) # <class 'int'> <class 'float'>

Las cadenas no numéricas lanzan ValueError

Pasar algo que no se puede leer como número, como int("abc") o float("hello"), lanza ValueError y detiene tu programa. Al convertir entrada del usuario directamente, los patrones habituales son comprobarla primero con isdigit() o capturarla con try / except (se ve en un capítulo posterior).

Vamos a calcular el total de un carrito de compras. Todos los valores llegan como cadenas.

Tienes unit_price_str = "198", count_str = "5" y una tasa de impuesto TAX_RATE = 0.1.

① Convierte la cantidad y el precio unitario a números con int().

② Multiplica el total (precio unitario × cantidad) por la tasa de impuesto y haz print() del precio con impuesto.

Editor Python

Ejecutar el código para ver el resultado

Patrones comunes de conversión

Para terminar, aquí tienes tres patrones de conversión que suelen hacer tropezar en la práctica.

ObjetivoCómo escribirloResultado
Convertir "3.14" a enteroint(float("3.14"))3 (decimales truncados)
Contar los dígitos de un intlen(str(1234))4
Redondear un float a enteroround(3.7) — no int(), usa round()4

int("3.14") lanza ValueError. Esto es porque int() solo acepta cadenas que parezcan enteros, así que una cadena con punto decimal hay que pasarla primero por float() y luego a int(): dos pasos.

Ten en cuenta también que int() trunca (descarta la parte decimal). Si quieres redondeo, usa round().

Las cadenas decimales se vuelven enteros vía float()
"3.14"strfloat()3.14floatint()3intpasara floatpasara int

Una cadena con punto decimal no se puede pasar directamente a int().

Conviértela primero con float(), y luego pasa el resultado a int(): una conversión en dos pasos para obtener un entero.

Quieres usar la cadena de precio price_str = "1980.6" como entero.

① Ejecuta int(price_str) tal cual y confirma el error, luego coméntalo.

② Conviértela a entero pasando por float() y haz print() del resultado.

Editor Python

Ejecutar el código para ver el resultado

En este artículo repasamos la conversión de tipo con str() / int() / float(). Una forma fácil de recordarlo: número → cadena sirve para construir la salida que se muestra, y cadena → número sirve para procesar entradas y datos.

QUIZ

Verificación de conocimientos

Responde cada pregunta una a una.

Pregunta 1Dado age = 30, ¿qué ocurre cuando ejecutas "I am " + age + " years old"?

Pregunta 2¿Cuál es el resultado correcto de ejecutar int("3.14")?

Pregunta 3¿Qué devuelve len(str(1234))?