Recherche…


Introduction

Python fait lui-même appel à des opérateurs mathématiques communs, y compris la division entière et flottante, la multiplication, l'exponentiation, l'addition et la soustraction. Le module mathématique (inclus dans toutes les versions standard de Python) offre des fonctionnalités étendues telles que les fonctions trigonométriques, les opérations root, les logarithmes, etc.

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 et int (donne un int )
  • int et float (donne un float )
  • int et complex (donne un complex )
  • float et float (donne un float )
  • float et complex (donne un complex )
  • complex et complex (donne un complex )

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 et int (donne un int )
  • int et float (donne un float )
  • int et complex (donne un complex )
  • float et float (donne un float )
  • float et complex (donne un complex )
  • complex et complex (donne un complex )

Multiplication

a, b = 2, 3

a * b                  # = 6

import operator
operator.mul(a, b)     # = 6

Combinaisons possibles (types intégrés):

  • int et int (donne un int )
  • int et float (donne un float )
  • int et complex (donne un complex )
  • float et float (donne un float )
  • float et complex (donne un complex )
  • complex et complex (donne un complex )

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
Python 2.x 2.7

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
Python 2.x 2.2

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
Python 2.x 2.2

L'opérateur '//' dans Python 2 force la division paralysée quel que soit le type.

a // b                # = 1
a // c                # = 1.0
Python 3.x 3.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 et int (donne un int dans Python 2 et un float dans Python 3)
  • int et float (donne un float )
  • int et complex (donne un complex )
  • float et float (donne un float )
  • float et complex (donne un complex )
  • complex et complex (donne un complex )

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 utiliser math.hypot comme suit

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


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow