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

1
notes = [12, 15, 8, 11]
2
print(notes)

Pour obtenir le nombre d'éléments de la liste

1
nb = len(notes)
2
print(nb)

Parcourir la liste en affichant chaque note

1
for note in notes: 
2
    print(note)
3

Pour en faire le cumul : équivalent TABLEUR de la fonction SOMME

1
somNotes = 0 # initialisation à 0 de la variable cumul
2
for note in notes: 
3
	 # addition à chaque itération de chaque note à la variable cumul 
4
   somNotes +=note # même chose que somNotes = somNotes + note
5
   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

1
moyenne = somNotes / nb
2
print(moyenne)

Question

Calculer la note minimum en complétant le code initial : équivalent tableur de la fonction MIN

1
min = 20 # initialisation de la valeur du minimum à 20 -> la première note sera forcément plus petite
2
for note in notes :
3
  # chaque note plus basse que le minimum temporaire (min) devient le minimum
4
print(min)

Solution

1
min = 20
2
for note in notes :
3
  if note<min : min=note
4
print(min)

Question

Calculer la note maximum :  équivalent tableur de la fonction MAX

Solution

1
max = 0
2
for note in notes :
3
  if note>max : max=note
4
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

1
coefs = [1,1,1,1]
2
#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

1
somCoefs = 0 # initialisation à 0 de la variable cumul
2
for coef in coefs: 
3
	 # addition à chaque itération de chaque note à la variable cumul 
4
   somCoefs +=coef # même chose que somCoefs = somCoefs + coef
5
   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

1
i=1
2
j=3
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

1
print(range(0,6))

Pour parcourir la liste des notes, on peut donc procéder comme suit

1
for i in range(0,len(notes)):
2
  note = notes[i]
3
  print(note)

Il est vrai que c'est un peu plus long que le code précédent

1
for note in notes: 
2
    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

1
for i in range(0,len(notes)):
2
  note = notes[i]
3
  coef=coef[i]
4
  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

1
somProd=0
2
for i in range(0,len(notes)):
3
   note = notes[i]
4
   coef=coef[i]
5
   somProd+=note * coef
6
   print(somProd)
7
Remarque

somProd+=note * coef est la même chose que somProd = somProd + note * coef

Question

Calculer la moyenne pondérée

Solution

1
somProd = 0
2
somCoefs = 0
3
for i in range(0,len(notes)):
4
   note = notes[i]
5
   coef=coef[i]
6
   somProd+=note * coef
7
   somCoefs+=coef 
8
9
moyPond = somProd/somCoefs
10
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.