Números, booleanos y algoritmos aplicados
Números
1. Tipos
a. Enteros
Un número entero es de tipo int:
>>> type(1)
<class 'int'>
He aquí la lista de métodos y atributos que integra:
>>> dir(int)
['__abs__', '__add__', '__and__', '__bool__', '__ceil__',
'__class__', '__delattr__', '__divmod__', '__doc__', '__eq__',
'__float__', '__floor__', '__floordiv__', '__format__', '__ge__',
'__getattribute__', '__getnewargs__', '__gt__', '__hash__',
'__index__', '__init__', '__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', 'imag', 'numerator', 'real']
Como ya hemos visto, todos los métodos que empiezan y terminan con dos caracteres guion bajo son métodos especiales, utilizados para el funcionamiento interno de Python, mientras que los otros son los que vamos a poder usar.
Estos métodos se aplican a los objetos en el marco de lo que está permitido por la gramática de Python. De este modo, el punto se considera como una coma, en el sentido matemático, y no como el acceso al objeto.
Para utilizar dicho acceso se utilizan los paréntesis:
>>> 1+2
3
>>> 1.__add__(2)
File...
Booleanos
1. El tipo booleano
a. Clase bool
Un booleano es un valor entero:
>>> type.mro(bool)
[<class 'bool'>, <class 'int'>, <class 'object'>]
Los métodos y atributos son idénticos:
>>> list(set(dir(bool))-set(dir(int)))
[]
>>> list(set(dir(int))-set(dir(bool)))
[]
Todo lo que hemos visto en la sección relativa a los enteros puede aplicarse, por tanto, a las instancias de bool, incluidos los operadores e incluso las conversiones a bytes que se han visto en la sección relativa a las cadenas de caracteres:
>>> bool(42)*1
1
>>> bool(0)*1
0
>>> True.to_bytes(2, 'little')
b'\x01\x00'
>>> True.to_bytes(2, 'big')
b'\x00\x01'
>>> False.to_bytes(2, 'little')
b'\x00\x00'
>>> False.to_bytes(2, 'big')
b'\x00\x00'
El interés de estas operaciones es hacer que el booleano se parezca a un valor binario 1 o 0, que se asemeja a un valor entero.
b. Los dos objetos True y False
Esta clase es muy particular, puesto que no posee más que dos instancias, que son True y False, y que se asemejan, respectivamente, a los valores enteros 1 y 0:
>>> bool(42)
True
>>> bool(0)
False
Estas dos instancias son no mutables, no modificables...