403 : Python Bases - Listes
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
notes = [12, 15, 8, 11]
print(notes)
Pour obtenir le nombre d'éléments de la liste
nb = len(notes)
print(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
somNotes = 0 # initialisation à 0 de la variable cumul
for note in notes:
# addition à chaque itération de chaque note à la variable cumul
somNotes +=note # même chose que somNotes = somNotes + note
print(somNotes) # la somme est affichée après chaque note cumulée
Question
Calculer la moyenne en divisant la variable cumul par le nombre de notes : équivalent tableur de la fonction MOYENNE
Solution
moyenne = somNotes / nb
print(moyenne)
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 minimum
print(min)
Solution
min = 20
for note in notes :
if note<min : min=note
print(min)
Question
Calculer la note maximum : équivalent tableur de la fonction MAX
Solution
max = 0
for note in notes :
if note>max : max=note
print(max)
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é juste
Question
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
i=1
j=3
print(liste[i],liste[j])
Pour créer une liste que nous allons utiliser comme itérateur de la boucle for, il faut essayer l'instruction ci-dessous
print(range(0,6))
Pour parcourir la liste des notes, on peut donc procéder comme suit
for i in range(0,len(notes)):
note = notes[i]
print(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
for i in range(0,len(notes)):
note = notes[i]
coef=coef[i]
print(note,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
somProd=0
for i in range(0,len(notes)):
note = notes[i]
coef=coef[i]
somProd+=note * coef
print(somProd)
Remarque :
somProd+=note * coef est la même chose que somProd = somProd + note * coef
Question
Calculer la moyenne pondérée
Solution
somProd = 0
somCoefs = 0
for i in range(0,len(notes)):
note = notes[i]
coef=coef[i]
somProd+=note * coef
somCoefs+=coef
moyPond = somProd/somCoefs
print("La moyenne est",moyPond)
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.