Skip to content

NSI - Première - Projet : algorithmes de parcours séquentiel d’un tableau

Travail demandé

Cahier des charges

On dispose d'un jeu de données correspondant aux résultats de 4 élèves en spécialité NSI:

# noms des élèves concernés
noms = ["Aucardetour", "Amarre", "Auchon", "Fonfec"]
# devoir 1
ds1 = [12.5, 15.0, 9.5, 12.5] 
# devoir 2
ds2 = [13.5, 15.0,  7.5, 13.5] 
On vous propose de concevoir un logiciel qui permet de traiter ces résultats.

Le logiciel doit permettre de calculer ou déterminer et d'afficher:

  • la moyenne d'un devoir ( moyenne des notes du ds1 par exemple ) ,
  • la note la plus haute et la note plus basse d'un devoir (ds),
  • le nombre d'occurrences d'une note pour un devoir, par exemple le nombre d'occurrences de la note 12.5 au ds1 est le nombre de notes qui sont égales à 12.5 pour le ds1 ce serait égal à 2 ( 2 élèves ont obtenu 12.5 au ds1)
  • la moyenne d'une des personnes (c'est la position dans la liste qui permet de faire l'association entre les personnes et les ds, par exemple "Amarre" a obtenu 15 au ds1 et 15 au ds2 ).

Vous devrez définir des fonctions pour chaque fonctionnalité par exemple:

o calcul_moyenne_ds( ds:list ) -> float

La fonction calcul_moyenne_ds prend en argument une liste de notes associée à la variable ds et elle renvoie la moyenne des notes de cette liste.

Exemples d'utilisation de la fonction:

moyenne_ds1 = calcul_moyenne_ds(ds1)
print( "la moyenne du ds1 est:", moyenne_ds1)
moyenne_ds2 = calcul_moyenne_ds(ds2)
print( "la moyenne du ds2 est:", moyenne_ds2)
o extremum_minimum_ds(ds:list) -> tuple

La fonction extremum_minimum prend en argument une liste de notes associée à la variable ds et elle renvoie un tuple avec la plus petite des notes et la plus grande des notes obtenues au devoir.

Exemples d'utilisation:

min_ds1, max_ds1 = extremum_minimum_ds(ds1)
print( f"la plus petite note du ds1 est: {min_ds1} et la plus grande {max_ds1}")
min_ds2, max_ds2 = extremum_minimum_ds(ds2)
print( f"la plus petite note du ds2 est: {min_ds2} et la plus grande {max_ds2}")
o nombre_occurences_ds( ds:list, note:float ) -> int

La fonction nombre_occurences_ds prend en arguments une liste de notes associée à la variable ds et une note entre 0 et 20 associée à la variable note, la fonction renvoie le nombre d'occurrences de cette note si elle est présente ou 0 si la note n'est pas dans la liste.

Exemples d'utilisation:

n = nombre_occurences_ds( ds1,13)
print( "le nombre de notes égales à 13 à ds1 est:", n )
n2 = nombre_occurences_ds( ds2,15)
print( "le nombre de notes égales à 15 à ds2 est:", n2 )

o calcul_moyenne_personne(nom:string, ds1:list, ds2:list) -> any

La fonction calcul_moyenne_personne prend trois arguments, le nom d'une personne associée à la variable nom, une liste de notes associée à la variable ds1 et une liste de notes associée à la variable ds2, la fonction calcule et renvoie la moyenne de cette personne si elle existe ou None si la personne n'est pas présente dans la liste associée à la variable nom.

Exemple d'utilisation:

moyenne = calcul_moyenne_personne("Aucardetour", ds1, ds2)
if moyenne is not None:
    print( f"la moyenne de {nom} est: {moyenne}")
else:
    print( f"{nom} n'a pas participé à ces devoirs")

Répartition des tâches

Partie 1:

  • Chaque membre du groupe codera la définition de deux fonctions:

Membre1: calcul_moyenne_personne et extremum_minimum_ds
Membre2: nombre_occurences_ds et calcul_moyenne_ds

  • Vous réaliserez un dossier avec l'explication du code.
  • Vous vérifierez que votre code est correct avec des pré-conditions et des post-conditions (voir le chapitre ressources si nécessaire ), cet ensemble de test devra figurer dans votre dossier.

Partie 2:

  • Vous modifierez le code pour le rendre interactif, l'utilisateur pourra ajouter des personnes à la liste des noms et ajouter les notes correspondantes aux devoirs ds1 et ds2. Il pourra choisir la personne dont on calcule la moyenne, choisir la note et le devoir dont on cherche le nombre d'occurrences.

Exemple:

# ici le nom est demandé à l'utilisateur du logiciel 
nom = input("Entrez le nom de la personne: \n")
moyenne = calcul_moyenne_personne(nom, ds1, ds2)
if moyenne is not None:
    print( f"la moyenne de {nom} est: {moyenne}")
else:
    print( f"{nom} n'a pas participé à ces devoirs")
  • La présence d'interativité dans cette partie oblige à modifier le code de vos fonctions et à ajouter une programmation défensive ( vérification du type et de la plage de valeurs des données, gestion d'exception).

Partie 3:

On vous demande de rendre votre logiciel plus performant en remplaçant le jeu de données actuels (3 listes) par un dictionnaire dont les clés seront les personnes et la valeur associée à la clé sera les notes placées dans une liste:

notes_élèves = { ["Aucardetour": [12.5, 13.5], "Amarre": [ 15, 15 ], etc..    }
  • Ecrire des nouvelles versions de vos fonctions qui prennent en compte le changement de structure ( passage de liste à dictionnaire). L'utilisateur pourra ajouter des personnes et des notes au dictionnaire.

Partie 4:

Si vous êtes en avance, concevoir une version avec IHM en utilisant la bibliothèque Tkinter.