Bibliothèques (modules) en python : math et random¶
Le langage python est capable d'effectuer les principales tâches algorithmiques de base (gestion des variables, boucles, tests). Mais, il y a des tâches courantes qu'il ne sait pas faire nativement. C'est pourquoi, afin d'éviter de "réinventer la roue" à chaque fois, il existe d'inombrables bibliothèques qui accompagnent ce langage. Pour faire simple, ces bibliothèques (on parle aussi de modules, ou de librairies ou parfois de packages) sont des ensembles de fonctions relatives à une thématique donnée (par exemple le module mathregroupe des fonctions relatives aux mathématiques !) qui ont été programmées par d'autres personnes et qui sont mises à disposition de la communauté pour faciliter la création de programmes. On peut retrouver sur la documentation officielle de python une liste de bibliothèques accessibles : doc python
Il existe beaucoup d'autres libraires, qui ne sont pas fournies avec le langage de base, mais qui peuvent être téléchargées et installées. Là aussi plusieurs possiblités coexistent. Par exemple on peut citer le programme pip qui se charge de télécharger et d'installer des bibliothèques. On ne l'utilisera pas ici, mais on peut aller faire un tour sur https://pypi.org/ pour voir ce qui existe !
I. Différentes façons d'importer une librairie¶
On a déjà croisé l'utilisation de libraires comme randomou math. On va maintenant détailler comment utiliser une librairie. Il est important de comprendre les différents mécanismes d'import. Prenons l'exemple simple de la bibliothèque math. On peut accéder à ces fonctions de plusieurs manières. En début de script on peut taper:
1. Méthode conseillée: import math¶
Dans ce cas, on peut utiliser n'importe quelle fonction de ce module (par exemple la fonction exponentielle) en prenant soin de faire précéder le nom de la fonction par le nom du module. Voyons un exemple:
import math
print(math.exp(2))
print(math.sqrt(2))
print(math.cos(math.pi/4))
Remarque : on peut donner un alias au nom du module de la façon suivante:
import math as m
print(m.exp(2))
print(m.sqrt(2))
print(m.cos(m.pi/4))
2. Autre possibilité: from math import exp, sqrt¶
Cette méthode semble pratique, mais elle est déconseillée (voir plus bas). Avec cette méthode, on importe uniquement les fonctions exponentielle et racine carrée, et on y accède directement:
from math import exp, sqrt
print(exp(2))
print(sqrt(2))
print(cos(pi/4))
Remarque : on peut même importer toutes los fonctions du module avec from math import *, mais cela est fortement déconseillé sauf pour quelques bibliothèques très particulières.
from math import *
print(exp(2))
print(sqrt(2))
print(cos(pi/4))
Il est important de noter que la deuxième méthode, bien que séduisante a priori, n'est pas utilisable à grande échelle et on ne la gardera (éventuellement) que pour des phases de tests. En effet on comprend bien que si l'on importe plusieurs modules, il pourrait rapidement y avoir conflit avec des fonctions qui porteraient le même nom ! Elle est donc à éviter et on privilégiera autant que faire se peut la première, sachant que la plupart des éditeurs possèdent une aide à la saisie qui nous évite de taper le nom de la fonction en entier...
II. Accès à la documentation d'une librairie¶
Bien entendu, vous pouvez trouver toute l'aide nécessaire sur l'utilisation des différents modules sur Internet, mais il est parfois pratique et plus rapide d'utiliser l'aide fournie par les docstring incluses dans les modules eux-même (si les programmeurs ont bien fait leur travail !). Par exemple si votre module a été importé par la commande import math vous pouvez taper dans le shell:
help(math)pour obtenir de l'aide sur le module complethelp(math.exp)pour obtenir l'aide sur une fonction particulière.dir(math)pour obtenir la liste de toutes les fonctions du module math
import math
dir(math)
help(math)
help(math.log)
Exercice 1 (avec le module math)¶
Q1. La fonction cos donne le cosinus d'un angle. Celui-ci doit-il être exprimé en degrés ou en radians?
help(math.cos)
Q2. Que fait la fonction radians? Quelle instruction taper pour obtenir le cosinus de 60 degrés~?
help(math.radians)
math.cos(math.radians(60))
Q3. Que fait la fonction floor? Quelle est la différence avec la fonction ceil? Donner un exemple.
help(math.ceil)
Q4. Que fait la fonction dist? Donner un exemple d'utilisation.
help(math.dist)
Exercice 2 (avec le module random)¶
Q5. Faire afficher la liste de toutes les fonctions du module random
import random
dir(random)
Q6. À votre avis, que fait le programme suivant ?
import random
lst = list(range(10))
nb = random.choice(lst)
print(nb)
Réponse :
Q7. Vérifier à l'aide de la fonction help(random.choice) que le résultat est bien celui que vous attendez.
help(random.choice)
Q8. En lisant l'aide sur la fonction randint dire laquelle des deux instructions suivantes permet de faire la même chose que le programme précédent ?
a.
print(random.randint(0,10))ou b.print(random.randint(0,9))
#réponse b car :
help(random.randint)
Q9. Compléter le script ci-dessous pour mélanger aléatoirement (en place) la liste L1 (chercher dans le module random la fonction idoine...)
import random
L1 = list(range(21))
# à compléter
print(L1)
Q10. Écrire une fonction python liste_alea(a : int, b : int, n : int)-> list qui reçoit 3 entiers $a$, $b$ et $n$ et qui renvoie une liste constituée de $n$ entiers choisis aléatoirement entre les entiers $a$ et $b$ inclus.
Q11. Créer une liste aléatoire de 5 entiers compris entre 0 et 20 et afficher la moyenne de ces entiers. Répéter 10 fois ce calcul et constater que la moyenne obtenue varie significativement. Refaire la même expérience avec des listes de 1000 entiers et constater que la moyenne obtenue est beaucoup plus stable...