Exercice : 403 : Python Bases - Listes
Objectifs
Concepts clés abordés
Listes : création, affichage, longueur (
len()).Parcours : boucle
forpour itérer sur les éléments.Agrégats : somme et moyenne des valeurs (approche manuelle puis fonctions natives
sum()).Extrêmes : recherche du minimum et du maximum (logique algorithmique puis fonctions
min()/max()).Alignement de listes : utilisation des indices pour associer notes et coefficients en vue d'une moyenne pondérée.
Les listes
Vous avez obtenu 4 notes : 12, 15, 8, 11
Pour calculer la moyenne, vous faites la somme des 4 notes divisé par 4.
Avec le tableur, la fonction moyenne de la plage qui contient les 4 notes serait cohérent. On pourrait aussi envisager de calculer pour chaque note de i à n la moyenne des i premières notes.

En programmation, l'équivalent de la recopie vers le bas d'une formule tableur se traduit par la mise en place d'une boucle qui serait ici fixée à 4 itérations.
Pour stocker l'équivalent de la colonne Note, nous allons utiliser un objet de type liste
# Déclaration d'une liste de notesnotes = [12, 15, 8, 11]
print(f"Notes : {notes}")
Pour obtenir le nombre d'éléments de la liste
# Obtenir le nombre d'élémentsnb = len(notes)
print(f"Nombre de notes : {nb}")
Parcourir la liste en affichant chaque note
for note in notes:
print(note)
Pour en faire le cumul : équivalent TABLEUR de la fonction SOMME
# Méthode 1 : Cumul manuel avec bouclesomNotes = 0 # Initialisation à 0 de la variable cumul
for note in notes:
# Addition à chaque itération de chaque notesomNotes += note # Équivaut à : somNotes = somNotes + note
print(f"Cumul après ajout de {note} : {somNotes}")
print(f"\nSomme totale : {somNotes}")
# Méthode 2 : Utilisation de la fonction sum() (plus pythonique)somNotes_v2 = sum(notes)
print(f"Somme avec sum() : {somNotes_v2}")
Question
Calculer la moyenne en divisant la variable cumul par le nombre de notes : équivalent tableur de la fonction MOYENNE
Solution
# Méthode 1 : Calcul manuelmoyenne = somNotes / nb
print(f"Moyenne : {moyenne:.2f}")
# Méthode 2 : Plus pythoniquemoyenne_v2 = sum(notes) / len(notes)
print(f"Moyenne (version 2) : {moyenne_v2:.2f}")
Question
Calculer la note minimum en complétant le code initial : équivalent tableur de la fonction MIN
min = 20 # initialisation de la valeur du minimum à 20 -> la première note sera forcément plus petite
for note in notes :
# chaque note plus basse que le minimum temporaire (min) devient le minimumprint(min)
Solution
# Méthode 1 : Recherche manuelle du minimummin_note = 20 # Initialisation à une valeur supérieure au max possible
for note in notes:
if note < min_note:
min_note = note
print(f"Note minimum (méthode 1) : {min_note}")
# Méthode 2 : Utilisation de la fonction min() (recommandé)min_note_v2 = min(notes)
print(f"Note minimum (méthode 2) : {min_note_v2}")
Question
Calculer la note maximum : équivalent tableur de la fonction MAX
Solution
# Méthode 1 : Recherche manuelle du maximummax_note = 0 # Initialisation à une valeur inférieure au min possible
for note in notes:
if note > max_note:
max_note = note
print(f"Note maximum (méthode 1) : {max_note}")
# Méthode 2 : Utilisation de la fonction max() (recommandé)max_note_v2 = max(notes)
print(f"Note maximum (méthode 2) : {max_note_v2}")
Indices des éléments ou rang ou index
Nous allons maintenant ajouter à chaque note un coefficient : les coefficients seront gérés dans une deuxième liste indépendante de la liste note. Le liant entre les 2 listes est le rang qui permet de savoir quel coefficient est affecté à chaque note
Question
Initialiser une liste nommée coef composée de 4 éléments tous égaux à 1.
Ils sont fixés 1 de façon à ce que la moyenne coefficientée que nous allons calculer soit identique à celle que nous avons calculée sans coefficients.
Solution
coefs = [1,1,1,1]
#coefs = [2,1,3,4] à utiliser lorsque le calcul de la moyenne coefficientée sera jugé justeQuestion
Calculer la somme des éléments de la liste coef : Pou rappel, le traitement est exactement le même que la somme des notes, seule le nom de la liste diffère.
Le résultat affiché doit bien sûr être de 4
Solution
somCoefs = 0 # initialisation à 0 de la variable cumul
for coef in coefs:
# addition à chaque itération de chaque note à la variable cumul somCoefs +=coef # même chose que somCoefs = somCoefs + coef
print(somCoefs) # la somme est affichée après chaque coef cumulé
Somme de produits : équivalent TABLEUR de la fonction SOMMEPROD
Calculer la somme des produits des listes notes et coef : Analyse du problème
Dans ce cas, comme la boucle principale permet d'afficher chaque note de la liste notes avec l'itérateur note, il faut pouvoir accéder au coefficient de la note à chaque itération
Nous allons donc utiliser un itérateur indice dont la valeur changera à chaque itération de 0 à 3 (pour nos 4 notes ou le nombre d'éléments de notre liste)
Pour accéder à l'élément i de la liste notes il faut utiliser la notation liste[indice] --> indice peut être appelé rang ou index
# Accès par index (commence à 0)i = 1 # Deuxième élément
j = 3 # Quatrième élément
print(f"Note à l'index {i} : {notes[i]}")
print(f"Note à l'index {j} : {notes[j]}")
print(f"notes[{i}] = {notes[i]}, notes[{j}] = {notes[j]}")
Pour créer une liste que nous allons utiliser comme itérateur de la boucle for, il faut essayer l'instruction ci-dessous
# range() génère une séquence de nombresprint(f"range(0,6) : {range(0,6)}") # Objet range
print(f"Liste des indices : {list(range(0,6))}") # [0, 1, 2, 3, 4, 5]
Pour parcourir la liste des notes, on peut donc procéder comme suit
# Parcours avec index explicitefor i in range(0, len(notes)):
note = notes[i]
print(f"Index {i} : note = {note}")
Il est vrai que c'est un peu plus long que le code précédent
for note in notes:
print(note)
Mais dans ce code plus court, nous ne connaissons que la valeur de la note, pas sa position dans la liste. Or, il nous faut pour chaque note accéder à son coefficient qui se trouve au même rang que la note dans sa propre liste (coefs)
Pour afficher à chaque itération la note et son coef nous aurons donc
# Méthode 1 : Avec range() et indexfor i in range(0, len(notes)):
note = notes[i]
coef = coefs[i] # CORRECTION : coefs au lieu de coef
print(f"Note {i+1} : {note} (coef: {coef})")
# Méthode 2 : Avec enumerate() (plus pythonique)print("\nAvec enumerate() :")
for i, note in enumerate(notes):
coef = coefs[i]
print(f"Note {i+1} : {note} (coef: {coef})")
# Méthode 3 : Avec zip() (le plus élégant)print("\nAvec zip() :")
for note, coef in zip(notes, coefs):
print(f"Note : {note} (coef: {coef})")
Question
Compléter le code ci-dessus en ajoutant une variable cumul nommée somProd initialisée à 0
A chaque itération (dans la boucle for après avoir lu les variables note et coef de chaque itération ou rang i), ajouter à somProd le produit note * coef
Afficher somProd à chaque itération pour visualiser le cumul de manière progressive (ou après chaque note lue)
Changer votre liste de coefs avec coefs=coefs = [2,1,3,4] pour vérifier que votre cumul à la fin est bien de 12*2 + 15*1 + 8*3 + 11*4 = 107
Solution
# Somme des produits notes × coefficientssomProd = 0
for i in range(0, len(notes)):
note = notes[i]
coef = coefs[i] # CORRECTION : coefs au lieu de coef
somProd += note * coef
print(f"Cumul après note {note}×{coef} : {somProd}")
print(f"\nSomme pondérée totale : {somProd}")
# Alternative pythonique avec sum() et zip()somProd_v2 = sum(n * c for n, c in zip(notes, coefs))
print(f"Somme pondérée (version 2) : {somProd_v2}")
Remarque :
somProd+=note * coef est la même chose que somProd = somProd + note * coef
Question
Calculer la moyenne pondérée
Solution
# Méthode 1 : Calcul manuel de la moyenne pondéréesomProd = 0
somCoefs = 0
for i in range(0, len(notes)):
note = notes[i]
coef = coefs[i] # CORRECTION : coefs au lieu de coef
somProd += note * coef
somCoefs += coef
moyPond = somProd / somCoefs
print(f"Moyenne pondérée : {moyPond:.2f}")
# Méthode 2 : Version pythonique avec compréhensionsmoyPond_v2 = sum(n * c for n, c in zip(notes, coefs)) / sum(coefs)
print(f"Moyenne pondérée (version 2) : {moyPond_v2:.2f}")
# Affichage détaillé du calculprint(f"\nDétail : ({' + '.join(f'{n}×{c}' for n, c in zip(notes, coefs))}) / {sum(coefs)}")
CONCLUSION
Résumé : l'étude conjointe de la boucle avec les listes permettra de mieux comprendre comment manipuler d'autres objets très utiles comme les fichiers, les dictionnaires, ou les bases de données.
A savoir : les listes sont initialisées avec des valeurs constantes en début de programme. Les méthodes append, remove, count, index ou les fonctions len et del permettent d'interagir sur les éléments de la liste.
Pour la suite, ce qui nous intéresse principalement est de lire des données dans un fichier CSV structurant les données en (ligne-colonne) afin d'extraire les colonnes de tableur en les mémorisant dans des listes. Comme on s'approche d'une gestion de type “base de données”, il sera obligatoire que toutes les données stockées dans les colonnes soient toutes de même type.