On considère ici les types (les classes) ’int’, ’float’ et ’complex’.
Les valeurs de ces types (on dit aussi les instances de ces classes) partagent un certain nombre d’opérations arithmétiques communes (addition, produit, etc.).
Quand on évalue une expression arithmétique contenant des valeurs numériques, on peut considérer la classe ’int’ comme incluse dans la classe ’float’, elle-même incluse dans la classe ’complex’ (il serait plus exact de parler d’injections canoniques de ’int’ vers ’float’, et de ’float’ vers ’complex’).
Lors de l’évaluation d’une telle expression, le calcul s’effectue dans la classe la plus étroite qui soit compatible avec tous les arguments, et c’est dans cette classe qu’est renvoyé le résultat (c’est pour cette raison, par exemple, que la somme de l’entier 2 et du flottant 3.0 est le flottant 5.0).
Voici les principales opérations sur les types numériques :
x + y x - y x * y x / y |
somme, différence, produit, quotient |
pow(x, y) x ** y |
calcule x à la puissance y. Par défaut {0^0=1} |
x // y x % y |
quotient et reste dans une division euclidienne entre entiers |
divmod(x, y) |
renvoie la paire ( x // y, x % y ) |
abs(x) |
valeur absolue, module |
int(x) float(x) |
conversion vers le type ’int’, ou vers le type ’float’ |
round(x) round(x,n) |
arrondit à l’entier le plus proche, ou valeur approchée à {10^{-n}} près |
z.real z.imag z.conjugate() |
partie réelle, partie imaginaire, conjugué |
complex(x, y) x + y * 1j |
renvoie le nombre complexe x + iy |
NB : une source d’erreur classique concerne les divisions par / ou // (c’est une différence entre Python 2 et Python 3).
Avec Python 3, l’opérateur // fournit le quotient entier dans la division euclidienne.
|
1 2 3 4 5 6 7 8 |
>>> 2013 // 17 # le quotient dans la division euclidienne: le résultat est un 'int' 118 >>> 2013 / 17 # le résultat dans la division dans R: le résultat est un 'float' 118.41176470588235 >>> 2013 // 17. # division entière aussi, mais 17. est un 'float', donc résultat 'float' 118.0 >>> (1+2j)/(3-5j) # division de deux complexes (ici // donnerait une erreur de type) (-0.20588235294117646+0.3235294117647059j) |
NB : dans la division (dite entière) par // et %, le quotient et le reste dans la division de x par y sont respectivement l’entier q et le réel r tels que : x = qy + r, avec 0 ≤ r < y si y > 0, et y < r ≤ 0 si y < 0. Si l’un au moins de x ou y est un flottant, alors q et r sont des flottants (bien que le flottant q ait une valeur entière…)
|
1 2 3 4 5 6 7 8 9 10 |
>>> divmod(20,7) # 20 = 7q + r, avec q = 2 et r = 6 (et on a bien 0 ≤ r < 7) (2, 6) >>> divmod(-20,7) # -20 = 7q + r, avec q = -3 et r = 1 (et on a bien 0 ≤ r < 7) (-3, 1) >>> divmod(20,-7) # 20 = -7q + r, avec q = -3 et r = -1 (et on a bien -7 < r ≤ 0) (-3, -1) >>> divmod(-20,-7) # -20 = -7q + r, avec q = 2 et r = -6 (et on a bien -7 < r ≤ 0) (2, -6) >>> divmod(20.,7) # ici les résultats sont des floats car le dividende est un float (2.0, 6.0) |