Inititation à la programmation avec Python (niveau 2nde)

Épisode n°4 : les listes, le mot clef for et la boucle bornée (Pour)

Les listes

Les listes Python sont un type de variable permettant de stocker une série d'éléments dans un seul objet. Elles se notent entre crochets.

L'exemple ci-dessous est une liste qui contient les nombres de 5 à 10 :

In [1]:
# création de liste (comme toute variable, on lui donne le nom qu'on veut):
quelques_nombres = [5, 6, 7, 8, 9, 10]

print(quelques_nombres)
[5, 6, 7, 8, 9, 10]

Chaque élément de la liste est accessible à l'aide de son indice (c'est sa positon dans la liste). En Python, on compte toujours à partir de zéro (0) : donc le 1er élément de la liste a pour indice 0, le 2ème élement a pour indice 1, et ainsi de suite...

indice : 0 1 2 3 4 5
élément : 5 6 7 8 9 10

On accède donc à un élément avec la syntaxe liste[indice] :

In [2]:
print(quelques_nombres[0])
print(quelques_nombres[1])
print(quelques_nombres[5])
5
6
10

Exercice : Créer une liste des jours de la semaine, puis afficher le dernier jour de la semaine (dimanche) à l'aide de son indice.

In [3]:
# à vous de jouer
semaine = ['lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi', 'dimanche']
print(semaine[6])
dimanche

Ajouter un élément à la fin de la liste

On peut ajouter un élément en fin de la liste avec la méthode append() qui s'utilise comme dans l'exemple ci-dessous :

In [4]:
# création de liste initiale vide ! elle ne contient aucun élément
liste = []

# affichons l'état de cette liste vide
print("A sa création, liste vaut :", liste)

# on ajoute quelques éléments un par un :
liste.append(5)
liste.append(10)
liste.append(20)
liste.append(50)

# affichons l'état de la liste après tous ces ajouts
print("Après 4 ajouts, liste vaut :", liste)
A sa création, liste vaut : []
Après 4 ajouts, liste vaut : [5, 10, 20, 50]

Parcourir tous les éléments d'une liste : for 'élément' in 'liste':

Il est possible de parcourir, un par un, tous les éléments d'une liste et d'effectuer un traitement quelconque, à l'aide du mot clef for associé à in.

On propose en exemple de calculer et d'afficher tous les carrés de la liste utlisée en introduction.

In [5]:
for nombre in quelques_nombres:
    carre = nombre * nombre
    print(carre)
25
36
49
64
81
100

Vous avez pu observer au passage une nouvelle utilisation du principe de l'indentation d'un bloc d'instructions.

Exercice : afficher les uns à la suite des autres tous les jours de la semaine.

In [6]:
# à vous de jouer
for jour in semaine:
    print(jour)
lundi
mardi
mercredi
jeudi
vendredi
samedi
dimanche

Parcours des éléments par leur indice : for i in range(n)

La construction for i in range(n) crée une variable i et lui fait prendre automatiquement et successivement toutes les valeurs entières entre 0 et n (n non compris).

On peut s'en servir pour parcourir par exemple les 3 premiers d'une liste (ici on calcule et affiche le double de chaque élément de notre liste) :

In [7]:
for i in range(3):
    double = 2 * quelques_nombres[i]
    print(double)
10
12
14

Complément : on peut connaître le nombre d'éléments d'une liste avec le mot clef len()

Pour parcourir tous les éléments de la liste, on utilise donc for i in range(len(liste)).

Voici un exemple (un peu tordu...) où multiplie tous les éléments de la liste par leur indice :

In [8]:
for i in range(len(quelques_nombres)):
    calcul_tordu = i * quelques_nombres[i]
    print(calcul_tordu)
0
6
14
24
36
50

Exercice : dans les deux derniers exemples, on s'est contenté d'afficher des valeurs mais elles ne sont stockées nulle part. On propose ici de calculer tous les carrés de la liste de départ et de les recopier dans une autre liste. Pour cela :

  1. créer une liste vide quelques_carres
  2. parcourir tous les éléments de la liste quelques_nombres
  3. pour chaque élément, calculer son carré et l'ajouter à la liste quelques_carres
In [9]:
# à vous de jouer
quelques_carres = []
for nombre in quelques_nombres:
    quelques_carres.append(nombre * nombre)
    
print(quelques_carres)
[25, 36, 49, 64, 81, 100]

Exercice (plus difficile) : Créer une liste couples qui contiendra la somme de tous les éléments d'une liste initiale, pris 2 à 2 à la suite.

Exemple : si la liste initiale vaut [5, 7, 13, 1, 4], alors la liste couples doit valoir à la fin du traitement [12, 20, 14, 5]

12 = 5 + 7, 
20 = 7 + 13,
14 = 13 + 1,
5 = 4 + 1.
In [10]:
liste = [5, 7, 13, 1, 4]
# à vous de jouer pour la suite... 
couples = []
for i in range(len(liste) - 1):
    couples.append(liste[i] + liste[i+1])

# test de réussite (ne pas supprimer)
assert(couples) == [12, 20, 14, 5]

Boucle bornée : Pour ...

Nous avons vu dans le notebook précédent qu'il est possible de créer des boucles qui répètent un bloc d'instructions plusieurs fois. Avec la boucle while, on ne sait pas combien de fois le bloc va se répéter.

Mais si on sait dès le début combien de fois on veut répéter une action, alors on peut créer une boucle bornée. Elle repose sur la construction qu'on vient de rencontrer for i in range(n).

Exemple : on veut afficher 5 fois la phrase "Vous en voulez encore ... ?"

In [11]:
for i in range(5):
    print("Vous en voulez encore... ?")
Vous en voulez encore... ?
Vous en voulez encore... ?
Vous en voulez encore... ?
Vous en voulez encore... ?
Vous en voulez encore... ?

Exercice : Écrire une fonction puissance(x, n) qui renvoie le résultat de x puissance n ; x est un nombre quelconque et n est un nombre entier positif ou nul.

Bien évidemment, l'utilisation de la fonction puissance intégrée à Python est interdite dans cet exercice.

Pour calculer le résultat de la puissance, vous n'avez ici le droit qu'à l'opération de multiplication. Il faut donc multiplier n fois le nombre x par lui même.

Dernier rappel : x puissance 0 = 1, quelque soit x non nul.

In [12]:
# à vous de jouer
def puissance(x, n):
    puiss = 1
    for i in range(n):
        puiss = puiss * x
    return puiss
In [13]:
# cellule de tests pour contrôler votre fonction
assert puissance(2, 8) == 256
assert puissance(37.124, 0) == 1
assert puissance(5, 3) == 125
assert puissance(-5, 3) == -125

Exercice : en s'appuyant sur une boucle bornée, créer 3 listes :

  • la 1ère contient les nombres de 0 à 20
  • la 2ème contient les carrés des nombres de 0 à 20
  • la 3ème contient les cubes des nombres de 0 à 20

Remarque : utiliser la fonction puissance précédemment définie.

In [14]:
# à vous de jouer
nombres = []
carres = []
cubes = []

for i in range(21):
    nombres.append(i)
    carres.append(puissance(i, 2))
    cubes.append(puissance(i, 3))
    
print(nombres)
print(carres)
print(cubes)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289, 324, 361, 400]
[0, 1, 8, 27, 64, 125, 216, 343, 512, 729, 1000, 1331, 1728, 2197, 2744, 3375, 4096, 4913, 5832, 6859, 8000]

To be continued... Pour la suite, ouvrez le notebook n°5.

In [ ]: