Les valeurs numériques en Python

Python peut manipuler deux types de valeurs numériques :

  • les nombres entiers
  • les nombres à virgule flottante

Les nombres entiers

Python peut manipuler des nombres entiers exprimés dans 3 systèmes de numération :

  • en décimal
  • en hexadécimal
  • en binaire naturel

Un nombre sans préfixe est considéré en base 10 (décimal) pour Python. Le système de numération par défaut de Python est le décimal.

Exemple :

>>> 12+9
21

Dans l'exemple ci-dessus Python considère que les nombres 12 et 9 saisie dans la console sont en décimal (car sans préfixe) et donne le résultat du calcul en décimal (21).

Un nombre préfixé par 0x indique à Python qu'il est exprimé en hexadécimal, soit le système de numération à base 16.

Exemple :

>>> 0xA+0xB
21

Les nombres A et B sont ici en hexadécimal, mais Python donne le résultat en décimal (nombre 21 sans préfixe) puisqu'il s'agit du système de numération par défaut.

La fonction hex() de Python permet de convertir un entier de la base 10 vers la base 16.

Exemple :

>>> hex(743)
'0x2e7'

On en déduit que le nombre décimal 743 s'écrit 2E7 en hexadécimal. Le résultat étant exprimé en hexadécimal, Python l'a préfixé par 0x (et le donne sous forme d'une chaîne de caractères).

Questions : combien vaut, en hexadécimal, le résultat de l'addition hexadécimale 4CF+D7E ?

Tapons dans la console de Python :

>>> hex(0x4cf+0xd7e)
'0x124d'

Réponse : le résulat vaut 124D (en base 16)

Un nombre préfixé par 0b indique à Python qu'il est exprimé en binaire naturel, soit le système de numération à base 2.

Exemple :

>>> 0b1001+0b110
15

Nous venant d'effectuer la somme 9+6, avec 9 et 6 exprimé en binaire naturel. Le résultat (en décimal) est 15.

La fonction bin() de Python permet de convertir un entier de la base 10 vers la base 2.

Exemple :

>>> bin(93)
'0b1011101'

On en déduit que le nombre décimal 93 s'écrit 1011101 en binaire naturel. Le résultat étant exprimé en base 2, Python l'a préfixé par 0b (et le donne sous forme d'une chaîne de caractères).

Questions : combien vaut, en binaire naturel, le résultat de l'addition binaire 110111101+11010111111 ?

Tapons dans la console de Python :

>>> bin(0b110111101+0b11010111111)
'0b100001111100'

Réponse : le résulat vaut 100001111100 (en base 2)

La fonction int() de Python renvoie un entier en base 10 à partir d'un "objet" le décrivant.

Exemples :

Si on passe en paramètre à la fonction int() un nombre à virgule, int() le convertit en nombre entier :

>>> int(7.3)
7
>>> int(24.8587)
24
>>> int(12.99999999)
12

Si on passe en paramètre à la fonction int() une chaîne de caractères représentant un nombre entier en base 10, int() renverra l'entier lui correspondant :

>>> int('56')
56
>>> int('7491')
7491

Pour indiquer à int() que la chaîne de caractères est exprimée dans une autre base que la base 10 il faut passer un second paramètre à la fonction int() indiquant la base du système de numération utilisé. Par exemple, pour convertir en base 10 un nombre exprimé en binaire naturel on utilisera :

>>> int('1001',2)
9

Si on a une chaîne de caractères représentant un nombre en hexadécimal on indiquera à int() que la chaînes de caractères est à interpréter en base 16 :

>>> int('1A',16)
26

Comment demander à la fonction int() d'interpréter une chaîne de caractères préfixée par 0x ou 0b ? Pour cela il faut indiquer 0 comme second paramètre. Ainsi la fonction int() va "deviner" en quelle base est exprimée la chaîne de caractères en fonction de son préfixe.

Exemple :

>>> int('0b1001',0)
9
>>> int('0xC',0)
12
>>> int('428',0)
428

A retenir :

Python peut utiliser différents systèmes de numération pour représenter les nombres entiers, et :

  • un nombre sans préfixe est exprimé en décimal
  • un nombre préfixé par 0x est exprimé en hexadécimal
  • un nombre préfixé par 0b est exprimé en binaire naturel

 

Les nombres à virgule flottante

Python utilise le caractère "point" pour le séparateur décimal (appelé oralement "la virgule" pour les nombres décimaux) et utilise aussi la notation scientifique avec le caractère e (lettre e en minuscule) pour symboliser "10 puissance".

Exemples :

>>> 5.6+9.8
15.4
>>> .5
0.5
>>> 1e3
1000.0
>>> 2.5e-2
0.025
>>> 4.3e-8
4.3e-08

La fonction float() de Python renvoie un nombre à virgule flottante à partir de la description de sa valeur numérique.

Exemples :

>>> float(45)
45.0
>>> float('86.37')
86.37
>>> float('-7e3')
-7000.0

Pour coder en interne un nombre à virgule flottante, Python utilise la norme IEEE-754 au format double précision (sur 64 bits soit 8 octets).

La fonction float() dispose d'une méthode hex() permettant de savoir comment le nombre à virgule flottante est codé en mémoire. La méthode hex() renvoie le signe, la mantisse (en hexadécimal) et l'exposant du nombre codé en base 2.

Exemples :

>>> float.hex(3.0)
'0x1.8000000000000p+1'
>>> float.hex(7.5)
'0x1.e000000000000p+2'
>>> float.hex(-473.687)
'-0x1.d9afdf3b645a2p+8'

Rappel : avec la norme IEEE-754 la mantisse, en binaire, s'écrit toujours 1.xxxxxxxxxxxx et seule la partie fractionnaire xxxxxxxxxxxx est codée en mémoire (présenté en hexadécimal par float.hex()).

La lettre p dans la chaîne renvoyée par float.hex() rappelle que l'exposant (à droite de p) correspond à une puissance de 2 (et non à une puisance de 10).

 

Conversion d'un nombre à virgule flottante vers un nombre entier

Le passage d'un nombre à virgule vers un nombre entier de valeur "relativement proche" équivaut à arrondir le nombre.

Python dispose de plusieurs fonctions convertissant un nombre à virgule flottante en un nombre entier.

La fonction int() (déjà vue ci-dessus) renvoie un nombre entier à partir d'un nombre quelconque :

>>> int(7.8)
7
>>> int(-13.56)
-13

Python dispose d'une autre fonction arrondissant un nombre à virgule vers un nombre entier. Il s'agit de la fonction round() :

>>> round(28.4)
28
>>> round(-4.5)
-4

En important le module math de Python, il existe encore 2 autres fonctions convertissant un nombre décimal (à virgule) en nombre entier. Ces fonctions sont floor() et ceil() :

>>> import math
>>> math.floor(6.3)
6
>>> math.floor(-6.3)
-7
>>> math.ceil(9.4)
10
>>> math.ceil(-9.4)
-9

On retiendra que Python dispose de 4 fonctions différentes convertissant un nombre à virgule en un nombre entier :

  • int()
  • round()
  • math.floor()
  • math.ceil()

Le choix d'une de ces fonctions dépendra de la méthode d'arrondi désirée, qui dépendra elle du problème à traiter.

 

 


 

 

Site Internet : python.gecif.net

Auteur : Jean-Christophe MICHEL

Professeur de Sciences Industrielles de l'Ingénieur
option Informatique et Numérique

Courriel : jc.michel@gecif.net