Les types numériques

Le typage des objets.

Dans un programme, différents types d’informations (nombres, chaînes de caractères, des caractères spéciaux…) peuvent être placés dans une variable et il est capital de connaître comment la valeur qui s’y trouve a été codée. Cette distinction correspond à la notion de type, fondamentale en informatique car elle débouche sur le codage binaire de la variable.

(par exemple, un entier numérique sur 32 bits, un réel sur 64 bits et un caractère sur 16 bits) ainsi que sur les usages qui peuvent en être faits.

Par exemple, on ne peut pas ajouter un nombre à un caractère.

51 +'bonjour !'

Réponse de python :

TypeError: unsupported operand type(s) for +: 'int' and 'str'

Python signale ainsi qu'il ne peut pas ajouter un entier (type int) et une chaîne de caractères (type str).

Le typage des nombres.

Il existe deux types de nombres : les nombres de type int et les nombres de type float.

Le type int correspond aux entiers. Le type float correspond dans une première approche aux nombres réels.

Il est important de bien distinguer en programmation ces deux types de nombres, car ils ne sont pas codés en machine de la même façon et les opérations de base (addition, multiplication...) portant sur les int et sur les float ne sont pas programmées de la même façon.

Exemple : on aimerait connaître le nombre exact de mots qu'il est possible de coder sur 64 bits. Peut-on pour cela faire une opération avec le type int en python ? avec le type float ?

Nous expliquerons plus tard dans le cours que le nombre cherché est 264. En python, si nous tapons 2**64, nous calculons 264 avec les opérations portant sur des nombres de type int, tandis que si nous entrons 2.0**64, les opérations se feront avec le type float (2.0 désigne un float, tandis que 2 est un int).


print(type(2))
print(type(2.0))

Réponse de python :

<class 'int'>
<class 'float'>

Pour le calcul de 264 :


print(2**64)
print(2.0**64)

Réponse de python :

18446744073709551616
1.8446744073709552e+19

Le résultat est exact avec un calcul utilisant le type int. Il ne l'est plus avec un calcul utilisant le type float.

Une réflexion sur le type à utiliser et sur la réponse apportée sera donc nécessaire dans la plupart des cas. Pour vous convaincre de la nécessité de cette réflexion, consulter cette page.

Métissage ?

Peux-t-on mélanger deux types distincts dans une même opération ?

Nous avons déjà vu plus haut qu'on ne saurait ajouter un nombre et une chaîne de caractères. Mais peut-on ajouter un int et un float ?

a=2
b=3.0
print('Le type de a : ', type(a)) 
print( 'Le type de b : ', type(b))

c=a+b
print('Valeur de c :', c)
print('Le type de c : ', type(c) )

Réponse de python :

Le type de a :   class 'int' 
Le type de b :   class 'float' 
Valeur de c : 5.0
Le type de c :   class 'float' 

L'opération est donc acceptée et le résultat de l'addition sera un float.

De façon générale, on évitera autant que possible les mélanges de types dans une même opération. Lorsqu'il sera tout de même utile de faire un tel mélange, il faudra prendre le temps de prévoir la nature du résultat et les conséquences éventuelles.

Opérations et comparaisons sur les nombres

Tableau des opérations et comparaisons possibles entre deux "int".

a et b sont de type entier ou réel

a+b Résultat de type int ou float, somme de a et b.
a-b Résultat de type int ou float, différence de a et b.
a*bRésultat de type int ou float, produit de a et b.
a/bRésultat de type int ou float, approximation du quotient de a par b.
a//bRésultat de type int, la partie entière du quotient de la division de a par b.
a%bRésultat de type int, reste de la division euclidienne de a par b (a et b sont des entiers).
a**b ou pow(a,b)Résultat de type int ou float, a puissance b (ab).
a < b Résultat de type bool : True si a < b, False sinon.
a > b Résultat de type bool : True si a > b, False sinon.
a >= b Résultat de type bool : True si a ≥ b, False sinon.
a <= b Résultat de type bool : True si a ≤ b, False sinon.
a == b Résultat de type bool : True si a = b, False sinon.
a != b Résultat de type bool : True si a ≠ b, False sinon.

Les fonctions mathématiques du module math ou du module random

sqrt(a) Résultat de type float, somme de a et b.
sin(x), cos(x), tan(x) Les fonctions trigonométriques.
exp(x), log(x) Les fonctions exponentielle et logarithme népérien.
floor(x)Renvoie la partie entière de x.
abs(x)Renvoie la valeur absolue de x, c'est-à-dire : x si x ≤0 et -x sinon.
min(a,b)Renvoie le plus petit des deux nombres a et b.
max(a,b)Renvoie le plus grand des deux nombres a et b.
randint(a,b)Renvoie un entier choisi aléatoirement entre a et b ( a < b).
random()Renvoie un flottant choisi aléatoirement dans l'intervalle [0 ; 1].
uniform(a,b)Renvoie un flottant choisi aléatoirement entre a et b ( a < b).

Pour utiliser les fonctions randint() ou random() ou uniforme(), on doit importer le module random

Voir comment importer un module de Python

Des racourcis

On utilise souvent des raccourcis pour les instructions du type

x = x + a qu’on a tendance à écrire de façon équivalente, mais plus compacte : x += a

Les autres opérateurs du même type sont les suivantes :

Opération Effet
a+=b Additionne les deux valeurs de a et b et stoke le résultat dans la variable a
a-=b Soustrait la valeur de b de celle de a et stoke le résultat dans la variable a
a*=b Multiplie les deux valeurs de a et b et stoke le résultat dans la variable a
a/=b Divise la valeur de a par celle de b et stoke le résultat dans la variable a
a//=b Effectue la division euclidienne de la valeur de a par celle de b et stoke le résultat dans la variable a
a//=b Effectue la division euclidienne de la valeur de a par celle de b et stoke le reste dans la variable a
a**=b Effectue a puissance b et stoke le résultat dans la variable a

Comparaison d'un entier et d'un réel

print(2==3)
print(2==2)
print(2==2.0)
print(2<2.0)

Réponse de python3 :

False
True
True
False

On remarque que l'on a pu comparer un int et un float (certains langages de programmation refuseraient cela). Pour effectuer ces comparaisons, python transforme (avant d'effectuer la comparaison) le nombre de type int en un nombre de type float (le nombre 2 devient donc 2.0 et la comparaison n'est effectuée qu'ensuite).