Nombres, booléens et algorithmes appliqués
Nombres
1. Types
a. Entiers
Un nombre entier est de type int :
>>> type(1)
<class 'int'>
Voici la liste des méthodes et attributs qu’il intègre :
>>> 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']
Comme nous l’avons déjà vu, toutes les méthodes commençant et terminant par deux caractères « souligné »...
Booléens
1. Le type booléen
a. Classe bool
Un booléen est un entier :
>>> type.mro(bool)
[<class 'bool'>, <class 'int'>, <class 'object'>]
Les méthodes et attributs sont identiques :
>>> list(set(dir(bool))-set(dir(int)))
[]
>>> list(set(dir(int))-set(dir(bool)))
[]
Tout ce qui a été vu dans la section sur les entiers s’applique donc aux instances de bool, y compris les opérateurs et même, les conversions vers les bytes vues dans le chapitre sur les chaînes de caractères :
>>> 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'
L’intérêt de ces opérations est de rendre le booléen assimilable à un binaire 1 ou 0 qui est ainsi homogène à un entier.
b. Les deux objets True et False
Cette classe est très particulière, car elle ne possède que deux instances qui sont True et False et qui sont respectivement assimilables aux entiers 1 et 0 :
>>> bool(42)
True
>>> bool(0)
False
Ces deux instances sont non mutables, non modifiables, hashable et uniques :
>>> hash(True)
1
>>> hash(False)
0
>>> bool(42) is bool([34])
True
>>> bool(0) is bool([])
True
c. Différence entre l’opérateur d’égalité et d’identité
True et False sont deux instances uniques, donc elles ont le même identifiant, quelle que soit...