Ch. 03 · Leçon 2
Les structures de contrôle itératives
Ce que vous saurez faire
- →Distinguer les structures itératives complètes et à condition d'arrêt
- →Utiliser la boucle Pour en algorithme et for en Python
- →Utiliser les boucles Répéter et Tant que et leur équivalent Python
- →Choisir la structure itérative adaptée à un problème donné
- →Écrire des programmes Python utilisant des boucles imbriquées
id: 33-1528-structures-controle-iteratives slug: 33-1528-structures-controle-iteratives titre: Les structures de contrôle itératives chapitre: 3 chapitre_titre: Les structures de contrôle lecon: 2 niveau: 4eme-sci ordre: 30 prerequis: [] duree_estimee_min: 60 mots_cles:
- boucle
- pour
- tantque
- repeter
- for
- while
- iteration
- python langages:
- analyse
- python objectifs:
- Distinguer les structures itératives complètes et à condition d'arrêt
- Utiliser la boucle Pour en algorithme et for en Python
- Utiliser les boucles Répéter et Tant que et leur équivalent Python
- Choisir la structure itérative adaptée à un problème donné
- Écrire des programmes Python utilisant des boucles imbriquées status: published source_pdf: 33_1528.pdf source_pages:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9 kind: cours
Les structures de contrôle itératives
Les structures itératives permettent de répéter un traitement plusieurs fois. On distingue deux grandes familles :
- la structure itérative complète (boucle Pour) quand on connaît à l'avance le nombre de répétitions ;
- les structures itératives à condition d'arrêt (Répéter, Tant que) quand le nombre de répétitions n'est pas connu d'avance.
1. La boucle POUR
Pour compteur de début à fin (pas) faire
Traitement à répéter
Fin pour
Quand utiliser cette structure :
- Lorsqu'on connaît le nombre de répétitions
- Avec Vi ≤ Vf
Pour compteur de début à fin (pas) faire
Traitement à répéter
Fin pour
Quand utiliser cette structure :
- Lorsqu'on connaît le nombre de répétitions
- Avec Vi ≤ Vf
for variable in range(debut, fin, pas):
traitement
Deux formes utiles :
# Aller de debut à fin-1
for i in range(5, 13, 3):
print(i)
# Affiche : 5, 8, 11
# Répéter n fois (i va de 0 à n-1)
for i in range(3):
print("Salut")
# Affiche : Salut, Salut, Salut
2. Les structures itératives à condition d'arrêt
On les utilise lorsque l'on ne connaît pas d'avance le nombre de répétitions.
2.1. La boucle RÉPÉTER
Répéter
Traitement à répéter
Jusqu'à (Condition)
- Le nombre de répétitions est ≥ 1 (le traitement est exécuté au moins une fois).
- On sort de la boucle quand la condition devient vraie.
Répéter
Traitement à répéter
Jusqu'à (Condition)
- Le nombre de répétitions est ≥ 1 (le traitement est exécuté au moins une fois).
- On sort de la boucle quand la condition devient vraie.
Cette structure n'existe pas directement en Python.
On la simule avec while True et break :
while True:
traitement
if condition_d_arret:
break
Exemple :
X ← 2
Répéter
X ← X + 5
Jusqu'à X >= 2
Valeur finale de X = 7 (le traitement est exécuté une fois avant le test).
2.2. La boucle TANT QUE
Tant que (condition) faire
Traitement répétitif
Fin TantQue
- Le nombre de répétitions est ≥ 0 (le traitement peut ne jamais être exécuté).
- On reste dans la boucle tant que la condition est vraie.
Tant que (condition) faire
Traitement répétitif
Fin TantQue
- Le nombre de répétitions est ≥ 0 (le traitement peut ne jamais être exécuté).
- On reste dans la boucle tant que la condition est vraie.
while condition:
traitement
Exemple :
X ← 2
Tantque x < 2 faire
X ← X + 5
Fin tantque
Valeur finale de X = 2 (la condition x < 2 est fausse dès l'entrée, le traitement n'est jamais exécuté).
Exercices
Programme 1 :
x = 0
y = 1
for i in range(1, 4):
x = x + i
y = y * i
print('x=', x, 'y=', y)
Le programme affiche :
- ☐ x = 6, y = 20
- ☐ x = 15, y = 25
- ☐ x = 6, y = 6
Programme 2 :
X ← 0
Pour i de 0 à long(ch)-1 faire
Si "0" <= ch[i] <= "9" alors
X ← X + valeur(ch[i])
Fin Si
Fin pour
Ecrire(x)
Pour Ch = 'html5 et css3', le programme affiche :
- ☐ 53
- ☐ 8
- ☐ 2
Voir le corrigé
Programme 1 : la boucle for i in range(1, 4) fait varier i de 1 à 3.
| N° | Instruction | i | x | y |
|---|---|---|---|---|
| 01 | ··· | ? | ? | ? |
| 02 | ··· | ? | ? | ? |
| 03 | ··· | ? | ? | ? |
| 04 | ··· | ? | ? | ? |
Programme 2 : la chaîne 'html5 et css3' a une longueur de 13. On parcourt les caractères et on ajoute la valeur numérique uniquement quand le caractère est un chiffre.
Les chiffres trouvés sont '5' (indice 4) et '3' (indice 12).
X = 0 + 5 + 3 = 8 ✓ (2ème réponse)
Compléter les boucles permettant de saisir un entier n appartenant à l'intervalle [5..25].
1ère méthode (algorithme) :
Répéter
Ecrire("donner un entier") lire(n)
Jusqu'à ………………………
2ème méthode (algorithme) :
Ecrire("donner un entier") lire(n)
Tant que ……………………… faire
Ecrire("donner un entier") lire(n)
Fin tantque
1ère méthode (Python) :
while ……………………… :
n = int(input('donner n'))
if ……………………… :
break
2ème méthode (Python) :
n = int(input('donner n'))
while ……………………… :
n = int(input('donner n'))
Voir le corrigé
1ère méthode (algorithme) — Répéter :
Répéter
Ecrire("donner un entier") lire(n)
Jusqu'à n dans [5..25] // c.à.d (n >= 5) et (n <= 25)
2ème méthode (algorithme) — Tant que :
Ecrire("donner un entier") lire(n)
Tant que non(5 <= n <= 25) faire
Ecrire("donner un entier") lire(n)
Fin tantque
1ère méthode (Python) :
while True:
n = int(input('donner n'))
if 5 <= n <= 25:
break
2ème méthode (Python) :
n = int(input('donner n'))
while not (5 <= n <= 25):
n = int(input('donner n'))
Écrire un programme qui permet de saisir une phrase de minimum 20 caractères, puis afficher le nombre de ses mots.
Voir le corrigé
Algorithme :
Nom : Mot
Début
Répéter
Ecrire("donner une chaine") lire(ch)
Jusqu'à long(ch) >= 20
m ← 0
Pour i de 0 à long(ch)-1 faire
Si ch[i] = " " alors
m ← m + 1
Fin Si
Fin Pour
Ecrire("Le nombre de mot = ", m+1)
Fin
| Objet | Type / Nature |
|---|---|
| ch | chaîne |
| i, m | entier |
Programme Python :
while True:
ch = input('donner une phrase')
if len(ch) >= 20:
break
n = 0
for i in range(len(ch)):
if ch[i] == ' ':
n = n + 1
print('le nombre de mot=', n + 1)
Afin d'apprendre aux élèves la table de multiplication, on veut créer un programme en Python qui demande le résultat de la multiplication de 2 nombres choisis aléatoirement par l'ordinateur entre 0 et 9.
On interroge l'élève 10 fois, en affichant 'bravo' pour chaque bonne réponse et 'faux' pour une réponse fausse. On affiche à la fin le score obtenu (nombre de réponses correctes / 10).
Exemple de trace d'exécution :
essaie n° 1
1*1=1
bravo
essaie n° 2
1*7=7
bravo
...
essaie n° 5
4*4=15
faux
...
nombre de reponse correcte est 7 /10
Voir le corrigé
Algorithme :
Nom : Multiplication
Début
s ← 0
Pour i de 1 à 10 faire
x ← aléa(0, 9)
y ← aléa(0, 9)
Ecrire("essaie n°", i)
Ecrire(x, "*", y, "=") lire(z)
Si z = x * y alors
Ecrire("bravo")
s ← s + 1
Sinon
Ecrire("faux")
Fin Si
Fin Pour
Ecrire("Le nb de réponses correctes est ", s, "/10")
Fin
| Objet | Type / Nature |
|---|---|
| x, y, z, s, i | entier |
Programme Python :
from random import *
s = 0
for i in range(1, 11):
x = randint(0, 9)
y = randint(0, 9)
print('essaie n°', i)
z = int(input(str(x) + "*" + str(y) + "="))
if z == x * y:
print('bravo')
s = s + 1
else:
print('faux')
print("le nombre des réponse correcte", s, "/10")
Écrire un programme en Python qui permet de deviner un nombre composé de 3 chiffres choisi aléatoirement par l'ordinateur.
- Le joueur a maximum 10 essais.
- Si le nombre saisi est supérieur au nombre à deviner, on affiche
"plus", sinon"moins". - À la fin :
"bravo"si le joueur a deviné, sinon"perdu"(en affichant le nombre).
Exemple 1 (perdu après 10 essais) :
Bonjour, devinez un nombre composé de 3 chiffres
essaie n°1 500 → plus
essaie n°2 700 → plus
essaie n°3 900 → moins
...
essaie n°10 833
perdu, le nombre à deviner = 822
Exemple 2 (gagné) :
essaie n°8 843
bravo
Voir le corrigé
Algorithme :
Début
Ecrire("Bonjour, devinez un nb de 3 chiffres")
y ← aléa(100, 999)
i ← 1
Répéter
Ecrire("essaie n°", i) lire(x)
Jusqu'à 100 <= x <= 999
Tantque (x ≠ y) et (i < 10) faire
i ← i + 1
Si x < y alors
Ecrire("plus")
Sinon
Ecrire("moins")
Fin Si
Répéter
Ecrire("essaie n°", i) lire(x)
Jusqu'à 100 <= x <= 999
Fin Tantque
Si x = y alors
Ecrire("Bravo")
Sinon
Ecrire("Perdu, le nombre est ", y)
Fin Si
Fin
| Objet | Type / Nature |
|---|---|
| x, y, i | entier |
Programme Python :
print('bonjour, devinez un nombrez de 3 chiffres')
from random import *
y = randint(100, 999)
i = 1
while True:
x = int(input('essaie n°' + str(i) + ':'))
if 100 <= x <= 999:
break
while (x != y) and (i < 10):
i = i + 1
if x < y:
print('plus')
else:
print('moins')
while True:
x = int(input('essaie n°' + str(i) + ':'))
if 100 <= x <= 999:
break
if x == y:
print('bravo')
else:
print('perdu le numéro est ', y)
À retenir
- Boucle Pour / for : nombre de répétitions connu d'avance.
- Boucle Répéter / while True + break : nombre de répétitions inconnu, exécuté au moins 1 fois.
- Boucle Tant que / while : nombre de répétitions inconnu, exécuté 0 fois ou plus.
- En Python,
range(a, b, p)exclut la borneb. - Pour un contrôle de saisie, le schéma classique est
Répéter ... Jusqu'à condition_valideouwhile True ... if condition_valide: break.
Quiz : boucles en Python
Maîtrisez `for`, `while` et `range` en Python.
Quiz (5 questions)
Que produit `for i in range(5):` ?
Que vaut `s` après ce code ? ```python s = 0 for i in range(1, 11): s += i ```
Pour écrire une boucle qui s'arrête quand l'utilisateur tape 0, on utilise :
Quelle instruction permet de **sortir** d'une boucle prématurément ?
Soit le code suivant. Que vaut `cpt` à la fin ? ```python cpt = 0 for c in "Python": if c in "aeiou": cpt += 1 ```