1 Le traitement répétitif Dans un programme, Il s avère parfois nécessaire d exécuter plusieurs fois de suite le même traitement, c est-à-dire la même série d instructions. Exercice : Ecrire un programme en Python qui demande un nombre à l'utilisateur et affiche la table de multiplication de ce nombre (multiplications par 0, 1,, 10) 22/02/2015
1 re solution : print("table de multiplication") print("================") nb = int(input("table de quel nombre? ")) print("0 x", nb, "=", 0*nb) print("1 x", nb, "=", 1*nb) print("2 x", nb, "=", 2*nb) print("3 x", nb, "=", 3*nb) #... etc. print("10 x", nb, "=", 10*nb) Cette solution fonctionne mais elle est fatigante a taper : même en utilisant Copier/Coller, il faut changer les valeurs du nombre a multiplier par nb.
2 eme solution : Utilisons une variable i que l'on va initialiser à 0 puis incrémenter après chaque affichage : print("table de multiplication") print("==============") nb = int(input("table de quel nombre? ")) i = 0 # initialisation du compteur i print(i, "x", nb, "=", i*nb) i += 1 # incrémentation du compteur i print(i, "x", nb, "=", i*nb) i += 1 print(i, "x", nb, "=", i*nb) i += 1 print(i, "x", nb, "=", i*nb) i += 1
2 eme solution : suite du programme print(i, "x", nb, "=", i*nb) i += 1 print(i, "x", nb, "=", i*nb) i += 1 print(i, "x", nb, "=", i*nb) i += 1 print(i, "x", nb, "=", i*nb) i += 1 print(i, "x", nb, "=", i*nb) i += 1 print(i, "x", nb, "=", i*nb) i += 1 print(i, "x", nb, "=", i*nb)
5 2 eme solution : Avantage : Avec Copier/Coller, c'est facile à écrire. Inconvénient : Trop long, à cause des répétitions. Meilleure solution : quand il y a des répétitions, utiliser une boucle. 22/02/2015
6 Une STRUCTURE REPETITIVE (ou STRUCTURE ITERATIVE ou boucle) répète l exécution d un traitement, dans un ordre précis, un nombre déterminé ou indéterminé de fois. Dans une boucle le nombre de répétitions : Il peut dépendre d une condition permettant l arrêt et la sortie de cette boucle. Peut être connu, fixé à l avance. 22/02/2015
7 On dispose de deux structures pour contrôler un traitement répétitif : La boucle Tant que.. faire La boucle Pour. faire 22/02/2015
8 A. La boucle Tant que.. faire (while.. :) La boucle Tant que..faire se présente en algorithmique sous la forme suivante : Tant que (condition) faire séquence Fin tant que Principe : Tant que la condition est vraie la séquence (bloc d'instructions) est exécutée. Le cycle continu jusqu'à ce que la condition soit fausse. 22/02/2015
9 A. La boucle Tant que.. faire (while.. :) Traduction en python Instruction simple : while condition : instruction Blocs d instructions : while condition : séquence 22/02/2015
10 A. La boucle Tant que.. faire (while.. :) Attention à l indentation!!! Lorsqu'on a un bloc d instructions après l instruction while, il est délimité par l'indentation. L'instruction Python "while" exécute de manière répétitive le bloc indenté tant que le test de condition est réalisé. Si la condition est d'emblée fausse le bloc ne sera jamais exécuté. 22/02/2015
11 A. La boucle Tant que.. faire (while.. :) Exemple : Table de multiplication d un nombre Algorithme Debut Lire(nb) i 0 Tant que i 10 faire ecrire(i, ' ', nb, '=', nb i) i i+1 Fin tant que ecrire("c'est terminé") Fin 22/02/2015
Début Organigramme Lire(nb) i 0 faux i 10 ecrire("c'est terminé") Fin vrai ecrire(i, ' ', nb, '=', nb i) i i + 1 Suite du programme Instructions de la boucle
13 A. La boucle Tant que.. faire (while.. :) Exemple : Table de multiplication d un nombre. Programme en python nb=int(input("nb=")) i=0 # initialisation de la variable de comptage while i<=10 : # ce bloc est exécuté tant que la condition est vraie print(i, ' x ', nb, '=', nb*i) i += 1 # incrémentation du compteur print("c'est terminé") 22/02/2015
Exemple : Table de multiplication d un nombre. L exécution du programme : nb=6 0 x 6 = 0 1 x 6 = 6 2 x 6 = 12 3 x 6 = 18 4 x 6 = 24 5 x 6 = 30 6 x 6 = 36 7 x 6 = 42 8 x 6 = 48 9 x 6 = 54 10 x 6 = 60 c'est terminé 14 22/02/2015
15 A. La boucle Tant que.. faire (while.. :) L instruction while utilisée à la troisième ligne indique à Python qu il lui faut répéter continuellement le bloc d instructions qui suit, tant que le contenu de la variable i reste inférieur ou égale à 10. N'oubliez pas d'incrémenter la variable i! Sinon, vous créez ce qu'on appelle une boucle infinie, puisque la valeur de i n'est jamais supérieure à 10 et la condition du while, par conséquent, reste toujours vraie. La boucle s'exécute donc à l'infini.
16 A. La boucle Tant que.. faire (while.. :) ATTENTION! Il faut bien choisir le test d arrêt de la boucle sinon on obtient une boucle infinie.
17 A. La boucle Tant que.. faire (while.. :) Exemple de boucle infinie : (à éviter) n = 10 carre = n**2 while not carre < 0 : print(n,"² = ", carre, sep="") n -= 1 carre = n**2 print("terminé.")
18 A. La boucle Tant que.. faire (while.. :) Exemple : Réponse : Calcul du carré des nombres de 10 à 0 (dans le sens décroissant) Mais la condition est mal choisie : elle ne devient jamais fausse car le carre d'un nombre n'est jamais < 0 => c'est une boucle infinie Question : Comment corriger l'erreur? Réponse : en mettant while not n < 0 : à la ligne 3
19 A. La boucle Tant que.. faire (while.. :) Dans une boucle while si une variable est testée dans la condition de la boucle, il faut faire attention à ce que : La variable testée soit initialisée (définie une première fois) avant la boucle La valeur de la variable change dans le corps de la boucle (sinon la condition ne deviendra jamais fausse => boucle infinie)
20 B. La boucle Pour.. faire (for..in. :) La boucle Pour..faire se présente en algorithmique sous la forme suivante : Pour compteur valeur initiale à valeur finale faire séquence Fin Pour Principe : pour la variable de contrôle allant de la valeur initiale jusqu à la valeur finale, exécuter la séquence d instructions
21 B. La boucle Pour.. faire (for..in. :) Traduction en python for compteur in range (valeur_initiale,valeur_d_arret): instruction ou bloc d instructions Le compteur est initialisé par l'instruction for à la valeur initiale et tant que la valeur d arrêt n'est pas atteinte, il est automatiquement incrémenté après l'exécution des instructions du bloc à répéter Attention : valeur d'arrêt = valeur finale + 1
22 B. La boucle Pour.. faire (for..in. :) Attention à l indentation : toutes les instructions que l on veut répéter après le for constituent le corps de la boucle (ou un bloc d instructions) et doivent être indentées d un ou plusieurs espaces (par convention 4 espaces). Dans le cas contraire, Python vous renvoie un message d erreur.
23 B. La boucle Pour.. faire (for..in. :) Exemple : >>> for i in range (1,10) :... print(i) File "<stdin>", line 2 print (i) ^ IndentationError: expected an indented block
24 B. La boucle Pour.. faire (for..in. :) Exemple : Table de multiplication d un nombre. Algorithme Debut Lire(nb) Pour i 0 à 10 faire ecrire(i, ' ', nb, '=', nb i) Fin pour ecrire("c'est terminé") Fin
Début Organigramme Lire(nb) i 0 faux i<=10 ecrire("c'est terminé") Fin vrai ecrire(i, ' ', nb, '=', nb i) i i + 1 Suite du programme Instructions de la boucle
26 B. La boucle Pour.. faire (for..in. :) Exemple : Table de multiplication d un nombre. Programme en python nb=int(input("nb=")) for i in range(0,11) : # pour i allant de 0 à 10 print(i, 'x', nb, '=', nb*i) print("c'est terminé") Remarque : range(0,11) permet d'obtenir les nombres de 0 à 10 car la valeur d'arrêt (11) n'est jamais atteinte
Exemple : Table de multiplication d un nombre. L exécution du programme : nb=6 0 x 6 = 0 1 x 6 = 6 2 x 6 = 12 3 x 6 = 18 4 x 6 = 24 5 x 6 = 30 6 x 6 = 36 7 x 6 = 42 8 x 6 = 48 9 x 6 = 54 10 x 6 = 60 c'est terminé 27 22/02/2015
28 B. La boucle Pour.. faire (for..in. :) Autre syntaxe :Si la valeur initiale est zéro, on peut l'omettre : for compteur in range(valeur_d_arret) : instruction ou bloc d'instructions
29 B. La boucle Pour.. faire (for..in. :) Exemple : Table de multiplication d un nombre donné nb=int(input("nb=")) for i in range(11) : # pour i allant de 0 à 10 print(i, 'x', nb, '=', nb*i) print("c'est terminé")
30 ( خطوة ( pas B. La boucle Pour.. faire avec le (for..in. :) La boucle Pour..faire avec le pas ( خطوة ( se présente en algorithmique sous la forme suivante : Pour compteur valeur initiale à valeur finale pas p faire séquence Fin Pour
31 ( خطوة ( pas B. La boucle Pour.. faire avec le (for..in. :) Traduction en python for compteur in range (valeur_initiale,valeur_d_arret,pas): instruction ou bloc d instructions Le compteur est initialisé par l'instruction for à la valeur initiale et tant que la valeur d arrêt n'est pas atteinte, il est automatiquement incrémenté ou décrémenté avec la valeur «pas» ( خطوة ( après l'exécution des instructions du bloc à répéter
32 ( خطوة ( pas B. La boucle Pour.. faire avec le (for..in. :) Exemple :afficher les nombres de 1 à 10 en ordre décroissant : Algorithme Debut Pour i 10 à 1 pas -1 faire ecrire(i) Fin pour ecrire("c'est terminé") Fin
Début Organigramme i 10 ecrire("c'est terminé") faux i>=1 vrai ecrire(i ) Fin i i - 1 Suite du programme Instructions de la boucle
34 ( خطوة ( pas B. La boucle Pour.. faire avec le (for..in. :) Exemple :afficher les nombres de 1 à 10 en ordre décroissant : Programme python : for i in range(10,0,-1) : print(i) print(" c est terminé ")
Exemple : L exécution du programme : 35 10 9 8 7 6 5 4 3 2 1 c'est terminé 22/02/2015
36 ( خطوة ( pas B. La boucle Pour.. faire avec le (for..in. :) for i in range(0,n) : Ces deux syntaxes sont blocs d instructions équivalentes et permettent le for i in range(n) : parcourt des entiers entre 0 et blocs d instructions n-1 (c.à.d. : 0,1,2,..,n-1) REMARQUE! En python quand la valeur initiale de la boucle for est égale à 0 on peut l écrire comme on peut l omettre, sinon (c.à.d. que la valeur_initiale 0) on doit écrire la valeur initiale.
37 ( خطوة ( pas B. La boucle Pour.. faire avec le for i in range(a,n) : blocs d instructions for i in range(a,n,r) : blocs d instructions Cette syntaxe permet de parcourir des entiers compris entre a (inclus) et n (non inclus), c.à.d. : a, a+1, a+2,. Cette syntaxe permet de parcourir, avec le pas ( خطوة ( : r, les entiers compris entre a (inclus) et n (non inclus) c.à.d.: a, a+r, a+2r,.. REMARQUE! En python quand si on ne met pas la valeur du «pas» il est par défaut (+1).
38 C. Les boucles imbriquées : Les boucles peuvent être imbriquées les unes dans les autres. Une boucle while peut contenir une autre boucle while, ou une autre boucle for. Autrement dit, une boucle peut contenir une autre boucle qui elle-même peut contenir une autre boucle et ainsi de suite.
39 for vs while La boucle itérative for est une boucle active au contraire de la boucle while. Cela signifie qu en plus de la répétition d un bloc d instructions (action commune aux deux types de boucle), la boucle for gère l évolution d une variable dans un compteur. Ainsi, la commande «for i in range (a,n) :» s occupe, de façon autonome, de l évolution de i alors que «while i<=n :» se contente de vérifier que i est présent dans le compteur sans jamais prendre l initiative de faire évoluer la valeur de i.
40 for vs while Une boucle for peut toujours être remplacée par une boucle while. Exemple : for i in range(a,b,p) : sequence Devient en while i=a while i < b : sequence i += p
41 Simplicité du for : for vs while L autonomie du for dans la gestion de la variable de boucle (incrémentation automatique et assurance de terminaison) sont des arguments de simplicité en faveur de l utilisation du for. On retiendra que : Lorsqu on connaît à l avance le nombre de répétitions à effectuer, on utilise la boucle for. Dans le cas contraire, on utilise la boucle while.
42 Souplesse du while : for vs while La boucle while s utilise indifféremment dans tous les cas : que l on connaisse ou non le nombre d itérations de boucle à accomplir. Mais cette souplesse a un prix : mettre en place une boucle while est généralement plus compliqué que dans le cas d un for. Autrement dit, on doit initialiser le compteur avant la boucle et d incrémenter ce compteur à l intérieur de la boucle.
43 Exercices et applications 22/02/2015
44 Exercice 1: Ecrire un programme python qui demande à l utilisateur un nombre réel compris entre 10 et 30 jusqu à ce que la réponse convienne ; dans ce cas, il lui indique que son nombre convient.
45 Exercice 2: Initialisez deux entiers : a = 0 et b = 10. Écrire une boucle affichant et incrémentant la valeur de a tant qu elle reste inférieure à celle de b. Écrire une autre boucle décrémentant la valeur de b et affichant sa valeur si elle est impaire. Boucler tant que b n est pas nul.
46