
Le but de ce projet est de convertir un score PIX sur une note sur 20.
Etape 1:
- établir une fonction moyenne
- déterminer le score max et le score min
- stocker le score, nom et notes des élèves
Les élèves sur PIX ont des notes variant entre 0 et 700, mais réparties de manière inégale autour d'un score moyen. La note de l'élève sera calculée par une fonction linéaire à partir de son score et de la moyenne.
Etablir une fonction moyenne
Il existe 2 fonctions afin d'établir une fonction moyenne, les fonctions sum() et len().
On définit ici la fonction score_moyen avec le paramètre liste.
On définit ensuite une boucle for qui va lire les scores dans la liste.
sum : somme
len : longueur

Déterminer le score max et le score min
* Il existe 2 possibilités afin de déterminer un score maximal et minimal sur python.
* Ici, nous utiliserons 2 fonctions, score_max ainsi que score_min.
Je définis alors les 2 fonctions dites précédemment ( score_max score_min ) avec l'ajout d'un nouveau paramètre " liste " qui ,comme son nom l'indique, représente une liste.
* J'attribue une variable qui prendra le premier terme de la liste et créer une boucle for qui va lire tous les scores de celle-ci.
En suite, la fonction va renvoyer le minimum ou le maximum en fonction des cas avec la fonction " return ".

min
Stocker les informations des élèves
Pour poursuivre mon programme, je vais créer 3 listes qui seront d'abord vide au lancement du script.
eleves_prénoms = []
eleves_score = []
eleves_notes = []

Calcul des notes des élèves
Nous pouvons utiliser à l'aide des égalités trouvées en classe les notes des élèves.
rappel : Note = a * score + b 20 = a * score_max + b moyenne_choisie = a * score_moyen + b

Revoir les expressions de a et b
* Après avoir trouver a et b , je détermine une fonction que je vais nommée " calcul " . Les variables a et b seront attribuées aux égalités trouvées précédemment.
* J'effectue une boucle for pour tous les scores des élèves.
* J'utilise la fonction round afin d'obtenir des notes arrondis à un chiffre après la virgule. Ces notes seront alors mises dans la liste " eleves_notes ".

ou

Importer un fichier CSV sous Python

Pour importer un fichier CSV sous Python, il nous faut utiliser la fonction de reader.
On ouvre le fichier comportant les collectes des scores PIX par la fonction open().
On lit ensuite la première ligne avec fichier.readline() et on récupère tous les éléments de la première ligne.
Je fais une boucle for afin de lire chaque ligne dans le fichier.
Les points virgules signifient que c'est une nouvelle colonne ( strip() , split() )
​
Dans la liste eleves_prenoms --> colonne de rang 4 ( correspond aux prénoms )
Dans la liste eleves_scores --> colonne de rang 8 ( correspond aux scores )
append
Je finis par fermer le fichier avec fichier.close()
Tracer un graphique
Pour tracer un graphique, il faut utiliser " matplotlib.pyplot " que l'on va appeler plt.
Programme python final
import matplotlib.pyplot as plt #graphique
import numpy as np
eleves_prenoms=["Maxence","Dina","Enzo","Fantine","Gabin","Leo","Lilian","Mathis","Melvyn","Salma","Lila","Joseph","Alexandre","Lilou"]
eleves_scores=[303,480,600,312,378,473,288,"301",371,230,149,265,243,236]
eleves_notes=[]
fichier = open("Resultats-NSI 1_re Collecter.csv.csv",encoding="utf8")
ligne = fichier.readline() #lire la première ligne
elements = ligne.strip().split(";") #nouvelle colonne
print("elements=",elements)
Liste_x=[]
Liste_y=[]
for ligne in fichier:
elements = ligne.strip().split(";")
Liste_x.append(elements[4])
Liste_y.append(int(elements[8]))
fichier.close()
def score_min(liste):
min=liste[0]
for score in liste:
if score < min:
min = score
return min
def score_max(liste):
max=liste[0]
for score in liste:
if score > max:
max = score
return max
score_min=min(Liste_y)
score_max=max(Liste_y)
def moyenne(liste=[]) :
somme=0
nb_elements=0
for valeur in liste:
somme=somme+valeur
nb_elements=nb_elements+1
return moyenne
moyenne = moyenne(Liste_y)
print(moyenne)
notemoyenne=int(input("Choississez la note moyenne"))
b = (20-Notemoyenne*maximum/moyenne)/(1-maximum/moyenne)
a=(Notemoyenne-b)/moyenne
Notes=[round(a*score +b,1) for score in Liste_y]
Dictionnaire_note_eleve = dict(zip(Liste_x, Notes))
print(Dictionnaire_note_eleve)
for keys,values in Dictionnaire_note_eleve.items():
print(keys)
print(values)
def tracer_figure(liste1,liste2):
plt.figure(figsize = (16, 10))
plt.plot(liste1,liste2,'bs', label='Nom Elève versus Score PIX',marker='o')
plt.xlabel('Nom Elève')
plt.xticks(np.arange(0,len(liste1)), liste1, rotation = 60)
plt.ylabel('Score PIX')
plt.title("Nom Elève versus Score PIX")
plt.legend()
plt.grid(True)
plt.show()
if __name__=="__main__":
tracer_figure(Liste_x,Liste_y)
tracer_figure(Liste_x,Notes)