Tipos de datos y conversión de tipos
Última actualización: 2025-07-01 | Mejora esta página
Tiempo estimado: 20 minutos
Hoja de ruta
Preguntas
- ¿Qué tipo de datos almacenan los programas?
- ¿Cómo puedo convertir un tipo en otro?
Objetivos
- Explica las principales diferencias entre los números enteros y los de coma flotante.
- Explica las principales diferencias entre números y cadenas de caracteres.
- Utiliza funciones incorporadas para convertir entre enteros, números de coma flotante y cadenas.
Cada valor tiene un tipo.
- Cada valor en un programa tiene un tipo específico.
- Número entero (
int
): representa números enteros positivos o negativos como 3 o -512. - Número en coma flotante (
float
): representa números reales como 3.14159 o -2.5. - Cadena de caracteres (normalmente llamada “string”,
str
): texto.- Escrita entre comillas simples o dobles (siempre que coincidan).
- Las comillas no se imprimen cuando se muestra la cadena.
Utilice la función incorporada type
para encontrar el
tipo de un valor.
- Utilice la función incorporada
type
para averiguar qué tipo tiene un valor. - También funciona con variables.
- Pero recuerda: el valor tiene el tipo — la variable es sólo una etiqueta.
SALIDA
<class 'int'>
SALIDA
<class 'str'>
Los tipos controlan qué operaciones (o métodos) pueden realizarse sobre un valor dado.
- El tipo de un valor determina lo que el programa puede hacer con él.
SALIDA
2
ERROR
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-2-67f5626a1e07> in <module>()
----> 1 print('hello' - 'h')
TypeError: unsupported operand type(s) for -: 'str' and 'str'
Puede utilizar los operadores “+” y “*” en cadenas.
- “Sumar” cadenas de caracteres las concatena.
SALIDA
Ahmed Walsh
- Al multiplicar una cadena de caracteres por un número entero
N se crea una nueva cadena que consiste en esa cadena de
caracteres repetida N veces.
- Dado que la multiplicación es una suma repetida.
SALIDA
==========
Las cadenas tienen una longitud (pero los números no).
- La función incorporada
len
cuenta el número de caracteres de una cadena.
SALIDA
11
- Pero los números no tienen longitud (ni siquiera cero).
ERROR
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-3-f769e8e8097d> in <module>()
----> 1 print(len(52))
TypeError: object of type 'int' has no len()
Debe convertir números en cadenas o viceversa cuando opera con ellos.
- No puede sumar números y cadenas.
ERROR
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-4-fe4f54a023c6> in <module>()
----> 1 print(1 + '2')
TypeError: unsupported operand type(s) for +: 'int' and 'str'
- No está permitido porque es ambiguo: ¿debería
1 + '2'
ser3
o'12'
? - Algunos tipos pueden convertirse en otros utilizando el nombre del tipo como función.
SALIDA
3
12
Puede mezclar enteros y flotantes libremente en las operaciones.
- Los números enteros y los de coma flotante pueden mezclarse en
aritmética.
- Python 3 convierte automáticamente enteros a flotantes cuando es necesario.
SALIDA
half is 0.5
three squared is 9.0
Las variables sólo cambian de valor cuando se les asigna algo.
- Si hacemos que una celda de una hoja de cálculo dependa de otra, y actualizamos esta última, la primera se actualiza automáticamente.
- Esto no ocurre en los lenguajes de programación.
PYTHON
variable_one = 1
variable_two = 5 * variable_one
variable_one = 2
print('first is', variable_one, 'and second is', variable_two)
SALIDA
first is 2 and second is 5
- El ordenador lee el valor de
variable_one
al hacer la multiplicación, crea un nuevo valor y se lo asigna avariable_two
. - Después, el valor de
variable_two
se fija al nuevo valor y no depende devariable_one
por lo que su valor no cambia automáticamente cuando cambiavariable_one
.
Fracciones
¿Qué tipo de valor es 3.4? ¿Cómo puedes averiguarlo?
Conversión automática de tipos
¿Qué tipo de valor es 3,25 + 4?
Elija un tipo
¿Qué tipo de valor (entero, número de coma flotante o cadena de caracteres) utilizarías para representar cada uno de los siguientes elementos? Intenta dar más de una buena respuesta para cada problema. Por ejemplo, en # 1, ¿cuándo tendría más sentido contar los días con una variable de coma flotante que con un número entero?
- Número de días transcurridos desde el inicio del año.
- Tiempo transcurrido desde el inicio del año hasta ahora en días.
- Número de serie de un equipo de laboratorio.
- Edad de una muestra de laboratorio
- Población actual de una ciudad.
- Población media de una ciudad a lo largo del tiempo.
Las respuestas a las preguntas son:
- Número entero, ya que el número de días estaría comprendido entre 1 y 365.
- coma flotante, ya que se requieren días fraccionarios
- Cadena de caracteres si el número de serie contiene letras y números, en caso contrario entero si el número de serie consta sólo de números
- ¡Esto variará! ¿Cómo se define la edad de un espécimen? ¿días enteros desde la recogida (entero)? ¿fecha y hora (cadena)?
- Elija coma flotante para representar la población como grandes agregados (por ejemplo, millones), o enteros para representar la población en unidades de individuos.
- Número en coma flotante, ya que es probable que un promedio tenga una parte fraccionaria.
Tipos de división
En Python 3, el operador //
realiza la división de
enteros (números enteros), el operador /
realiza la
división de coma flotante, y el operador %
(o
modulo) calcula y devuelve el resto de la división de
enteros:
SALIDA
5 // 3: 1
5 / 3: 1.6666666666666667
5 % 3: 2
Si num_subjects
es el número de sujetos que participan
en un estudio, y num_per_survey
es el número que puede
participar en una sola encuesta, escriba una expresión que calcule el
número de encuestas necesarias para llegar a todos una sola vez.
Queremos el número mínimo de encuestas que llega a todos una vez, que
es el valor redondeado de num_subjects/ num_per_survey
.
Esto equivale a realizar una división por el suelo con //
y
sumarle 1. Antes de la división hay que restar 1 al número de sujetos
para el caso en que num_subjects
sea divisible por
num_per_survey
.
PYTHON
num_subjects = 600
num_per_survey = 42
num_surveys = (num_subjects - 1) // num_per_survey + 1
print(num_subjects, 'subjects,', num_per_survey, 'per survey:', num_surveys)
SALIDA
600 subjects, 42 per survey: 15
Cadenas a Números
Cuando sea razonable, float()
convertirá una cadena a un
número de coma flotante, y int()
convertirá un número de
coma flotante a un entero:
SALIDA
string to float: 3.4
float to int: 3
Sin embargo, si la conversión no tiene sentido, aparecerá un mensaje de error.
ERROR
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-5-df3b790bf0a2> in <module>
----> 1 print("string to float:", float("Hello world!"))
ValueError: could not convert string to float: 'Hello world!'
Dada esta información, ¿qué esperas que haga el siguiente programa?
¿Qué hace realmente?
¿Por qué crees que hace eso?
¿Qué esperas que haga este programa? No sería tan descabellado
esperar que el comando int
de Python 3 convirtiera la
cadena “3.4” a 3.4 y una conversión de tipo adicional a 3. Después de
todo, Python 3 realiza muchas otras magias - ¿no es eso parte de su
encanto?
SALIDA
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-2-ec6729dfccdc> in <module>
----> 1 int("3.4")
ValueError: invalid literal for int() with base 10: '3.4'
Sin embargo, Python 3 arroja un error. ¿Por qué? Para ser consistente, posiblemente. Si le pides a Python que realice dos typecasts consecutivos, debes convertirlo explícitamente en código.
SALIDA
3
Aritmética con diferentes tipos
¿Cuál de las siguientes opciones devolverá el número de coma flotante
2.0
? Nota: puede haber más de una respuesta correcta.
first + float(second)
float(second) + float(third)
first + int(third)
first + int(float(third))
int(first) + int(float(third))
2.0 * second
Respuesta: 1 y 4
Números Complejos
Python proporciona números complejos, que se escriben como
1.0+2.0j
. Si val
es un número complejo, se
puede acceder a sus partes real e imaginaria usando notación de
puntos como val.real
y val.imag
.
SALIDA
6.0
2.0
- ¿Por qué crees que Python utiliza
j
en lugar dei
para la parte imaginaria? - ¿Qué esperas que produzca
1 + 2j + 3
? - ¿Qué esperas que sea
4j
? ¿Y4 j
o4 + j
?
- Los tratamientos matemáticos estándar suelen utilizar
i
para denotar un número imaginario. Sin embargo, según los informes de los medios de comunicación, se trata de una antigua convención establecida a partir de la ingeniería eléctrica que ahora presenta un área técnicamente costosa de cambiar. Stack Overflow proporciona explicaciones y discusiones adicionales (4+2j)
-
4j
ySyntax Error: invalid syntax
. En estos últimos casos,j
se considera una variable y la sentencia depende de sij
está definida y, en caso afirmativo, de su valor asignado.
Puntos Clave
- Cada valor tiene un tipo.
- Utilice la función incorporada
type
para encontrar el tipo de un valor. - Los tipos controlan las operaciones que se pueden realizar con los valores.
- Las cadenas pueden sumarse y multiplicarse.
- Las cadenas tienen longitud (pero los números no).
- Debe convertir números en cadenas o viceversa cuando opera con ellos.
- Puede mezclar enteros y flotantes libremente en las operaciones.
- Las variables sólo cambian de valor cuando se les asigna algo.