Blog ENI : Toute la veille numérique !
En raison d'une opération de maintenance, le site Editions ENI sera inaccessible le mardi 10 décembre, en début de journée. Nous vous invitons à anticiper vos achats. Nous nous excusons pour la gêne occasionnée
En raison d'une opération de maintenance, le site Editions ENI sera inaccessible le mardi 10 décembre, en début de journée. Nous vous invitons à anticiper vos achats. Nous nous excusons pour la gêne occasionnée

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