Blog ENI : Toute la veille numérique !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici

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...