top of page

Projet 1 - Notation PIX

L'objectif de ce projet est de convertir un score PIX en une note sur 20.

Pour cela, nous avons 2 étapes :

étape 1 : - établir une fonction pour calculer la moyenne

- déterminer le score maximal et le score minimal

- stocker le nom, le score puis les notes des élèves

étape 2 : - importer les scores d'un fichier csv

- tracer 2 graphiques pour représenter les scores et les notes en fonction des prénoms

Accéder au script du projet

Établir une fonction pour calculer la moyenne
fonction moyenne.PNG

Il y a 2 possibilités pour effectuer la fonction, on peut utiliser 2 fonctions qui sont natives à Python (les fonctions sum() et len(). Mais, on peut aussi l'écrire à la main.

Sur la photo ci-contre, on voit que je définis la fonction average_score avec comme paramètre list, qui désigne une liste. Je déclare 2 variables (sum et len) à l'intérieur de la fonction qui me serviront par la suite. Je déclare ensuite une boucle for qui va lire tous les scores qui sont dans la liste. Puis, j'assigne à la variable sum que je veux additionner le contenu actuel de la variable avec le score i qui arrive. Je fais pratiquement la même chose avec la variable len qui me servira à dire le nombre de scores qu'il y a à calculer. Pour finir, je divise mes 2 variables pour obtenir la moyenne.

source : https://fr.acervolima.com/trouver-la-moyenne-dune-liste-en-python/

Déterminer le score maximal et minimal

Pour les fonctions pour déterminer un score max et un score min, il y a également 2 possibilités pour effectuer les fonctions, on peut utiliser les 2 fonctions natives à Python, min() et max().

On peut aussi le faire à la main, comme sur la photo ci-contre, je commence par définir 2 fonctions maximum_score et minimum_score avec à chaque fois le paramètre list qui représente une liste. Je vais à chaque fois définir une variable qui prend le premier terme de la liste qu'on lui donne comme argument. Ensuite, je vais faire une boucle for qui va lire tous les scores qui sont dans la liste et si le score que la boucle est en train de lire est plus petit ou plus grand que l'actuel présent dans la variable, il va alors attribuer ce score à la variable. Une fois que la boucle à terminer de lire la liste, la fonction va renvoyer selon les cas, le min ou le max.

source : https://emilypython.wordpress.com/2018/11/06/listes-de-nombres-en-python-maximum-et-minimum/

fonctions max et min.PNG
Stocker les informations des élèves
liste.jpg

Pour pouvoir stocker toutes les informations liées aux élèves, j'ai crée 3 listes qui se nomme students_name, students_scores et students_marks. Ces 3 listes sont au lancement du script vides.

Calculer les notes des élèves
fonction maths.jpg

Pour pouvoir calculer les notes des élèves, il faut tout d'abord avoir des expressions, des égalités, à résoudre. Nous avons en classe résolu des égalités : Note = a * score + b      20 = a * score_max + b      moyenne_choisie = a * score_moyen + b

De ces équations, on peut isoler a et b, ce qui donne :

20 - a * score_max + b                                                            

moyenne_choisie = a * score_moyen + 20 - a * score_max

moyenne_choisie - 20 = a (score_moyen - score_max)

a = (moyenne_choisie - 20) / (score_moyen - score_max)

20 = ((moyenne_choisie - 20) / (score_moyen - score_max)) * score_max + b

b = 20 - (moyenne_choisie - 20) / (score_moyen - score_max) * score_max

Une fois les a et b trouver, il suffit de créer la fonction, j'ai donc créer une fonction maths() qui ne prend pas de paramètres, j'ai attribuer au variables a et b, les expressions que je viens de noter puis je vais effectuer une boucle for parmi tous les scores des élèves. Chaque score qui va être trouver va être mis dans une variable nommé mark qui va effectuer la première équation que l'on a écrite, puis, je vais mettre ces notes dans la liste students_marks en disant avec la fonction __round__ que je veux que ces notes avant d’être mise dans la liste soient arrondis à un chiffre après le virgule.

Importer des informations d'un fichier csv

Afin d'importer les prénoms et les scores d'un fichier csv, il n'y a pas besoin d'avoir de librairies, j'ai donc créer une fonction read() sans paramètres, qui va dans une variable file ouvrir le fichier csv 'données.csv' et dire que le fichier est encoder en UTF8 afin d'avoir les accents des prénoms. Je vais ensuite dans une autre variable, appelée line lire la première ligne du fichier. Ensuite, je vais faire une boucle for pour lire chaque ligne dans le fichier. En premier je vais dans une variable elements dire que dans chaque ligne, dès qu'il y a un point virgule, c'est une nouvelle colonne. Je fais ça grâce aux fonctions strip() et split(). Ensuite, je vais inserer dans les listes que je souhaite, les données que je demande. Dans la liste students_name, je vais mettre la colonne de rang 4, qui correspond aux prénoms. Puis, dans la liste students_scores, je vais mettre les scores qui sont dans la colonne de rang 8. Je vais aussi spécifier que les scores sont des nombres entiers pour pouvoir effectuer les calculs nécessaires. Pour finir, je vais fermer le fichier csv pour économiser la RAM de l'ordinateur.

source : https://specialite-isn.webnode.fr/snt/

fonction read.jpg
Tracer des graphiques
fonction graphical.jpg
import graphique.jpg

Pour pouvoir tracer des graphiques, il faut importer une librairie qui se somme matplotlib.pyplot que l'on va appeler plt, je dis aussi que j'utilise un certain mode de cette librairie pour éviter tous soucis ultérieur. Avant de faire les graphiques, je vais déclarer 2 petites variables pour éviter de recopier trop de lignes de code entre les 2 graphiques, la variable ticks permet de mettre les noms des élèves sur l'axe des abscisses, ce que je fais est de dire que chaque prénom est à cette position dans la liste afin de les positionner au mieux sur le graphique. Ensuite, la variable figsize est 2 valeurs entières qui vont donner la taille des graphiques.

Je vais décrire le fonctionnement d'un des 2 graphiques, les 2 sont similaires, tout d'abord, je donne la taille du graphique que je souhaite avec la fonction figure() avec le paramètre figsize. Après, je vais avec la fonction plot() dire quelles sont les données que je souhaite, je vais passer plusieurs paramètres, le premier est ma liste, le second est pour avoir des + afin de situer la donnée, le troisième permet de ne pas relier les points entre eux, et le dernier me fais passer la couleur à bleu. La fonction xticks() permet de mettre les données que je souhaite pour l'axe des abscisses, je donne avec ma variable ticks la place des éléments à mettre, le texte à afficher et de quel façon les textes se tournent. Ensuite, les fonctions xlabel(), ylabel() et title() permettent de mettre des titres aux 2 axes et au graphique. Pour finir, j'affiche le graphique avec le paramètre block sur True pour éviter qu'il ne ferme tous de suite après, et enfin, je ferme le graphique quand l'utilisateur veut le faire.

sources : https://stackoverflow.com/questions/58814857/conversionerror-failed-to-convert-values-to-axis-units    https://specialite-isn.webnode.fr/snt/

Faire fonctionner le script
fonctionnement.jpg

Ces 4 lignes ne sont pas dans une fonction afin que lorsque je lance le programme, elles s'effectuent d'elles mêmes. La première ligne me permet grâce à un input() de demander la moyenne souhaitée, je vais tous de suite la transformer en un nombre entier. Les 3 dernières lignes permettent de bon fonctionnement du programme et de toutes ces taches.

bottom of page