Saltar a contenido

Tipos de datos

Hasta ahora hemos visto tres tipos de datos:

  • Números sin decimales
  • Números con decimales
  • Cadenas de texto

Cualquiera de ellos se puede asignar a una variable:

dato1 = 5
dato2 = 10.5
dato3 = "50"

Distinguir entre tipos de números

¿Por que es importante la distinción entre números enteros y números con decimales? Básicamente, por dos motivos

El primer motivo es que, cuando se asignamos cualquier dato a una variable, el ordenador intenta almacenarlos como un paquete de ceros y unos. La forma de representar en formato binario un número con decimales, con una parte entera y una fraccionaria, difiere a como representaríamos un número entero. Las dos siguientes sentencias son aparentemente iguales:

dato1 = 5
dato2 = 5.0

... pero su almacenamiento en formato de ceros y unos es diferente.

El segundo motivo es que el comportamiento del dato depende de su tipo. De hecho, en el sistema de numeración binario no existen las fracciones, por lo que la representación interna que hacen los ordenadores, no es del todo exacta. Por ejemplo, si escribimos en la ventana shell:

>>> (1+1+1)/3
    1.0

Pero si lo hacemos con decimales:

>>> (0.1+0.1+0.1)/3
    0.10000000000000002

Estas pequeñas inexactitudes son propias de los cálculos con decimales en una computadora, y se deben a las conversiones internas del sistema decimal al binario y a la inversa.

Todo lo explicado puede resultar sorprendente, pero en realidad, el sistema decimal al que estamos acostumbrados también tiene sus imprecisiones. Consideremos la siguiente expresión:

10/3

¿Cual es el resultado? ¿3,33 o 3,3333333333 ... ?

Averiguar el tipo de dato

Si pasamos cualquier objeto a la función type() obtendremos un nuevo objeto con información del dato:

Tipos.py
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
dato1 = 5
dato2 = 10.5
dato3 = "50"

info1 = type(dato1)
info2 = type(dato2)
info3 = type(dato3)

info4 = type(info1)

print(f"{dato1} es un {info1}")
print(f"{dato2} es un {info2}")
print(f"{dato3} es un {info3}")
print(f"{info1} es un {info4}")

lo que muestra:

5 es un <class 'int'>
10.5 es un <class 'float'>
50 es un <class 'str'>
<class 'int'> es un <class 'type'>

Es decir:

  • Los números enteros, sin decimales son objetos del tipo int, abreviatura de integer

  • Los números con decimales son objetos del tipo float

  • Los textos son objetos del tipo str, abreviatura de string

  • Los paquetes de información devueltos por la función type() son objetos del tipo type

  • Los paquetes de información devueltos por la función type(), al ser convertidos a texto, generan un texto:

    <class 'tipo'>
    
  • A los tipos también se les llama clases.

Números flotantes

¿Que quiere decir float? En el mundo de los ordenadores, a los números con decimales se les llama flotantes, porque si movemos el punto decimal de izquierda a derecha, o a la inversa, es como multiplicar o dividir por 10:

1.2345
12.345
123.45
1234.5

Programación orientada a objetos

Python es un lenguaje pensado para trabajar con objetos. En Python, todo es un objeto, tanto los datos numéricos, como las cadenas de texto, o las funciones:

>>> type(print)
    <class 'builtin_function'>

Todo objeto pertenece a una clase, y eso determina:

  • su comportamiento como objeto
  • su representación interna en forma de ceros y unos