Exo For

Identification

Infoforall

16 - Exercices For


Exercice de l'activité Python Boucle Pour

Attention : lire une correction ne garantit pas de pouvoir refaire l'exercice. Comprendre et faire sont deux capacités différentes.

1 - Etude de range

01° Donner les valeurs successives que prendra la variable de boucle x dans le programme suivant 

1 2
for x in range(0, 10, 1): print(x)

...CORRECTION ...

x va prendre les valeurs 0, 1, 2, 3, 4, 5, 6, 7, 8 et 9.

02° Proposer un range ne possèdant qu'un seul argument pour réaliser la même chose.

...CORRECTION ...

1 2
for x in range(10): print(x)

03° Donner les valeurs successives que prendra la variable de boucle x dans le programme suivant 

1 2
for x in range(0, 20, 5): print(x)

...CORRECTION ...

x va prendre les valeurs 0, 5, 10, 15.

04° Donner les valeurs successives que prendra la variable de boucle x dans le programme suivant 

1 2
for x in range(8, 22, 4): print(x)

...CORRECTION ...

x va prendre les valeurs 8, 12, 16, 20.

05° Donner les valeurs successives que prendra la variable de boucle i dans le programme suivant 

1 2
for i in range(100, 10, -20): print(x)

...CORRECTION ...

x va prendre les valeurs 100, 80, 60, 40, 20.

06° Donner les valeurs successives que prendra la variable de boucle i dans le programme suivant 

1 2
for i in range(100, 22, -20): print(x)

...CORRECTION ...

x va prendre les valeurs 100, 80, 60, 40.

2 - Réaliser la boucle étape par étape

N'hésitez pas à partir sur le site Python Tutor pour faire exécuter les programmes pas à pas.

07° Trouver et expliquer le contenu de la variable compteur au fur et à mesure de l'exécution du programme.

1 2 3
compteur = 0 for x in range(1, 6): compteur = compteur + x

...CORRECTION ...

L1 : compteur fait référence à 0.

L2 : on commence la boucle avec x valant 1.

L3 : x = 1 et donc on obtient compteur = 0 + 1 = 1.

L2 : on continue la boucle avec x valant 2.

L3 : x = 2 et donc on obtient compteur = 1 + 2 = 3.

L2 puis L3 : x = 3 et donc on obtient compteur = 3 + 3 = 6.

L2 puis L3 : x = 4 et donc on obtient compteur = 6 + 4 = 10.

L2 puis L3 : x = 5 et donc on obtient compteur = 10 + 5 = 15.

08° Trouver et expliquer le contenu de la variable compteur au fur et à mesure de l'exécution du programme.

Attention, c'est bien une multiplication dans la formule.

1 2 3
compteur = 10 for k in range(2, 9, 3): compteur = compteur * k

...CORRECTION ...

L1 : compteur fait référence à 10.

L2 : on commence la boucle avec k valant 2.

L3 : k = 2 et donc on obtient compteur = 10 * 2 = 20.

L2 : on continue la boucle avec k valant 5.

L3 : k = 5 et donc on obtient compteur = 20 * 5 = 100.

L2 puis L3 : k = 8 et donc on obtient compteur = 100 * 8 = 800.

3 - Boucles imbriquées

09° Combien va-t-on dessiner de petits chats ?

1 2 3
for a in range(10): dessiner_un_petit_chat() dessiner_un_petit_chat() dessiner_un_petit_chat()

...CORRECTION ...

Nous allons faire 10 tours de boucles en L1 avec une variable de boucle a qui prendra les valeurs 0, 1, 2... jusqu'à 9 mais dont on utilisera pas la valeur pendant la boucle.

Et lors de chacun des tours de boucle, on dessine 3 chats.

Il va donc y avoir 10 * 3 = 30 chats.

10° Combien va-t-on dessiner de petits chats ?

1 2 3
for a in range(10): for b in range(3): dessiner_un_petit_chat()

...CORRECTION ...

Encore 30.

Pourquoi ?

On réalise la boucle présente en L2 (qu'on nommera Boucle 2) 3 fois.

Or, on réalise la boucle présente en L1 10 fois. Or pendant chaque tour de la boucle 1, on exécute une boucle 2.

Description au cas par cas :

  • D'abord a vaut 0 et
    • Une exécution de la ligne 3 avec b valant 0 : 1 chat.
    • Une exécution de la ligne 3 avec b valant 1 : 2 chats.
    • Une exécution de la ligne 3 avec b valant 2 : 3 chats.
    • Fin de la boucle 2
  • Puis a vaut 1 et
    • Une exécution de la ligne 3 avec b valant 0 : 4 chats.
    • Une exécution de la ligne 3 avec b valant 1 : 5 chats.
    • Une exécution de la ligne 3 avec b valant 2 : 6 chats.
    • Fin de la boucle 2
  • Puis a vaut 2 et
    • Une exécution de la ligne 3 avec b valant 0 : 7 chats.
    • Une exécution de la ligne 3 avec b valant 1 : 8 chats.
    • Une exécution de la ligne 3 avec b valant 2 : 9 chats.
    • Fin de la boucle 2
  • Puis a vaut 3...
  • Finalement a vaut 9 et
    • Une exécution de la ligne 3 avec b valant 0 : 28 chats.
    • Une exécution de la ligne 3 avec b valant 1 : 29 chats.
    • Une exécution de la ligne 3 avec b valant 2 : 30 chats.
    • Fin de la boucle 2
  • Fin de la boucle 1

Tout cela peut se résumer à 10 tours de boucle 1 comportant à chaque fois 3 tours de boucle 2, soit 10 * 3 = 30 chats dessinés.

11° Combien va-t-on dessiner de petits chats ?

1 2 3
for a in range(2, 9, 3): for b in range(10, 101, 20): dessiner_un_petit_chat()

...CORRECTION ...

La variable de boucle a va prendre les valeurs 2, 5, 8. Soit 3 tours de boucles différents.

La variable de boucle b va prendre les valeurs 10, 30, 50, 70, 90. Soit 5 tours de boucles différents.

Cela veut dire que pour chaque tour de boucle de a, on aura 5 tours de boucle sur b.

On a donc en tout 3 * 5 = 15 tours de boucle.

On va donc dessiner 15 chatons.

Pour donner une idée de fonctionnement, voici les valeurs successives de a et b :

  • a = 2
    • b = 10
    • b = 30
    • b = 50
    • b = 70
    • b = 90
  • a = 5
    • b = 10
    • b = 30
    • b = 50
    • b = 70
    • b = 90
  • a = 8
    • b = 10
    • b = 30
    • b = 50
    • b = 70
    • b = 90

12° Lancer ce programme et vérifer que vous parvenez bien à comprendre l'affichage obtenu :

1 2 3
for a in range(2, 9, 3): for b in range(10, 101, 20): print(f"a vaut {a} et b vaut {b}")
a vaut 2 et b vaut 10 a vaut 2 et b vaut 30 a vaut 2 et b vaut 50 a vaut 2 et b vaut 70 a vaut 2 et b vaut 90 a vaut 5 et b vaut 10 a vaut 5 et b vaut 30 a vaut 5 et b vaut 50 a vaut 5 et b vaut 70 a vaut 5 et b vaut 90 a vaut 8 et b vaut 10 a vaut 8 et b vaut 30 a vaut 8 et b vaut 50 a vaut 8 et b vaut 70 a vaut 8 et b vaut 90

Si vraiment cela vous pose problème : Python Tutor est votre ami (ou le mode debug de Thonny).

4 - Lecture d'un tableau case par case

Rappel du principe de la lecture :
Lecture d'un tableau
CLIQUER SUR L'IMAGE pour ANIMER ou STOPPER

13° Que va afficher ce programme :

1 2 3
nombres = [20, 10, 30, 20, 50, 40] for indice in range(6): print( f"Valeur {indice} : {nombres[indice]}" )

...CORRECTION ...

Il va afficher lors d'une boucle plusieurs fois le message Valeur XXX : ???. où XXX sera remplacé par la valeur de l'indice et ??? par la valeur lue dans la case du tableau correspondante.

Valeur 0 : 20 Valeur 1 : 10 Valeur 2 : 30 Valeur 3 : 20 Valeur 4 : 50 Valeur 5 : 40

14° Que va afficher ce programme :

1 2 3
nombres = [200, 1, 300, 2, 500, 4] for indice in range(len(nombres)): print( f"Valeur {indice} : {nombres[indice]}" )

...CORRECTION ...

Même programme ou presque. Il va afficher lors d'une boucle plusieurs fois le message Valeur : ... où ... sera remplacé par la valeur lue dans la case du tableau correspondante.

La seule différence vient du fait que la longueur du tableau est évaluée automatiquement avec la fonction native len().

Valeur 0 : 200 Valeur 1 : 1 Valeur 2 : 300 Valeur 3 : 2 Valeur 4 : 500 Valeur 5 : 4

Activité publiée le 15 11 2021
Dernière modification : 20 11 2021
Auteur : ows. h.