Pregunta 1Dado age = 30, ¿qué ocurre cuando ejecutas "I am " + age + " years old"?
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.
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.
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.
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.
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.
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).
Patrones comunes de conversión
Para terminar, aquí tienes tres patrones de conversión que suelen hacer tropezar en la práctica.
| Objetivo | Cómo escribirlo | Resultado |
|---|---|---|
| Convertir "3.14" a entero | int(float("3.14")) | 3 (decimales truncados) |
| Contar los dígitos de un int | len(str(1234)) | 4 |
| Redondear un float a entero | round(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().
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.
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.
Verificación de conocimientos
Responde cada pregunta una a una.
Pregunta 2¿Cuál es el resultado correcto de ejecutar int("3.14")?
Pregunta 3¿Qué devuelve len(str(1234))?