Voici un script qui affiche 10 fois le même message à l'écran :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Déclaration des CONSTANTESTEXTE="J'aime bien les copier coller !"# Programme principalprint(TEXTE)print(TEXTE)print(TEXTE)print(TEXTE)print(TEXTE)print(TEXTE)print(TEXTE)print(TEXTE)print(TEXTE)print(TEXTE)
J'aime bien les copier coller !
J'aime bien les copier coller !
J'aime bien les copier coller !
J'aime bien les copier coller !
J'aime bien les copier coller !
J'aime bien les copier coller !
J'aime bien les copier coller !
J'aime bien les copier coller !
J'aime bien les copier coller !
J'aime bien les copier coller !
Voyons d'abord comment obtenir exactement le même effet mais sans faire de copier-coller.
A° Sauvegarder et lancer le PROGRAMME en utilisant la flèche verte dans Thonny.
1
2
3
4
5
6
7
TEXTE="J'aime bien les copier coller !"print("C'est parti !")for_inrange(10):print(TEXTE)print("Fini !")
>>>%Run prog_boucle.py C'est parti !
J'aime bien les copier coller !
J'aime bien les copier coller !
J'aime bien les copier coller !
J'aime bien les copier coller !
J'aime bien les copier coller !
J'aime bien les copier coller !
J'aime bien les copier coller !
J'aime bien les copier coller !
J'aime bien les copier coller !
J'aime bien les copier coller !
Fini !
B° Qu'est-ce qui indique à l'interpréteur Python que l'instruction print("Fini !") n'est pas dans la boucle ?
C'est un coup de chance !
C'est parce qu'on a décalé l'instruction d'exactement 4 espaces !
C'est parce qu'on ne peut faire qu'une instruction en boucle
C° Ligne 4 : quel caractère trouve-t-on à la fin de la déclaration de la boucle ?
D° Poursuivre la séquence de lignes suivies par l'interpréteur lorsqu'il tombe sur ce programme.
1
2
3
4
5
6
7
TEXTE="J'aime bien les copier coller !"print("C'est parti !")for_inrange(10):print(TEXTE)print("Fini !")
L01 - L02
L04(1er tour)-L05 - ...
...CORRECTION...
1
2
3
4
5
6
7
TEXTE="J'aime bien les copier coller !"print("C'est parti !")for_inrange(10):print(TEXTE)print("Fini !")
1.1 Boucle POUR : réaliser plusieurs fois EXACTEMENT la même action
A - Principe
Pour réaliser plusieurs fois exactement la même série d'actions, il suffit d'utiliser une boucle bornée POUR, qu'on déclare à l'aide du mot-clé for en Python.
B - Exemple
1
2
3
4
5
6
7
print("Avant boucle")# Pas tabulée : avant la bouclefor_inrange(3):# Déclaration de la boucleprint("A")# Tabulée : dans la boucleprint("-- B")# Tabulée : dans la boucleprint("Après boucle")# Pas tabulée : avant la boucle
Déroulé du programme
L1 L3 - L4 - L5 L3 - L4 - L5 L3 - L4 - L5 L7
Résultat du programme
Avant boucleA-- BA-- BA-- BAprès boucle
C - Sémantique
3
for_inrange(3):
Traduction en français : "Réalise 3 fois le bloc d'instructions indentées"
On peut faire bien mieux que faire exactement la même chose à chaque tour de boucle : on peut faire presque pareil à chaque tour de boucle.
Pour cela, nous allons maintenant donner un nom à la variable de boucle qui est entre le for et le in.
E° Lancer ce nouveau programme.
1
2
3
4
5
6
print("C'est parti !")forvinrange(10):print(v)print("Fini !")
>>>%Run prog_boucle.py C'est parti !
0
1
2
3
4
5
6
7
8
9
Fini !
Questions
Combien de boucles ont été réalisées 10 ?
Quelle est la première valeur prise par la variable de boucle v ?
Quelle est la dernière valeur prise par la variable de boucle v ?
...CORRECTION...
Combien de boucles ont été réalisées 10 ?
10
Quelle est la première valeur prise par la variable de boucle v ?
v référence 0 lors du premier tour de boucle.
Quelle est la dernière valeur prise par la variable de boucle v ?
v référence 9 lors du dernier tour de boucle.
F° Compléter la séquence des lignes suivies par l'interpréteur.
1
2
3
4
5
6
print("C'est parti !")forvinrange(10):print(v)print("Fini !")
L01
L03(v=0)-L04 - ...
...CORRECTION...
1
2
3
4
5
6
print("C'est parti !")forvinrange(10):print(v)print("Fini !")
06° Utiliser ce programme qui trace un triangle en réalisant trois fois EXACTEMENT la même série d'actions : avance et tourne de 120°. On notera que 120° * 3 donne 360°.
fromturtleimport*couleur_choisie="#33AAFF"taille=50x=0y=0# Choix du feutrecolor(couleur_choisie)pensize(5)# Déplacement du crayonpenup()goto(x,y)pendown()# Dessin d'un carréfor_inrange(3):forward(taille)left(120)
...CORRECTION...
07° Modifier le programme précédent pour qu'il trace un carré en réalisant quatre fois EXACTEMENT la même série d'actions : avance et tourne de 90°. On notera que 90° * 4 donne 360°.
fromturtleimport*couleur_choisie="#33AAFF"taille=50x=0y=0# Choix du feutrecolor(couleur_choisie)pensize(5)# Déplacement du crayonpenup()goto(x,y)pendown()# Dessin d'un carréfor_inrange(4):forward(taille)left(90)
On peut aussi réaliser quatre fois presque la même série d'actions. Traçons par exemple des côtés de plus en plus grand.
08° Utiliser ce programme pour visualiser le résultat puis répondre aux questions.
fromturtleimport*couleur_choisie="#33AAFF"taille=25x=0y=0# Choix du feutrecolor(couleur_choisie)pensize(5)# Déplacement du crayonpenup()goto(x,y)pendown()# Dessin d'un carréforkinrange(16):forward(taille*k)left(90)
Questions
Que vaut la longueur du trait lors du premier tour de boucle (attentiona au "piège" si vous n'êtes pas attentif).
Quelles sont les longueurs effectuées sur les 4 premiers tours de boucle ?
Modifier le programme pour que la longueur du trait soit taille* (k + 1)
Cette fois, quelles sont les longueurs effectuées sur les 4 premirs tours de boucle ?
...CORRECTION...
Lors du premier tour de boucle, k vaut 0. Le crayon avance donc de 25 * 0, soit 0 pixel !
Sur les 4 premiers tours, on a donc 0, 25, 50 et 75 pixels de longueurs de trait.
fromturtleimport*couleur_choisie="#33AAFF"taille=25x=0y=0# Choix du feutrecolor(couleur_choisie)pensize(5)# Déplacement du crayonpenup()goto(x,y)pendown()# Dessin d'un carréforkinrange(16):forward(taille*(k + 1))left(90)
Cette fois, le premier trait fait 25 pixels et les suivants 50, 75 et 100. On trace quelque chose dès le début.
On peut encore faire mieux : faire plusieurs fois la même chose mais à l'intérieur d'une boucle qui réalise elle presque la même chose...
Ici, la première boucle externe va permettre de modifier les coordonnées et la deuxième boucle interne va permettre de tracer des carrés.
09 (difficile)° Utiliser ce programme pour visualiser le résultat puis répondre aux questions.
fromturtleimport*couleur_choisie="#33AAFF"taille=25x=-200y=0# Choix du feutrecolor(couleur_choisie)pensize(5)forcolonneinrange(20):# BOUCLE EXTERNE# Déplacement du crayonpenup()goto(x+taille*colonne,y)pendown()# Dessin d'un carréfor_inrange(4):# BOUCLE INTERNEforward(taille)left(90)
Questions
Quelles sont les coordonnées du premier carré tracé ?
Quelles sont les coordonnées des trois suivants ?
Pourquoi la deuxième boucle est décalée de 4 espaces ?
Donner les lignes suivies par l'interpréteur pour réaliser les 2 premiers carrés.
...CORRECTION...
Quelles sont les coordonnées du premier carré tracé ?
On voit goto(x + taille*colonne, y) en ligne 17.
Cela veut dire que les coordonnées dépendent de colonne.
Lors du premier tour, colonne vaut 0. Donc on aura un carré en (-200 + 25*0, 0) soit (-200, 0).
Quelles sont les coordonnées des trois suivants ?
colonne vaut alors 1, puis 2 puis 3.
(-200 + 25*1, 0) soit (-175, 0)
(-200 + 25*2, 0) soit (-150, 0)
(-200 + 25*3, 0) soit (-125, 0)
Pourquoi la deuxième boucle est décalée de 4 espaces ?
Car elle appartient à la première : on va réaliser la deuxième boucle à chaque tour de boucle de la première boucle...
Donner les lignes suivies par l'interpréteur pour réaliser les 2 premiers carrés.
fromturtleimport*couleur_choisie="#33AAFF"taille=25x=-200y=-200# Choix du feutrecolor(couleur_choisie)pensize(5)forcolonneinrange(20):# BOUCLE EXTERNEfor...:# Déplacement du crayonpenup()goto(x+taille*colonne, ...)pendown()# Dessin d'un carréfor_inrange(4):# BOUCLE INTERNEforward(taille)left(90)
fromturtleimport*couleur_choisie="#33AAFF"taille=25x=-200y=-200# Choix du feutrecolor(couleur_choisie)pensize(5)forcolonneinrange(20):# BOUCLE EXTERNEforligneinrange(20):# Déplacement du crayonpenup()goto(x+taille*colonne,y+taille*ligne)pendown()# Dessin d'un carréfor_inrange(4):# BOUCLE INTERNEforward(taille)left(90)