Solution (22-SPO1U59-INFO-TS1-EX1)
Écrivez tous les affichages produits à l’écran lorsque l’on exécute le programme Python suivant :
T=[1,9,14,5,7,18,10,19]
L = []
n = 0
for i in range(len(T)) :
if T[i] != 0 :
n=n+1
L.append(T[i])
print("n =", n)
print("L =", L)
s=0
for j in range(n):
if (L[j]%5==0):
print("j =" , j)
s=s+L[j]
L[j]=0
print("s =", s)
print(L)Commençons par les trois premières lignes :
T=[1,9,14,5,7,18,10,19]
L = []
n = 0
for i in range(len(T)) :
if T[i] != 0 :
n=n+1
L.append(T[i])
print("n =", n)
print("L =", L)
s=0
for j in range(n):
if (L[j]%5==0):
print("j =" , j)
s=s+L[j]
L[j]=0
print("s =", s)
print(L)- La première ligne sert à définir une liste $T$.
- La seconde ligne sert à définir une liste vide $L$.
- La troisième ligne sert à définir la vériable $n$ et à lui assigner la valeur $0$.
Passons à la boucle $\for$ mentionnée ci-dessous :
T=[1,9,14,5,7,18,10,19]
L = []
n = 0
for i in range(len(T)) :
if T[i] != 0 :
n=n+1
L.append(T[i])
print("n =", n)
print("L =", L)
s=0
for j in range(n):
if (L[j]%5==0):
print("j =" , j)
s=s+L[j]
L[j]=0
print("s =", s)
print(L)Tout d’abord, on a $$\operatorname{len}(T) = 8.$$
La commande $$\operatorname{range}(\operatorname{len}(T)) $$ produit donc la suite $0,1,2,3,4,5,6,7$. Le code
T=[1,9,14,5,7,18,10,19]
L = []
n = 0
for i in range(len(T)) :
if T[i] != 0 :
n=n+1
L.append(T[i])
print("n =", n)
print("L =", L)
s=0
for j in range(n):
if (L[j]%5==0):
print("j =" , j)
s=s+L[j]
L[j]=0
print("s =", s)
print(L)ci-dessus, contenu dans la boucle $\for$, sera donc executé $8$ fois. La première ligne est un test conditionnel $\if$. Si le $i$-th ème élément $T[i]$ de $T$ est non-nul, alors :
- On incrémente $n$ de $1$.
- On ajoute $T[i]$ comme élément dans la liste $L$.
Peu importe le résultat du test $\if$ mentionné ci-dessus, les deux lignes $\print$ en fin de bloc afficheront respectivement la valeur de $n$ ainsi que la liste $L$ pour chaque itération de la boucle $\for$. Ici, ce qu’il faut comprendre, est que l’on assiste la construction, élément par élément, d’une copie $L$ de la liste $T$. Et c’est bien le cas, lorsque l’on fait tourner la première partie du code.
Passons à la seconde partie du code :
T=[1,9,14,5,7,18,10,19]
L = []
n = 0
for i in range(len(T)) :
if T[i] != 0 :
n=n+1
L.append(T[i])
print("n =", n)
print("L =", L)
s=0
for j in range(n):
if (L[j]%5==0):
print("j =" , j)
s=s+L[j]
L[j]=0
print("s =", s)
print(L)En ligne $10$, la variable $s$ est initialisée et se voit assigner la valeur $0$.
Notons que $n$ est incrémenté de $1$ à chaque itération pour $i$ dans $[0,1,2,3,4,5,6,7]$ de la boucle $\for$ à condition que $T[i]$ soit non-nul.
Comme tous les éléments de la liste $T$ sont non-nuls, $n$ est incrémenté de $1$ un nombre $\len(T)$ de fois, i.e., $8$ fois.
On a donc $n = 8$ et la seconde boucle $\for$ ci-dessus itère sur $j$ prenant les valeurs de la suite associée à $\range(8)$, c’est-à-dire, les valeurs successives $0,1,2,3,4,5,6,7$.
Notons que la liste $L$ construite dans la première partie du code est une copie conforme de $T$. En effet, $L$ est initialisée comme une liste vide et se voit ajouter les éléments de $T$ ayant la propriétés d’être non-nuls. Comme tous les éléments de $T$ sont non-nuls, les listes $T$ et $L$ sont identiques : $T = L$, ou encore, en Python, $$T == L$$ qui retourne $\operatorname{True}$.
Pour chaque itération sur $j$ dans $\range(n)$, on teste tout d’abord si $5$ divise $L[j]$ via le test conditionnel
s=0
for j in range(n):
if (L[j]%5==0):
print("j =" , j)
s=s+L[j]
L[j]=0
print("s =", s)
print(L)Si cette condition est réalisée, alors le code
s=0
for j in range(n):
if (L[j]%5==0):
print("j =" , j)
s=s+L[j]
L[j]=0
print("s =", s)
print(L)est exécuté :
- La valeur de $j$ est affichée.
- La variable $s$ se voit assigner une valeur mise à jour : Cette dernière est égale à la valeur de $s$ avant exécution du du code dans le $\if$, sommée avec la valeur de $L[j]$.
- La valeur de $L[j]$ est mise à zéro.
Une fois que l’exécution de la boucle $\for$ prend fin, le programme termine son exécution en affichant la valeur de $s$ ainsi que la liste $L$.
On s’attend à voir apparaître deux valeurs de $j$ : Celles pour lesquelles $L[j]$ est divisible par $5$. Notons que l’on a $L[3]=5$ et $L[6] = 15$. On verra donc apparaître $j=3$ et $j=6$. La variable $s$, initialisée à zéro, sera donc incrémentée de $10+5=15$.
On s’attend donc à voir apparaître $s=15$.
La liste $L$ verra ses éléments $L[3]=5$ et $L[6]=10$ divisibles par $5$ mis à zéro : On s’attend donc à voir apparaître $$L = [1, 9, 14, 0, 7, 18, 0, 19]. $$
C’est bien le cas lorsque l’on exécute la seconde partie du code :
s=0
for j in range(n):
if (L[j]%5==0):
print("j =" , j)
s=s+L[j]
L[j]=0
print("s =", s)
print(L)


