Tipos numéricos y bool – int, float, complex y bool

Numeros en Python int float complex y bool

Los números en Python son uno de los tipos básicos más completos de todos los lenguajes de programación. En Python están modelados los tipos numéricos: enteros, punto flotante y hasta los números complejos, además de los booleanos. Vamos a verlos 😉

Operaciones sobre números en Python

Para los números existen unos operadores disponibles y a continuación se pueden ver ejemplos.

OperadorDescripción
+Operador de suma
*Operador de multiplicación
/Operador de división
//Operador de división entera
Operador de resta
%Operador de módulo
**Operador de elevado
>>> entero = 4
>>> entero + 9
13
>>> puntof = 9.48
>>> entero * puntof
37.92
>>> entero += 4
>>> entero
8
>>> complejo = 8 + 4j
>>> complejo + puntof
(17.48+4j)
>>> complejo + puntof / entero
(9.185+4j)
>>> 5 / 89
0.056179775280898875
>>> 5 // 89
0
>>> 3 % 1
0
>>> 3 % 2
1
>>> entero ** 10
1073741824
>>> 2 ** 4
16
>>> 2 ** 4 ** 2
65536

Números enteros – int

Los números enteros representan a los números naturales más el 0 pudiendo ser positivos o negativos y tienen las siguientes características:

  • Están en una base concreta (por defecto base 10).
  • Pueden ser negativos o positivos o cero (0).
  • Pueden realizarse operaciones entre ellos.
  • Son el tipo base, por lo que se pueden realizar operaciones con otros tipos fácilmente.
  • En Python 3 no hay límite de tamaño de estos números.

Ejemplos de números enteros

>>> -1
-1
>>> type(-1)
<class 'int'>
>>> int(483_702_2351)
4837022351
>>> int(483_702_231)
483702231
>>> 483_702_231
483702231
>>> -3945
-3945
>>> 523 - 421 * 9
-3266
>>> 573 / 251
2.2828685258964145
>>> 574 // 21
27

Métodos sobre int

Los métodos sobre variables tipo int son las siguientes:

>>> dir(1)
['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', 
'__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', 
'__format__', '__ge__', '__getattribute__', '__getnewargs__', '__gt__', '__hash__', 
'__index__', '__init__', '__init_subclass__', '__int__', '__invert__', '__le__', 
'__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', 
'__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdivmod__', '__reduce__', 
'__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', 
'__ror__', '__round__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', 
'__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', 
'__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'as_integer_ratio', 
'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']
MétodoDescripciónEjemplo
as_integer_ratioDevuelve un par de números representando el ratio del entero.# int.as_integer_ratio()
>>> (15).as_integer_ratio()
(15, 1)
>>> (-5).as_integer_ratio()
(-5, 1)
bit_lengthEl número de bits necesario para representar el número en binario.# int.bit_length()
>>> bin(-5), (-5).bit_length()
('-0b101', 3)
>>> bin(24), (24).bit_length()
('0b11000', 5)
>>> bin(45636), (45636).bit_length()
('0b1011001001000100', 16)
conjugateDevuelve el número conjugado del entero. En enteros el propio entero.# int.conjugate()
>>> (10).conjugate()
10
>>> (-4).conjugate()
-4
denominatorEl denominador del número racional.# int.denominator
>>> (10).denominator
1
from_bytesDevuelve el entero representado por un array de bytes.# int.from_bytes()
>>> int.from_bytes(b'4f2', 'little')
3302964
imagDevuelve la parte imaginaria de un número. (0 en enteros)# int.imag
>>> (10).imag
0
numeratorDevuelve el numerador del número racional. (El número en enteros).# int.numerator
>>> (4).numerator
4
realDevuelve la parte real del número. (El número en enteros).# int.real
>>> (4).real
4
to_bytesDevuelve un array de bytes representando el número entero.# int.to_bytes()
>>> (453).to_bytes(2, 'little')
b'\xc5\x01'

Casting y cambios de base sobre enteros

Gracias a que el constructor de la clase soport como segundo argumento la base del número entero se pueden hacer las siguientes operaciones:

>>> int('523')
523
>>> int('523', base=10)
523
>>> int('10101011101111001', base=2)
87929
>>> int('523', base=6)
195
>>> int('523', base=7)
262
>>> int('523', base=8)
339
>>> int('523', base=31)
4870
>>> int('ff', base=16)
255
>>> int('ack', base=32)
10644

Números punto flotante – float

Los números en punto flotante se componen de dos parte, la parte entera y la parte decimal. En Python tienen las siguientes características:

  • Pueden ser positivos, negativos ó 0.
  • El separador de las partes es el carácter punto ('.').
  • Se pueden representar como un punto y la parte decimal para decir 0.decimales.
  • Se pueden utilizar con otros tipos de números como los enteros.
  • La precisión máxima está limitada por 53 bits.

Ejemplos de números punto flotante

>>> 45.32
45.32
>>> float(234.21 / 45.32)
5.1679170344218885
>>> .453
0.453
>>> .23 * 9
2.0700000000000003
>>>
>>> float('3.421')
3.421
>>> .53 + .32 + 12.342
13.192

Métodos sobre float

>>> dir(float)
['__abs__', '__add__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', 
'__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__', 
'__ge__', '__getattribute__', '__getformat__', '__getnewargs__', '__gt__', '__hash__', 
'__init__', '__init_subclass__', '__int__', '__le__', '__lt__', '__mod__', '__mul__', 
'__ne__', '__neg__', '__new__', '__pos__', '__pow__', '__radd__', '__rdivmod__', '__reduce__', 
'__reduce_ex__', '__repr__', '__rfloordiv__', '__rmod__', '__rmul__', '__round__', '__rpow__', 
'__rsub__', '__rtruediv__', '__set_format__', '__setattr__', '__sizeof__', '__str__', 
'__sub__', '__subclasshook__', '__truediv__', '__trunc__', 'as_integer_ratio', 'conjugate', 
'fromhex', 'hex', 'imag', 'is_integer', 'real']
MétodoDescripciónEjemplo
as_integer_ratioDevuelve un par de números representando el ratio entero del float.# float.as_integer_ratio()
>>> (15.23).as_integer_ratio()
(4286863895303291, 281474976710656)
>>> (5.4).as_integer_ratio()
(3039929748475085, 562949953421312)
conjugateDevuelve el número conjugado del float. En floats el propio número.# float.conjugate()
>>>(45.2).conjugate()
45.2
>>> (5.4).conjugate()
5.4
fromhexCrea un número punto flotante desde una cadena hexadecimal.# float.fromhex()
>>> float.fromhex('4ed.f')
1261.9375
>>> float.fromhex('4ed')
1261.0
hexDevuelve una cadena representando el número float en hexadecimal.# float.hex()
>>> (56.32).hex()
'0x1.c28f5c28f5c29p+5'
>>> (4.2).hex()
'0x1.0cccccccccccdp+2'
>>> (4.0).hex()
'0x1.0000000000000p+2'
imagDevuelve la parte imaginaria de un número. (0.0 en floats)# float.imag
>>> (3.4).imag
0.0
is_integerDevuelve True si el valor en float es un entero.# float.is_integer()
>>> (4.0).is_integer()
True
>>> (4.2).is_integer()
False
realDevuelve la parte real del número. (El número en floats).# float.real
>>> (3.4).real
3.4

Precisión de los números punto flotante

Dado que los números se guardan en binario, la precisión no es óptima, por lo que si se pretenden hacer operaciones con decimales se recomienda usar el paquete decimal.

>>> 0.1 + 0.1 + 0.1 - 0.3
5.551115123125783e-17
>>> from decimal import Decimal
>>> Decimal(0.1) + Decimal(0.1) + Decimal(0.1) - Decimal(0.3)
Decimal('2.775557561565156540423631668E-17')
>>> d = Decimal(0.1) + Decimal(0.1) + Decimal(0.1) - Decimal(0.3)
>>> round(d, 2)
Decimal('0.00')

Números complejos en Python – complex

Python es de los pocos lenguajes de programación que soportan números complejos en su librería estandar con el tipo complex.

Las características de este tipo son las siguientes:

  • Tienen una parte real y una parte imaginaria.
  • El carácter utilizado para definir la parte imaginaria es 'j'.
  • Se pueden utilizar con otros tipos numéricos.

Ejemplos de números complejos en Python

>>> 4 + 3j
(4+3j)
>>> 4 + 3j - 2j +54
(58+1j)
>>> 4 + 3j - 2j + 54
(58+1j)
>>> 4 + 3j - 2j + 54 * 2
(112+1j)
>>> 4 + 3j - 2j / 54j * 2
(3.925925925925926+3j)
>>> 4 + 3j - 2j / - 54j * 2
(4.074074074074074+3j)
>>> 4 + 3j - 2j / - 54j * -2
(3.925925925925926+3j)
>>> 56j * (-3)
(-0-168j)
>>> 564.56j * (-3)
(-0-1693.6799999999998j)

Métodos sobre complex

>>> dir(4j)
['__abs__', '__add__', '__bool__', '__class__', '__delattr__', '__dir__', '__divmod__', 
'__doc__', '__eq__', '__float__', '__floordiv__', '__format__', '__ge__', '__getattribute__', 
'__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__int__', '__le__', 
'__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__pos__', '__pow__', 
'__radd__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', 
'__rmod__', '__rmul__', '__rpow__', '__rsub__', '__rtruediv__', '__setattr__', '__sizeof__', 
'__str__', '__sub__', '__subclasshook__', '__truediv__', 'conjugate', 'imag', 'real']
MétodoDescripciónEjemplo
conjugateDevuelve el número conjugado.# complex.conjugate()
>>> (4 + 8j).conjugate()
(4-8j)
>>> (8 - 2j).conjugate()
(8+2j)
imagDevuelve la parte imaginaria del número.# complex.imag
>>> (8+2j).imag
2.0
>>> (7-5j).imag
-5.0
realDevuelve la parte real del número.# complex.real
>>> (8+2j).real
8.0
>>> (7-5j).real
7.0

Booleanos en Python – bool

El modelo booleano de Python se compone de 3 componentes:

  • True: valor verdadero modelado como un entero con número 1.
  • False: valor falso modelado como un entero con número 0.
  • None: valor vacío modelado con un tipo propio llamado NoneType.

Dado que los valores de verdadero y falso se modelan en Python como enteros se ha incluido en esta sección.

Evaluación de bool

Todo los objetos en Python tienen un valor booleano, que por defecto se evalua como True salvo que sean 0 o vacío.

>>> bool(1)
True
>>> bool(0)
False
>>> True
True
>>> False
False
>>> type(None)
<class 'NoneType'>
>>> type(False)
<class 'bool'>
>>> type(1)
<class 'int'>
>>> True + True * False
1
>>> True + True + False
2
>>> bool('')
False
>>> bool([])
False
>>> bool('hola')
True

Libros recomendados para aprender Python

Estos son los libros que pueden ayudarte a aprender Python, aprender a programar, tipos de datos, algoritmia y mucho más.

Disponible en:

Compartir

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

Ver más

  • Responsable: Oscar Ramirez.
  • Finalidad:  Moderar los comentarios.
  • Legitimación:  Por consentimiento del interesado.
  • Destinatarios y encargados de tratamiento: No se ceden o comunican datos a terceros para prestar este servicio. El Titular ha contratado los servicios de alojamiento web a ionos (1&1) que actúa como encargado de tratamiento.
  • Derechos: Acceder, rectificar y suprimir los datos.
  • Información Adicional: Puede consultar la información detallada en la Política de Privacidad.

Publicar un comentario