Saltar al contenido
Editor

Conversión de tipos en Python: cómo pasar de un tipo a otro

Principiante20 min5 ejercicios85 XP

Esta lección es una traducción del original en inglés.Read in EnglishAvisar de un error de traducción

0/5 ejercicios

Imagina que le preguntas a alguien su edad y te la escribe en una nota adhesiva. Ahora tienes el texto "25", pero no puedes hacer cuentas con una nota adhesiva. Primero tienes que leer el texto y convertirlo en tu cabeza en un número de verdad.

Python funciona igual. Muchas veces los datos llegan con un tipo, pero los necesitas en otro. Un usuario escribe "42" en un formulario: eso es una cadena de texto, no un número. Antes de poder sumarlo, restarlo o compararlo, tienes que convertirlo.

Este tutorial te enseña a convertir entre los tipos de datos de Python con seguridad y confianza. Aprenderás qué conversiones ocurren automáticamente, cuáles tienes que hacer tú y cómo evitar los errores que hacen tropezar a los principiantes.

¿Qué es la conversión de tipos en Python?

La conversión de tipos consiste en cambiar un valor de un tipo de dato a otro. Por ejemplo, convertir la cadena "42" en el entero 42, o convertir el entero 10 en el número decimal (float) 10.0.

Python tiene dos clases de conversión de tipos. La conversión implícita ocurre automáticamente: Python la hace por ti sin que lo veas. La conversión explícita es cuando usas una función como int() o str() para convertir un valor tú mismo.

Piensa en la conversión implícita como el autocorrector de tu teléfono cuando cambia una palabra. La conversión explícita es como corregir la palabra tú mismo, a mano. Las dos hacen el trabajo, pero a mano tienes más control.

Conversión implícita frente a explícita
# Implicit conversion - Python does it automatically
result = 5 + 2.0
print(result) # 7.0
print(type(result)) # <class 'float'>
# Explicit conversion - you do it with a function
age_text = "25"
age = int(age_text)
print(age + 5) # 30
Salida
7.0
<class 'float'>
30

Cómo funciona la conversión de tipos implícita en Python

Cuando mezclas un entero y un float en una operación matemática, Python convierte automáticamente el entero en float. Esto se llama conversión implícita (o coerción de tipos). Python siempre convierte al tipo más "amplio" para que no se pierdan datos.

Es como pasar agua de un vaso pequeño a una jarra grande. El agua (tus datos) sigue siendo la misma; solo que ahora está en un recipiente más grande. Pasar de int a float es seguro porque un float puede guardar cualquier valor entero.

Ejemplos de conversión implícita
# int + float → float (automatic)
print(5 + 2.0) # 7.0 (not 7)
print(10 * 1.5) # 15.0
print(8 - 3.0) # 5.0
# bool + int → int (True = 1, False = 0)
print(True + 5) # 6
print(False + 10) # 10
# bool + float → float
print(True + 2.5) # 3.5
Salida
7.0
15.0
5.0
6
10
3.5
Python no adivina con las cadenas
# This works - both are numbers
print(5 + 2.0) # 7.0
# This CRASHES - string + int is not allowed
try:
print("5" + 3)
except TypeError as e:
print(f"Error: {e}")
Salida
7.0
Error: can only concatenate str (not "int") to str

Cómo convertir a entero con int()

La función int() convierte un valor en un entero. Puedes convertir floats, cadenas y booleanos. Cada tipo se comporta de forma un poco distinta.

Convertir floats en enteros

Cuando conviertes un float en un entero, Python trunca: corta todo lo que hay después del punto decimal. No redondea. Piensa en cortar una cuerda: lo que sobra después de la marca, se pierde.

De float a int: se trunca, no se redondea
# int() truncates - it does NOT round
print(int(3.9)) # 3 - not 4!
print(int(3.1)) # 3
print(int(-2.7)) # -2 - truncates toward zero
print(int(99.999)) # 99
# If you want rounding, use round() instead
print(round(3.9)) # 4
print(round(3.1)) # 3
Salida
3
3
-2
99
4
3

Convertir cadenas en enteros

Solo puedes convertir una cadena en un entero si contiene un número entero válido. Los espacios alrededor del número no molestan, pero un punto decimal o cualquier letra provocarán un error.

De cadena y bool a int
# Valid string-to-int conversions
print(int("42")) # 42
print(int("-7")) # -7
print(int(" 100 ")) # 100 - spaces are stripped
# Booleans to int
print(int(True)) # 1
print(int(False)) # 0
Salida
42
-7
100
1
0

Cómo convertir a float con float()

La función float() convierte un valor en un número decimal (float). Acepta enteros, cadenas y booleanos.

Convertir un entero en float siempre es seguro. No se pierde nada: el número solo gana un .0 al final. Es como agregar decimales a un precio: $5 pasa a ser $5.00.

Convertir a float
# int to float
print(float(42)) # 42.0
print(float(-7)) # -7.0
print(float(0)) # 0.0
# string to float
print(float("3.14")) # 3.14
print(float("7")) # 7.0
print(float("-2.5")) # -2.5
# bool to float
print(float(True)) # 1.0
print(float(False)) # 0.0
Salida
42.0
-7.0
0.0
3.14
7.0
-2.5
1.0
0.0

Cómo convertir a cadena con str()

La función str() convierte cualquier valor en su representación como cadena. Es la función de conversión más tolerante: funciona con casi todo.

Usarás str() sobre todo al construir mensajes que mezclan texto y números. Python no te deja pegar una cadena y un número con +, así que primero conviertes el número en cadena.

Convertir a cadena
# Numbers to string
print(str(42)) # "42"
print(str(3.14)) # "3.14"
print(str(-7)) # "-7"
# Booleans to string
print(str(True)) # "True"
print(str(False)) # "False"
# None to string
print(str(None)) # "None"
# Now you can concatenate
age = 25
print("I am " + str(age) + " years old") # I am 25 years old
Salida
42
3.14
-7
True
False
None
I am 25 years old
Con str() y concatenación
name = "Alice"
age = 25
print("Name: " + name + ", Age: " + str(age))
Con f-strings (más limpio)
name = "Alice"
age = 25
print(f"Name: {name}, Age: {age}")

Cómo convertir a booleano con bool()

La función bool() convierte un valor en True o False. La regla es sencilla: los valores vacíos y el cero son `False`; todo lo demás es `True`.

Piensa en ello como preguntar "¿hay algo aquí?". Una caja vacía es False. Una caja con algo dentro, aunque sea un papel arrugado, es True.

Qué se convierte en True y qué en False
# Falsy values - these all become False
print(bool(0)) # False
print(bool(0.0)) # False
print(bool("")) # False - empty string
print(bool(None)) # False
print("---")
# Truthy values - these all become True
print(bool(1)) # True
print(bool(-5)) # True - any non-zero number
print(bool(3.14)) # True
print(bool("hello")) # True - any non-empty string
print(bool(" ")) # True - a space is still a character!
Salida
False
False
False
False
---
True
True
True
True
True
Conversiones engañosas con bool()
# Tricky cases - don't get fooled!
print(bool("0")) # True - non-empty string
print(bool("False")) # True - non-empty string
print(bool("None")) # True - non-empty string
print(bool(" ")) # True - space is a character
# Only the ACTUAL empty string is falsy
print(bool("")) # False
Salida
True
True
True
True
False

Errores comunes de conversión de tipos en Python

No todas las conversiones son posibles. Cuando Python no puede convertir un valor, lanza un ValueError. Es el error más común con el que se topan los principiantes al convertir tipos.

Es como intentar traducir una palabra que no existe en el otro idioma. Python mira el valor, intenta convertirlo y te dice: "No tengo ni idea de cómo convertir esto en un número".

Ejemplos comunes de ValueError
# These conversions CRASH with ValueError
# Can't convert words to numbers
try:
print(int("hello"))
except ValueError as e:
print(f"Error 1: {e}")
# int() can't handle decimal strings
try:
print(int("3.14"))
except ValueError as e:
print(f"Error 2: {e}")
# float() can't handle words either
try:
print(float("abc"))
except ValueError as e:
print(f"Error 3: {e}")
Salida
Error 1: invalid literal for int() with base 10: 'hello'
Error 2: invalid literal for int() with base 10: '3.14'
Error 3: could not convert string to float: 'abc'

Aquí tienes una referencia rápida de lo que funciona y lo que no:

ConversiónEjemploResultado
int("42")Cadena de dígitos42
int("3.14")Cadena con decimalesValueError
int("hello")Cadena no numéricaValueError
float("3.14")Cadena con decimales3.14
float("abc")Cadena no numéricaValueError
int(float("3.14"))Conversión en dos pasos3

Cómo convertir tipos de forma segura en Python

En los programas reales, a menudo recibes datos de usuarios o de archivos. No siempre puedes confiar en que esos datos sean un número válido. Si llamas a int() con una entrada incorrecta sin más, tu programa falla.

Python te da dos formas de manejar esto con seguridad. Puedes comprobar antes de convertir con métodos como .isdigit(), o puedes intentarlo y capturar el error con try/except.

Comprobar primero con .isdigit()

El método .isdigit() devuelve True si todos los caracteres de una cadena son dígitos. Es una forma rápida de comprobar si una cadena se puede convertir en entero sin riesgo.

Conversión segura con .isdigit()
# .isdigit() checks if a string contains only digits
print("42".isdigit()) # True
print("3.14".isdigit()) # False - has a dot
print("-7".isdigit()) # False - has a minus sign
print("hello".isdigit()) # False
print("".isdigit()) # False - empty string
# Safe conversion pattern
user_input = "42"
if user_input.isdigit():
number = int(user_input)
print(f"Converted: {number}")
else:
print(f"Cannot convert: {user_input}")
Salida
True
False
False
False
False
Converted: 42

Usar try/except para convertir con seguridad

El patrón try/except es la forma más flexible de manejar conversiones. Intentas la conversión y, si falla, capturas el error y haces otra cosa. Aprenderás try/except a fondo más adelante; por ahora, este es el patrón básico.

Conversión segura con try/except
# try/except - the safest approach
def safe_int(value):
try:
return int(value)
except ValueError:
return None
# Works with valid input
print(safe_int("42")) # 42
print(safe_int("100")) # 100
# Returns None for bad input instead of crashing
print(safe_int("hello")) # None
print(safe_int("3.14")) # None
print(safe_int("")) # None
Salida
42
100
None
None
None

Ejercicios de práctica

Es hora de poner a prueba lo que sabes sobre conversión de tipos. Estos ejercicios empiezan fáciles y van subiendo de nivel. Intenta resolver cada uno antes de mirar las pistas.

Ejercicio 1: de cadena a int, y multiplicar
Escribe el código

Tienes una variable de cadena text que contiene "42". Conviértela en un entero y multiplícala por 2. Imprime el resultado.

Salida esperada:

84
text = "42"
# Convert text to an integer and multiply by 2
# Print the result
Ejercicio 2: de float a int, ¿qué se pierde?
Escribe el código

Tienes un float price = 9.99. Conviértelo en un entero e imprime el valor original y el convertido para mostrar qué se pierde.

Salida esperada:

Original: 9.99
Converted: 9
Lost: 0.99

Pista: calcula lo que se perdió con una resta. Usa round() con la cantidad perdida para evitar las rarezas de los números decimales.

price = 9.99
# Convert to int
# Calculate what was lost
# Print all three values
Ejercicio 3: predice la salida de estas conversiones
Predice la salida

Sin ejecutar el código, predice qué imprimirá cada línea. Escribe tus predicciones como comentarios y luego ejecútalo para comprobarlo.

Piensa bien en el truncamiento, la conversión a cadena y en qué valores cuentan como verdaderos o falsos.

print(int(3.9)) # Your prediction:
print(float("7")) # Your prediction:
print(str(True)) # Your prediction:
print(bool(0)) # Your prediction:
Ejercicio 4: corrige el error al unir una cadena y un int
Corrige el error

Este código intenta construir un mensaje, pero falla con un TypeError. Corrígelo para que imprima:

You have 3 new messages

Puedes corregirlo como prefieras (str(), f-strings, etc.).

count = 3
message = "You have " + count + " new messages"
print(message)
Ejercicio 5: conversor seguro de números
Escribe el código

Escribe código que compruebe tres cadenas con .isdigit() y las convierta en enteros solo si es seguro. Para cada cadena, imprime el número convertido o "Not a number".

Datos:

values = ["42", "hello", "100"]

Salida esperada:

42
Not a number
100
values = ["42", "hello", "100"]
# Loop through values
# If the value is a digit, convert and print the integer
# Otherwise print "Not a number"

Resumen: conversión de tipos en Python

Esto es todo lo que aprendiste sobre la conversión de tipos:

FunciónQué haceEjemplo
int()Convierte a entero (trunca los floats)int("42") → 42
float()Convierte a floatfloat("3.14") → 3.14
str()Convierte a cadenastr(42) → "42"
bool()Convierte a booleanobool(0) → False

Reglas clave que debes recordar:

  • La conversión implícita solo ocurre entre tipos numéricos (bool → int → float)
  • `int()` trunca, no redondea. Usa round() para redondear
  • `int("3.14")` falla. Pasa primero por float(): int(float("3.14"))
  • Los valores vacíos y el cero cuentan como falsos (falsy); todo lo demás, como verdadero (truthy)
  • Usa `.isdigit()` o `try/except` para convertir con seguridad
  • ¿Qué sigue?

    Ahora que sabes convertir entre tipos de datos, tienes una habilidad esencial para procesar lo que escribe el usuario y crear programas reales. En el próximo tutorial aprenderás a escribir código Python limpio y legible, de ese que otros programadores (y tu yo del futuro) te agradecerán.

    Tutoriales relacionados

    ¿Te sirvió este tutorial?

    Sugerir una mejora