Python Language
Opérateurs mathématiques simples
Recherche…
Introduction
Remarques
Types numériques et leurs métaclasses
Le module de numbers
contient les métaclasses abstraites pour les types numériques:
sous-classes | numéros.Nombre | nombres.intégrale | chiffres.Rational | numéros.Real | nombres.Complex |
---|---|---|---|---|---|
bool | ✓ | ✓ | ✓ | ✓ | ✓ |
l'int | ✓ | ✓ | ✓ | ✓ | ✓ |
fractions.Fraction | ✓ | - | ✓ | ✓ | ✓ |
flotte | ✓ | - | - | ✓ | ✓ |
complexe | ✓ | - | - | - | ✓ |
décimal.Décimal | ✓ | - | - | - | - |
Une addition
a, b = 1, 2
# Using the "+" operator:
a + b # = 3
# Using the "in-place" "+=" operator to add and assign:
a += b # a = 3 (equivalent to a = a + b)
import operator # contains 2 argument arithmetic functions for the examples
operator.add(a, b) # = 5 since a is set to 3 right before this line
# The "+=" operator is equivalent to:
a = operator.iadd(a, b) # a = 5 since a is set to 3 right before this line
Combinaisons possibles (types intégrés):
-
int
etint
(donne unint
) -
int
etfloat
(donne unfloat
) -
int
etcomplex
(donne uncomplex
) -
float
etfloat
(donne unfloat
) -
float
etcomplex
(donne uncomplex
) -
complex
etcomplex
(donne uncomplex
)
Remarque: l'opérateur +
est également utilisé pour concaténer des chaînes, des listes et des tuples:
"first string " + "second string" # = 'first string second string'
[1, 2, 3] + [4, 5, 6] # = [1, 2, 3, 4, 5, 6]
Soustraction
a, b = 1, 2
# Using the "-" operator:
b - a # = 1
import operator # contains 2 argument arithmetic functions
operator.sub(b, a) # = 1
Combinaisons possibles (types intégrés):
-
int
etint
(donne unint
) -
int
etfloat
(donne unfloat
) -
int
etcomplex
(donne uncomplex
) -
float
etfloat
(donne unfloat
) -
float
etcomplex
(donne uncomplex
) -
complex
etcomplex
(donne uncomplex
)
Multiplication
a, b = 2, 3
a * b # = 6
import operator
operator.mul(a, b) # = 6
Combinaisons possibles (types intégrés):
-
int
etint
(donne unint
) -
int
etfloat
(donne unfloat
) -
int
etcomplex
(donne uncomplex
) -
float
etfloat
(donne unfloat
) -
float
etcomplex
(donne uncomplex
) -
complex
etcomplex
(donne uncomplex
)
Remarque: L'opérateur *
est également utilisé pour la concaténation répétée de chaînes, de listes et de n-uplets:
3 * 'ab' # = 'ababab'
3 * ('a', 'b') # = ('a', 'b', 'a', 'b', 'a', 'b')
Division
Python fait une division entière lorsque les deux opérandes sont des entiers. Le comportement des opérateurs de division de Python a changé depuis Python 2.x et 3.x (voir aussi Integer Division ).
a, b, c, d, e = 3, 2, 2.0, -3, 10
En Python 2, le résultat de l'opérateur '/' dépend du type du numérateur et du dénominateur.
a / b # = 1
a / c # = 1.5
d / b # = -2
b / a # = 0
d / e # = -1
Notez que comme a
et b
sont int
s, le résultat est un int
.
Le résultat est toujours arrondi au sol.
Parce que c
est un flottant, le résultat de a / c
est un float
.
Vous pouvez également utiliser le module opérateur:
import operator # the operator module provides 2-argument arithmetic functions
operator.div(a, b) # = 1
operator.__div__(a, b) # = 1
Et si vous voulez la division float:
Conseillé:
from __future__ import division # applies Python 3 style division to the entire module
a / b # = 1.5
a // b # = 1
Ok (si vous ne voulez pas appliquer à tout le module):
a / (b * 1.0) # = 1.5
1.0 * a / b # = 1.5
a / b * 1.0 # = 1.0 (careful with order of operations)
from operator import truediv
truediv(a, b) # = 1.5
Non recommandé (peut déclencher TypeError, par exemple si l'argument est complexe):
float(a) / b # = 1.5
a / float(b) # = 1.5
L'opérateur '//' dans Python 2 force la division paralysée quel que soit le type.
a // b # = 1
a // c # = 1.0
Dans Python 3, l'opérateur /
effectue une division "true" indépendamment des types. L'opérateur //
effectue la division d'étage et maintient le type.
a / b # = 1.5
e / b # = 5.0
a // b # = 1
a // c # = 1.0
import operator # the operator module provides 2-argument arithmetic functions
operator.truediv(a, b) # = 1.5
operator.floordiv(a, b) # = 1
operator.floordiv(a, c) # = 1.0
Combinaisons possibles (types intégrés):
-
int
etint
(donne unint
dans Python 2 et unfloat
dans Python 3) -
int
etfloat
(donne unfloat
) -
int
etcomplex
(donne uncomplex
) -
float
etfloat
(donne unfloat
) -
float
etcomplex
(donne uncomplex
) -
complex
etcomplex
(donne uncomplex
)
Voir PEP 238 pour plus d'informations.
Exponentation
a, b = 2, 3
(a ** b) # = 8
pow(a, b) # = 8
import math
math.pow(a, b) # = 8.0 (always float; does not allow complex results)
import operator
operator.pow(a, b) # = 8
Une autre différence entre le pow
math.pow
et math.pow
est que le pow
intégré peut accepter trois arguments:
a, b, c = 2, 3, 2
pow(2, 3, 2) # 0, calculates (2 ** 3) % 2, but as per Python docs,
# does so more efficiently
Fonctions spéciales
La fonction math.sqrt(x)
calcule la racine carrée de x
.
import math
import cmath
c = 4
math.sqrt(c) # = 2.0 (always float; does not allow complex results)
cmath.sqrt(c) # = (2+0j) (always complex)
Pour calculer d'autres racines, telles qu'une racine de cube, augmentez le nombre à l'inverse du degré de la racine. Cela pourrait être fait avec n'importe quelle fonction exponentielle ou opérateur.
import math
x = 8
math.pow(x, 1/3) # evaluates to 2.0
x**(1/3) # evaluates to 2.0
La fonction math.exp(x)
calcule e ** x
.
math.exp(0) # 1.0
math.exp(1) # 2.718281828459045 (e)
La fonction math.expm1(x)
calcule e ** x - 1
. Lorsque x
est petit, cela donne une précision nettement meilleure que math.exp(x) - 1
.
math.expm1(0) # 0.0
math.exp(1e-6) - 1 # 1.0000004999621837e-06
math.expm1(1e-6) # 1.0000005000001665e-06
# exact result # 1.000000500000166666708333341666...
Logarithmes
Par défaut, la fonction math.log
calcule le logarithme d'un nombre, base e. Vous pouvez éventuellement spécifier une base comme second argument.
import math
import cmath
math.log(5) # = 1.6094379124341003
# optional base argument. Default is math.e
math.log(5, math.e) # = 1.6094379124341003
cmath.log(5) # = (1.6094379124341003+0j)
math.log(1000, 10) # 3.0 (always returns float)
cmath.log(1000, 10) # (3+0j)
Des variantes spéciales de la fonction math.log
existent pour différentes bases.
# Logarithm base e - 1 (higher precision for low values)
math.log1p(5) # = 1.791759469228055
# Logarithm base 2
math.log2(8) # = 3.0
# Logarithm base 10
math.log10(100) # = 2.0
cmath.log10(100) # = (2+0j)
Opérations en place
Il est courant dans les applications d'avoir besoin d'un code comme celui-ci:
a = a + 1
ou
a = a * 2
Il existe un raccourci efficace pour ces opérations en place:
a += 1
# and
a *= 2
Tout opérateur mathématique peut être utilisé avant le caractère '=' pour effectuer une opération in-situ:
-
-=
décrémenter la variable en place -
+=
incrémenter la variable en place -
*=
multiplier la variable en place -
/=
divise la variable en place -
//=
sol divise la variable en place # Python 3 -
%=
renvoie le module de la variable en place -
**=
élever à une puissance en place
D'autres opérateurs sur place existent pour les opérateurs de bits ( ^
, |
etc)
Fonctions trigonométriques
a, b = 1, 2
import math
math.sin(a) # returns the sine of 'a' in radians
# Out: 0.8414709848078965
math.cosh(b) # returns the inverse hyperbolic cosine of 'b' in radians
# Out: 3.7621956910836314
math.atan(math.pi) # returns the arc tangent of 'pi' in radians
# Out: 1.2626272556789115
math.hypot(a, b) # returns the Euclidean norm, same as math.sqrt(a*a + b*b)
# Out: 2.23606797749979
Notez que
math.hypot(x, y)
est également la longueur du vecteur (ou distance euclidienne) de l'origine(0, 0)
au point(x, y)
.Pour calculer la distance euclidienne entre deux points
(x1, y1)
&(x2, y2)
vous pouvez utilisermath.hypot
comme suitmath.hypot(x2-x1, y2-y1)
Pour convertir des radians -> degrés et degrés -> les radians utilisent respectivement math.degrees
et math.radians
math.degrees(a)
# Out: 57.29577951308232
math.radians(57.29577951308232)
# Out: 1.0
Module
Comme dans de nombreuses autres langues, Python utilise l'opérateur %
pour calculer le module.
3 % 4 # 3
10 % 2 # 0
6 % 4 # 2
Ou en utilisant le module operator
:
import operator
operator.mod(3 , 4) # 3
operator.mod(10 , 2) # 0
operator.mod(6 , 4) # 2
Vous pouvez également utiliser des nombres négatifs.
-9 % 7 # 5
9 % -7 # -5
-9 % -7 # -2
Si vous avez besoin de trouver le résultat de la division et du module entiers, vous pouvez utiliser la fonction divmod
comme raccourci:
quotient, remainder = divmod(9, 4)
# quotient = 2, remainder = 1 as 4 * 2 + 1 == 9