PyQuiz 16 – Conversión de tipos en Python
El reto
a = int('5')
b = float('3.2')
resultado = a + b
print(type(resultado).__name__)
¿Cuál es el resultado?
- a) 'int'
- b) 'float'
- c) 'str'
Piensa tu respuesta antes de seguir leyendo…
Concepto: Conversión de tipos
Python aplica promoción de tipos (type promotion) automáticamente cuando se operan números de distintos tipos. La regla es que el tipo menos preciso se convierte al más preciso para no perder información. En la jerarquía: int → float → complex.
Cuando sumas un int y un float, Python convierte el int a float internamente antes de hacer la suma, y el resultado es siempre float. Esto es un comportamiento implícito, sin que el programador lo pida.
Las funciones int() y float() convierten cadenas a números, pero no cambian el tipo del resultado de una operación entre ambos. La función type(x).__name__ devuelve el nombre del tipo como cadena, lo que resulta muy útil para depuración.
Paso a paso
a = int('5')— la cadena'5'se convierte al entero5. Tipo:int.b = float('3.2')— la cadena'3.2'se convierte al número en coma flotante3.2. Tipo:float.resultado = a + b— Python sumaint+float. El5se promueve a5.0implícitamente. El resultado es8.2, de tipofloat.print(type(resultado).__name__)—type(8.2)devuelve<class 'float'>. El atributo.__name__extrae solo la cadena'float', que es lo que se imprime.
Solución
Respuesta correcta: B) 'float'
int + float = float. Python promueve el int a float automáticamente, así que type(resultado) es float.
Sabías que…
La promoción de tipos también ocurre con complex. Además, puedes usar isinstance() para comprobar tipos de forma más robusta que type(), porque respeta la herencia.
# Promoción a complex
resultado = 3 + 2j + 1.5 # float + complex -> complex
print(type(resultado).__name__) # 'complex'
# isinstance vs type
x = True # bool es subclase de int en Python
print(type(x) == int) # False
print(isinstance(x, int)) # True <- respeta la herencia
# División siempre devuelve float
print(type(10 / 2).__name__) # 'float', aunque el resultado sea 5.0
print(type(10 // 2).__name__) # 'int', la división entera sí devuelve int
Prueba tú mismo
¿Qué tipo devuelve type(10 / 5).__name__? ¿Y type(10 // 5).__name__? Prueba a predecirlo antes de ejecutarlo.
Más PyQuizzes en elpythonista.com/pyquizzes
Tutorial relacionado: Tipos numéricos y booleanos
