Introduction à Python Introduction aux bibliothèques auvraymath.
net
TP n°5 : Introduction aux bibliothèques
Instruction générale : hormis pour les exercices corrigés collectivement, vous ferez valider votre
travail par l’enseignant.
1 Bibliothèques
Les bibliothèques (ou modules) constituent des ensembles de fonctions vérifiées et validées.
Elles sont mises à disposition afin de pouvoir être utilisées sans avoir à les réécrire. On appelle les
bibliothèques dans un programme à l’aide de la commande import. Du point de vue de la struc-
ture du code, il est préférable d’importer tous les bibliothèques dont on a besoin dès le début du
programme. Il existe plusieurs façon d’effectuer un import comme on peut le voir dans l’exemple
ci-dessous avec la bibliothèque math qui contient des fonctions mathématiques. On peut retrouver
la documentation de la librairie math ici.
• import math
Le module math est importé. On peut utiliser ses fonctions en les préfixant avec math. Par
exemple, sqrt() qui désigne la racine carrée (square root en anglais) :
x = [Link](64)
• from math import *
Toutes les fonctions du module math sont importées. On peut les utiliser sans préfixe.
x = sqrt(64)
• from math import sqrt
On importe juste ce dont on a besoin, ici la fonction sqrt.
x = sqrt(64)
Exercice 1. Dans la bibliothèque math, importer la fonction permettant de calculer la partie
entière d’un nombre puis calculer celle de 7.34891 et −4.9736.
Exercice 2. Dans la bibliothèque math, importer la constante π puis l’utiliser pour écrire une
fonction calculant la surface et le volume d’une sphère de rayon donné.
2 Librairie random
On trouvera la documentation la librairie random ici. Celle-ci est dédiée à la génération de
nombres pseudo-aléatoires. En effet, l’aléatoire n’existe pas réellement en informatique et on doit
faire appel soit à des suites de nombres construits par algorithmes de façon à « imiter » l’aléatoire
(d’où pseudo-aléatoire), soit faire appel à des suites de nombres construits à partir de phénomènes
physiques ayant des caractéristiques aléatoires.
1
Introduction à Python Introduction aux bibliothèques [Link]
Exercice 3. Dans l’interpréteur Python, importer la bibliothèque random puis exécuter les com-
mandes ci-dessous plusieurs fois chacune. Que constate-t-on ?
1. randint(1, 10) ; 2. random() ; 3. uniform(1, 10).
Exercice 4.
1. Écrire une fonction simulant le lancé d’un dé à six faces.
2. Écrire une fonction simulant le lancé d’un dé à un nombre quelconque de faces.
Exercice 5. [Surprise] Vous venez d’acheter une boîte de dragées surprises de Bertie Crochue.
La boîte mentionne qu’elle contient cinq saveurs de dragées avec leurs proportions ; elles sont
répertoriées dans le tableau suivant :
Saveurs Brocoli Cerise Chocolat Poubelle Savon
Proportion 20% 30% 30% 5% 15%
Compléter la fonction suprise() ci-dessous simulant la prise au hasard d’une dragée dans la
boîte.
from .......... import ..........
def surprise() -> .......... :
nbr = ..........
if nbr <= ..... :
return ...............
elif ............... :
..........................
.................... :
..........................
.................... :
..........................
.......... :
..........................
Exercice 6. [Jeu de hasard] En mangeant négligemment vos dragées goût poubelle, vous êtes
entré dans le casino possédé par la mafia des belettes. Or la consommation de dragées surprises
est strictement prohibée dans le casino. Les belettes vous capturent et vous forcent à programmer
leurs nouvelles machines à sous. Elles veulent que les gains (mises comprises de deux sesterces) et
leurs probabilités se fassent selon le tableau suivant :
Gain −2 0 2 10 100
Probabilité 80% 10% 5% 4% 1%
Programmez une fonction bandit_manchot() satisfaisant les belettes puis sortez du casino.
2
Introduction à Python Introduction aux bibliothèques [Link]
Exercice 7. [Méthode de Monté Carlo] La méthode de Monté Carlo est une technique statis-
tique d’approximation d’aires et de volumes. Elle consiste à générer aléatoirement un grand nombre
de points dans une aire (ou un volume) connue contenant l’aire (ou le volume) dont on souhaite
une estimation, puis à compter compter le nombre de points présents dans l’aire à estimer. Par
exemple, estimons l’aire d’un quart de cercle de rayon 1 à l’aide de la méthode Monté Carlo. Pour
cela, on considère le carré de côté de 1 – lequel contient le quart de cercle – comme ci-dessous et
on génère des points aléatoirement dans ce carré.
b b b
b
b
La probabilité qu’un point généré aléatoirement dans le carré soit en
b
Aq
fait dans le quart de cercle est égale à p = où Aq est l’aire du
b b Ac
quart de cercle et Ac celle du carré. Avec cet exemple, p est calculable,
π π
b
on a Aq = et Ac = 1, donc p = .
b
4 4
En générant aléatoirement un grand nombre de points dans le carré, la proportion de points
présents dans le quart de cercle doit tendre vers la probabilité p :
nombre de points dans le quart de cercle π
→ p = ≃ 0, 785.
nombre de points dans le carré 4
On peut observer que dans le cas ci-dessus, on a sept points sur dix dans le carré, soit une
proportion de 0,7, ce qui est déjà assez proche de 0,785. Il est possible d’augmenter la précision de
cette approximation en augmentant le nombre de points générés aléatoirement.
Remarque : la probabilité p n’est pas calculable en général et c’est tout l’intérêt de la méthode
de Monté Carlo : obtenir une approximation de p pour en déduire une de Aq puisque Aq = p × Ac .
1. À quelle condition un point M (x ; y) ∈ [0 ; 1]2 appartient au quart de cercle ?
2. Compléter la fonction ci-dessous prenant en entrée un nombre de points n, générant aléa-
toirement ces n points dans le carré [0 ; 1]2 , puis renvoyant la proportion de points présents
dans le quart de cerce.
3
Introduction à Python Introduction aux bibliothèques [Link]
from .......... import ..........
def monte_carlo( .................... ) -> .......... :
assert ....................................................
points_quart_cercle = .....
for point in range(n) :
x = ...............
y = ...............
distance = ...............................
if .................... :
points_quart_cercle += .....
return ...............................
3. Tester cette fonction avec divers ordres de grandeurs de points, qu’observe-t-on ?
3 Librairie matplolib
La bibliothèque matplotlib n’est pas une bibliothèque standard Python mais elle est très utilisée
car elle permet de tracer des graphiques. On trouvera ici sa documentation officielle.
Exercice 8.
1. Écrire le code ci-dessous dans l’interpréteur. Que fait-il ?
2. Quelles sont les coordonnées des extrémités de la courbe tracée ?
import [Link] as plt
[Link]([0, 10], [0, 5])
[Link]()
Exercice 9.
1. Modifier le code précédent pour tracer une courbe passant les points de coordonnées (−4 ; 1),
(−3 ; 2), (−1 ; −1), (2 ; 1), (3 ; 1) et (4 ; 2).
2. Qu’observez-vous ?
Exercice 10. Tracer une courbe de la fonction sinus pour x ∈ [−10 ; 10] en plaçant des points tous
les 0,01. Indication : on pourra créer une liste X contenant toutes les abscisses des points à afficher
puis une liste Y contenant toutes les ordonnées et enfin utiliser la commande [Link](X,Y).
Exercice 11. Tracer sur [−10 ; 10] la courbe représentative de la fonction
f : x 7→ x3 − 2x2 − 3x + 4.
On placera 1000 valeurs entre −10 et 10. Légender les axes et la courbe.
4
Introduction à Python Introduction aux bibliothèques [Link]
Exercice 12.
1. Tracer 1000 points générés aléatoirement. L’abscisse et l’ordonnée de ces points sont dans
l’intervalle [−1; 1] avec des valeurs au centième. Indication : on pourra utiliser la fonction
[Link](x,y) pour ne plus tracer une courbe mais uniquement les points.
2. Colorer de différentes couleurs :
— les points d’abscisse et d’ordonnée négatives ;
— les points d’abscisse négative et d’ordonnée positive ;
— les points d’abscisse et d’ordonnée positives ;
— les points d’abscisse positive et d’ordonnée négative.
Indication : on pourra utiliser la fonction [Link](x,y) quatre fois.
Exercice 13. [Monté Carlo, le retour de la vengeance]
Faire une copie de la fonction programmée dans l’exercice 7 et modifier cette copie de façon à ce
que celle-ci affiche le carré, le quart de cercle et les points générés avec une couleur spéciale pour
le quart de cercle.
En utilisant la fonction initiale, mesurer l’erreur commise par la méthode de Monté Carlo par
rapport à l’aire exacte du quart de cercle pour les nombres de points suivants : 10n , n ∈ J1 ; 6K.
Représenter ces erreurs en fonction du nombre de points dans un graphique, à quelle fonction cela
ressemble-t-il ?
Exercice 14. [Cercles et spirales] Écrire un programme traçant des cercles et des spirales à
l’aide des fonctions cos et sin.
Exercice 15. [TVA] Le tableau ci-dessus donne le poids de la TVA relativement aux revenus des
ménages (« taux d’efforts ») par décile de niveau de vie en 2011 en France.
Décile D1 D2 D3 D4 D5 D6 D7 D8 D9 D10
Taux d’effort (en %) 12,5 9,6 9 8,5 8,1 8 7,8 7,7 7,2 4,7
Tracer un histogramme avec légende illustrant ces résultats. Que peut-on en déduire ?
Exercice 16. [Température] Chicago et Rome sont situées à la même latitude. Voici les relevés
des températures moyennes à la mi-journée des deux villes en 2017.
Mois J F M A M J J A S O N D
Rome (en ◦ C) 11 16 18 20 23 28 34 36 25 23 16 12
Chicago (en ◦ F) 32 39 41 57 59 75 82 79 72 57 39 27
Le lien entre degré Celsius et Fahrenheit est donnée par la formule suivante :
5
Å ã
T F =
◦
× T C + 32.
◦
9
1. Sur le même graphique, tracer en rouge la courbe des températures de Rome et en bleu
celle de Chicago.
2. Ajouter une droite bleue et une droite rouge représentant la température annuelle moyenne
respectivement de Chicago et de Rome.
5
Introduction à Python Introduction aux bibliothèques [Link]
Exercice 17. [Dépenses publiques] Le site À quoi servent mes impôts permet de visualiser
comment est reparti l’argent de nos impôts en fonction des différentes dépenses de l’État. Pour
1000e dépensés en 2019, on a la répartition suivante :
Protection sociale : 572e : Recherche : 23e.
— Retraites : 262e ; Administration : 66e.
— Santé : 192e ;
— Famille : 41e ; Charge de la dette : 28e.
— Chômage : 33e ; Éducation : 95e.
— Logement : 15e ; Dépenses sectorielles : 156e :
— Autres : 26e. — Affaires économiques : 58e ;
Régalien : 60e : — Culture : 26e ;
— Défense : 31e ; — Environnement : 17e ;
— Justice : 4e ; — Infrastructures : 8e ;
— Sécurité : 25e. — Transports et équipements : 47e.
Calculer les parts des différents secteurs dans la dépense publique et les représenter dans un
diagramme circulaire légendé.
Exercice 18. [L’impôt, la prestation et le voisin] Sur la même figure, tracer l’histogramme
des pourcentages de prélèvements obligatoires (impôts, taxes, cotisations) et de prestations sociales
en 2017 des pays du tableau ci-dessous. Légender la figure.
Pays France Belgique Allemagne Royaume-Uni Espagne
P.O. (en % de PIB) 46.1 44.5 37.6 33.3 33.7
P.S. (en % de PIB) 34.1 28.8 29.7 26.3 24.3
Exercice 19. [Planche de Galton] Une planche de Galton est une planche verticale sur laquelle
sont disposés des « piquets » sous formes de pyramides comme sur le schéma ci-dessous avec une
pyramide à quatre étages.
u u
u u u
u u u u
6
Introduction à Python Introduction aux bibliothèques [Link]
Les planches de Galton sont faites de façon à ce qu’une bille tombant sur l’un des piquets ait
autant de chances de tomber à gauche qu’à droite. En tombant, elle va nécessairement sur un autre
piquet jusqu’à temps qu’elle ait traversé toute la pyramide. Une fois la pyramide traversée, la bille
tombe dans un des récipients situés en dessous. On peut alors compter le nombre de billes dans
chaque récipient pour déterminer la répartition des billes.
1. Combien de positions finales possibles y a-t-il en fonction du nombre d’étages de la planche ?
2. Quelles sont les positions possibles de la bille après être tombée sur le premier obstacle ?
3. Compléter la fonction galton() ci-dessous simulant la chute d’une bille dans une planche
de Galton de taille quelconque. Elle prendra en entrée le nombre d’étage que traversera la
bille et renverra la position finale de celle-ci.
from .......... import ..........
def galton(nbr_etages : .....) -> ..... :
assert .........................................
# On tombe soit à gauche soit à droite du premier obstacle.
position = randint( ......................................... )
# Parcours des autres étages
for etage in range( .................... ) :
""" On prend un entier au hasard entre 0 et 1 et on part à droite
ou à gauche en fonction du résultat."""
if .......................... :
..........................
else :
..........................
return ...............
4. Simuler la chute de 1000 billes dans la planche de Galton et enregistre le nombre de billes
arrivant dans chacune des positions finales.
5. Afficher le résultat sous forme d’histogramme.
6. Reproduire plusieurs fois l’expérience (en faisant varier le nombre de billes ou la taille de la
planche éventuellement). Qu’en déduisez-vous ?
7
Introduction à Python Introduction aux bibliothèques [Link]
Exercice 20. [Impôt sur le revenu] L’impôt sur le revenu se calcule à partir des revenus annuels
imposables d’une personne avec un fonctionnement par tranches. Des approximations des tranches
et taux d’impositions sont données dans le tableau ci-dessous.
Tranches [0 ; 10000[ [10000 ; 25000[ [25000 ; 75000[ [75000 ; 150000[ [150000 ; +∞[
Taux d’imposition 0% 10% 30% 40% 45%
Exemples :
— Pour un salaire annuel de 9 000e. Le salaire est inférieur à 10 000e donc on est dans la
première tranche ; on est non imposable.
— Pour un salaire annuel de 20 000e. L’erreur est de considérer que l’on est taxé à 10%. Le
salaire imposable est en fait découpé selon les tranches.
0e 10ke 25ke 75ke 150ke
10k 10k
0% 10%
0e 1ke
0e 10ke 25ke 75ke 150ke
Tranches [0 ; 10000[ [10000 ; 25000[
Montant imposable sur la tranche 10000-0=10000 20000-10000=10000
Taux d’imposition 0% 10%
Montant prélevé sur la tranche 10000 × 0% = 0 10000 × 10% = 1000
Pour un salaire annuel de 20 000e, on doit donc payer 1 000e. Cela représente 5% du
salaire annuel et non 10%.
— Considérons un salaire annuel imposable de 120 000e.
0e 10ke 25ke 75ke 150ke
10k 15k 50k 45k
0% 10% 30% 40%
0e 1,5ke 15ke 18ke
0e 10ke 25ke 75ke 150ke
8
Introduction à Python Introduction aux bibliothèques [Link]
120000 = (10000 − 0) + (25000 − 10000) + (75000 − 25000) + (120000 − 75000)
= 10000
| {z } + |15000
{z } + |50000
{z } + |45000
{z } .
tranche 1 tranche 2 tranche 3 tranche 4
Le montant à prélever est alors calculé comme suit :
10000 × 0% + 15000 × 10% + 50000 × 30% + 45000 × 40 = 34500,
soit un taux d’imposition réel de 28,75% et un salaire net d’impôt de 85 500.
1. Écrire un programme permettant de calculer le montant des impôts sur le revenu, le taux
d’imposition réel associé et les revenus restants après imposition pour un salaire annuel
quelconque, des tranches d’impositions quelconques et des taux d’impositions par tranches
quelconques.
2. Sur deux graphiques différents, afficher pour des salaires annuels allant de 5 000e à 1 000 000e
en augmentant de 5 000 en 5 000 :
(a) le montant prélevé et le montant restant après prélèvement ;
(b) le taux d’imposition réel.
3. Reproduire l’expérience en changeant (à votre convenance) les tranches (nombres et bornes)
et leurs taux d’impositions. On pourra notamment expérimenter la dernière tranche à 0%
et 100%.