Représentation graphique
Dans cette leçon nous allons créer un graphique pour observer certaines propriétés des entiers inférieurs à 100.
Nous avons déjà utilisé plusieurs modules, et Python en possède par défaut un certain nombre,
comme les modules math et random. Il est également possible de créer
ses propres modules pour étendre les fonctionnalités de base. Un ensemble de modules autour
d'une fonctionnalité centrale forment une librairie.
Par exemple matplotlib est une librairie qui apporte tout ce qu'il faut pour faire des graphiques en Python. En temps normal les librairies doivent être installées avant d'être utilisées, mais ici l'environnement est conçu pour faire ça automatiquement.
- 1
Sur la première ligne de l'éditeur il y a un nouveau mot clé
as. Il permet de donner un nom (plus court) à ce que l'on importe, un alias.Par exemple je peux faire
import random as rpour donner l'aliasrau modulerandom. Je peux alors appeler la fonctionrandintde ce module en faisantr.randint(1,6)pour générer un entier aléatoire entre 1 et 6.La notation avec un point ressemble beaucoup aux méthodes. Normal, du point de vue de Python, c'est pareil !
randintest une fonction du modulerandomet comme j'ai importé l'ensemble du module sous l'aliasr, pour utiliser cette fonction je dois fairer.randintLa première ligne de l'éditeur importe le module
pyplotde la librairie matplotlib et lui donne l'aliasplt. On utilise couramment cet alias. Pour utiliser un sous-module spécifique d'une librairie on utilise un point entre les deux comme dansmatplotlib.pyplotpuisquepyplotexiste à l'intérieur de matplotlib.Faisons un premier exemple de graphique avec un nuage de points. Pour représenter un nuage de points, il nous faut la liste de leurs abscisses et la liste de leurs ordonnées. Par exemple
X = [1, 2, 3] # les abscisses Y = [-1, 10, 5] # les ordonnéesEnsuite il faut demander à matplotlib de générer un graphique, et de l'afficher. Tu as l'habitude que l'affichage ne soit pas automatique. Ici c'est pareil il nous faut deux instructions :
plt.plot(X, Y, 'ro') plt.show()La fonction
plotdu modulepyplotconstruit le graphique desYen fonction deX. L'option'ro'contient deux lettres, la première pour la couleurredet la seconde pour la forme des points. Donc on a des ronds rouges.Ajoute le code précédent dans l'éditeur pour représenter un nuage de points, puis exécute le code. Lorsque c'est fait tu peux observer ton graphique en cliquant sur le bouton
Solution
Il nous faut une liste d'abscisses, une liste d'ordonnées, et les instructions pour construire le graphique et l'afficher :
import matplotlib.pyplot as plt X = [1, 2, 3] Y = [-1, 10, 5] plt.plot(X, Y, 'ro') plt.show() - 2
À présent voyons une nouvelle opération en Python, le modulo. Cette opération nous permet de déterminer le reste d'une division euclidienne. Son symbole est
%Par exemple le reste de la division euclidienne de 16 par 5 est 1 car . Vérifions dans la console :
>>> 16 % 5 1Le calcul précédent se lit "16 modulo 5 égale 1".
Quel est le reste de la division euclidienne de 23 par 5 ? Vérifie dans la console en faisant un calcul
Solution
Le reste de la division euclidienne de 23 par 5 est 3 car . Vérifions dans la console :
>>> 23 % 5 3 - 3
On souhaite déterminer le nombre de diviseurs d'un entier. Pour t'aider, j'ai ajouté le début du code d'une fonction
nb_diviseurs. Elle prend un entiernen argument, et initialise un compteur à zéro. On veut incrémenter ce compteur pour chaque diviseur denPour ce faire une boucle for parcourt tous les nombres de 1 à n. Mais cette boucle ne fait rien. Tu peux observer le mot clé
pass.Supprime le mot clé
passet fini de coder la fonctionnb_diviseursen ajoutant une instruction conditionnelle : sinest divisible parialors incrémente le compteur de 1. Indice : tu peux utiliser le modulo pour tester la divisibilité.Solution
nest divisible parilorsque le reste de la division euclidienne denpariest 0. Donc la condition à vérifier estn % i == 0Si la condition est vraie on incrémente
compteurde 1. Sinon on ne fait rienimport matplotlib.pyplot as plt def nb_diviseurs(n): compteur = 0 for i in range(1, n+1): if n % i == 0: compteur = compteur + 1 return compteur - 4
Combien de diviseurs possède un nombre premier ? Vérifie que ta fonction
nb_diviseursfonctionne bien en l'appelant dans la console sur de petits nombres premiers.Solution
Par exemple :
>>> nb_diviseurs(5) 2 - 5
On va représenter graphiquement le nombre de diviseurs des entiers inférieurs à 100.
Il nous faut deux listes. Pour les abscisses on prend les entiers de 1 à 100. Pour les ordonnées, on prend la liste de leurs images par
nb_diviseurs.Pour la liste des abscisses on pourrait faire
X = [i for i in range(1,101)]mais il y a plus simple. La fonctionlistpermet de convertir une séquence obtenue avecrangeen une liste. Par exemple :>>> list(range(3)) [0, 1, 2]Essaie dans la console pour t'en convaincre. Ensuite défini de cette manière une variable
Xdans l'éditeur qui contient tous les entiers de 1 à 100 inclus.Pour les ordonnées, il nous faut les images des entiers de la liste
Xpar la fonctionnb_diviseurs. Défini une listeYen compréhension qui contient le nombre de diviseurs de chaque élément deXSolution
La liste
Xs'obtient en convertissant la séquencerange(1,101)à l'aide de la fonctionlist.La liste
Ys'obtient en compréhension : on appliquenb_diviseursà chaque élément deX:import matplotlib.pyplot as plt def nb_diviseurs(n): compteur = 0 for i in range(1, n+1): if n % i == 0: compteur = compteur + 1 return compteur X = list(range(1, 101)) Y = [nb_diviseurs(x) for x in X] - 6
Il ne reste plus qu'à représenter ce nuage de point !
Ajoute le code nécessaire pour générer le graphique des
Yen fonction desXà l'aide du modulepyplotSolution
Comme à la question 1 il nous reste à appeler les fonctions
plotetshowdu modulepyplot. Utilisons l'option'b.'pour avoir des points bleus :import matplotlib.pyplot as plt def nb_diviseurs(n): compteur = 0 for i in range(1, n+1): if n % i == 0: compteur = compteur + 1 return compteur X = list(range(1, 101)) Y = [nb_diviseurs(x) for x in X] plt.plot(X, Y, 'b.') plt.show()
pyplot, comment faire un calcul de modulo, et
comment utiliser la fonction list pour convertir !