Le module math
⚓︎
Le module math
propose des fonctions utiles en arithmétique, mais
Mauvaise pratique
On peut calculer les dix derniers chiffres du plus grand nombre premier connu à la fin de l'année 2018 ainsi :
>>> pow(2, 82_589_933, 10_000_000_000) - 1
5217902591
>>> from math import *
>>> pow(2, 82_589_933, 10_000_000_000) - 1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: pow expected 2 arguments, got 3
La seconde tentative a échoué à cause de from math import *
En effet, l'import du module math
s'est accompagné d'une fonction math.pow
qui a écrasé la fonction native pow
différente.
On n'importe que ce dont on a besoin !
Bonne pratique
Vous avez besoin des fonctions sqrt
, factorial
, gcd
et comb
?
Alors n'importez que celles-ci !
>>> from math import sqrt, factorial, gcd, comb
>>> factorial(5)
120
Autre pratique
On peut aussi faire import math
, dans ce cas, les constantes et fonctions
se font appeler en préfixant par math.
>>> import math
>>> math.factorial(5)
120
>>> math.pi
3.141592653589793
L'intérêt est de pouvoir conserver l'utilisation d'une fonction native et/ou d'autres fonctions d'autres modules qui auraient le même identifiant !
🧱 Un seul import suffit pour l'ensemble d'un script, ou d'une session console.
La documentation sur le module math
nous propose, entre autres
sqrt(x)
; racine carrée de x
⚓︎
Pour square root ; la racine carrée, le résultat est toujours un flottant.
>>> sqrt(49)
7.0
>>> sqrt(1e300)
1e+150
>>> sqrt(1e-300)
1e-150
>>> sqrt(-5)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: math domain error
>>>
- \(\sqrt{49} = 7\)
- \(\sqrt{1×10^{300}} = 1×10^{150}\)
- \(\sqrt{1×10^{-300}} = 1×10^{-150}\)
- \(\sqrt{-5}\) provoque une erreur, \(-5\) n'est pas dans le domaine de définition.
Pensez à lire les messages d'erreurs ; ils sont souvent très explicites. N'ayez pas peur !
ceil(x)
; partie entière par excès de x
⚓︎
Renvoie la partie entière par excès de x
.
Ceil ; plafond en anglais.
>>> from math import ceil
>>> effectif = 587
>>> capacité = 45
>>> début = f"Il faut {ceil(effectif / capacité)} bus pour"
>>> suite = f" transporter {effectif} personnes dans"
>>> fin = f" des bus de {capacité} places."
>>> début + suite + fin
Il faut 14 bus pour transporter 587 personnes dans des bus de 45 places.
>>>
floor(x)
; partie entière par défaut de x
⚓︎
Renvoie la partie entière par défaut de x
.
Floor ; sol en anglais.
>>> from math import floor
>>> production = 5870
>>> unité = 0.75
>>> début = f"On peut remplir {floor(production / unité)} bouteilles"
>>> suite = f" de {unité} litres avec"
>>> fin = f" un apport de {production} litres."
>>> début + suite + fin
On peut remplir 7826 bouteilles de 0.75 litres avec un apport de 5870 litres.
>>>
Les fonctions int
et floor
coïncident sur \(\mathbb R^+\), mais pas sur \(\mathbb R^-\) !
>>> int(7.5)
7
>>> floor(7.5)
7
>>> int(-7.5)
-7
>>> floor(-7.5)
-8
exp(x)
; exponentielle de x
⚓︎
Renvoie \(e\) à la puissance x
, où \(e = 2.718281…\) est la base des logarithmes naturels. Cela est en général plus précis que math.e ** x
ou pow(math.e, x)
.
Fonctions trigonométriques⚓︎
cos, acos, sin, asin, tan, atan
utilisent les angles en radians.