Académique Documents
Professionnel Documents
Culture Documents
Instructions répétitives
Elise Bonzon
elise.bonzon@mi.parisdescartes.fr
1
Instructions répétitives
2. Boucle while
3. Notion de terminaison
5. Boucle for
7. Pour conclure
2
Pourquoi des instructions
répétitives ?
Pourquoi des instructions répétitives ?
• Analogie culinaire :
• monter des blancs en neige
• cuire un gâteau
• Répéter des actions similaires, potentiellement différentes
• Comment exprimer aussi longtemps que nécessaire ?
• Comment s’assurer que le programme termine ?
3
Somme des premiers entiers
4
Somme des premiers entiers
>>> somme5 = 1 + 2 + 3 + 4 + 5
>>> somme5
15
4
Somme des premiers entiers
>>> somme5 = 1 + 2 + 3 + 4 + 5
>>> somme5
15
4
Somme des premiers entiers
>>> somme5 = 1 + 2 + 3 + 4 + 5
>>> somme5
15
4
Somme des premiers entiers
>>> somme5 = 1 + 2 + 3 + 4 + 5
>>> somme5
15
Ok... Mais quelle est la somme des 100 000 premiers entiers ?
4
Somme des premiers entiers
P5
• On veut calculer la valeur de i=1 =1+2+3+4+5
• Approche itérative :
1. Initialement, s = 0
5
Somme des premiers entiers
P5
• On veut calculer la valeur de i=1 =1+2+3+4+5
• Approche itérative :
1. Initialement, s = 0
2. ajouter à s le prochain entier naturel, 1 : s = 1
5
Somme des premiers entiers
P5
• On veut calculer la valeur de i=1 =1+2+3+4+5
• Approche itérative :
1. Initialement, s = 0
2. ajouter à s le prochain entier naturel, 1 : s = 1
3. ajouter à s le prochain entier naturel, 2 : s = 3
5
Somme des premiers entiers
P5
• On veut calculer la valeur de i=1 =1+2+3+4+5
• Approche itérative :
1. Initialement, s = 0
2. ajouter à s le prochain entier naturel, 1 : s = 1
3. ajouter à s le prochain entier naturel, 2 : s = 3
4. ajouter à s le prochain entier naturel, 3 : s = 6
5
Somme des premiers entiers
P5
• On veut calculer la valeur de i=1 =1+2+3+4+5
• Approche itérative :
1. Initialement, s = 0
2. ajouter à s le prochain entier naturel, 1 : s =1
3. ajouter à s le prochain entier naturel, 2 : s =3
4. ajouter à s le prochain entier naturel, 3 : s =6
5. ajouter à s le prochain entier naturel, 4 : s = 10
5
Somme des premiers entiers
P5
• On veut calculer la valeur de i=1 =1+2+3+4+5
• Approche itérative :
1. Initialement, s = 0
2. ajouter à s le prochain entier naturel, 1 : s =1
3. ajouter à s le prochain entier naturel, 2 : s =3
4. ajouter à s le prochain entier naturel, 3 : s =6
5. ajouter à s le prochain entier naturel, 4 : s = 10
6. ajouter à s le prochain entier naturel, 5 : s = 15
5
Somme des premiers entiers
P5
• On veut calculer la valeur de i=1 =1+2+3+4+5
• Approche itérative :
1. Initialement, s = 0
2. ajouter à s le prochain entier naturel, 1 : s =1
3. ajouter à s le prochain entier naturel, 2 : s =3
4. ajouter à s le prochain entier naturel, 3 : s =6
5. ajouter à s le prochain entier naturel, 4 : s = 10
6. ajouter à s le prochain entier naturel, 5 : s = 15
• Le traitement est (quasiment) identique à chaque étape
5
Somme des premiers entiers
6
Somme des premiers entiers
6
Boucle while
Syntaxe de la boucle while
while condition :
instruction_1
instruction_2
...
instruction_n
a u t r e _ in s t r u c t i o n
• Avec
• condition : expression booléenne, de type bool, appelée condition
de boucle
• instruction_1, instruction_2, . . . , instruction_n sont des
instructions, qui forment le corps de la boucle
• Attention : c’est l’indentation qui délimite le corps de la boucle !
• autre_instruction ne fait pas partie du corps de la boucle
• Et ne pas oublier les :
7
Evaluation de la boucle while
while condition :
instruction_1
instruction_2
...
instruction_n
a u t r e _ in s t r u c t i o n
8
Evaluation de la boucle while
while condition :
instruction_1
instruction_2
...
instruction_n
a u t r e _ in s t r u c t i o n
et on revient à l’étape 1.
8
Evaluation de la boucle while
while condition :
instruction_1
instruction_2
...
instruction_n
a u t r e _ in s t r u c t i o n
et on revient à l’étape 1.
3. Si condition a la valeur False, on sort de la boucle et on interprète
a utr e _ i n s t r u c t i o n
8
Somme des 5 premiers entiers
while i <= 5 :
s = s + i
i = i + 1
print ( s )
9
Simulation de boucle
• Il est parfois difficile de ”voir” le calcul qui est effectué dans une
boucle while
• On s’appuie alors sur les simulations de boucle
10
Simulation de boucle
• Il est parfois difficile de ”voir” le calcul qui est effectué dans une
boucle while
• On s’appuie alors sur les simulations de boucle
Tables de simulation
1. Créer un tableau avec :
1.1 Une colonne par tour de boucle
1.2 Une colonne par variable modifiée par la boucle
2. Première ligne : entrée et valeurs des variables avant la boucle
3. Lignes suivantes : tours effectués et valeurs des variables à la fin du
tour
4. Dernière ligne : (sortie) valeurs des variables au dernier tour
10
Simulation de boucle : somme des 5 premiers entiers
while i <= 5 :
s = s + i
i = i + 1
print ( s )
11
Simulation de boucle : somme des 5 premiers entiers
while i <= 5 :
s = s + i
i = i + 1
print ( s )
11
Simulation de boucle : somme des 5 premiers entiers
while i <= 5 :
s = s + i
i = i + 1
print ( s )
11
Simulation de boucle : somme des 5 premiers entiers
while i <= 5 :
s = s + i
i = i + 1
print ( s )
11
Simulation de boucle : somme des 5 premiers entiers
while i <= 5 :
s = s + i
i = i + 1
print ( s )
11
Simulation de boucle : somme des 5 premiers entiers
while i <= 5 :
s = s + i
i = i + 1
print ( s )
while i <= 5 :
s = s + i
i = i + 1
print ( s )
print ( " En entr ée , s vaut " , s , " et i vaut " , i , " \ n " )
while i <= 5 :
s = s + i
i = i + 1
print ( " A la fin du tour , s vaut " , s , " et i vaut " , i )
12
Trace du programme : utilisation du print
sortie de boucle
la valeur finale de s est 15
13
Notion de terminaison
Notion de terminaison
Terminaison
Une boucle while termine quand sa condition est fausse.
14
Notion de terminaison : erreur classique
while i <= 5 :
s = s + i
print ( s )
15
Notion de terminaison : erreur classique
while i <= 5 :
s = s + i
print ( s )
Erreur classique !
15
Notion de terminaison : erreur classique
while i <= 5 :
s = s + i
print ( s )
Erreur classique !
Règle pour un while
Il faut obligatoirement qu’une des instructions du corps de la boucle
modifie potentiellement la valeur de la condition de sortie de la boucle.
15
Notion de terminaison : somme des 5 premiers entiers
while i <= 5 :
s = s + i
i = i + 1
print ( s )
16
Notion de terminaison : somme des 5 premiers entiers
while i <= 5 :
s = s + i
i = i + 1
print ( s )
16
Notion de terminaison : somme des 5 premiers entiers
while i <= 5 :
s = s + i
i = i + 1
print ( s )
16
Boucle while : quelques
exemples
Factorielle
(
n! = 1 ∗ 2 ∗ 3 ∗ . . . ∗ (n − 1) ∗ n si n > 0
0! = 1
17
Factorielle
(
n! = 1 ∗ 2 ∗ 3 ∗ . . . ∗ (n − 1) ∗ n si n > 0
0! = 1
Approche itérative :
1. Initialement, fact(1) = 1
2. fact(2) = fact(1) ∗ 2
3. fact(3) = fact(2) ∗ 3
4. . . .
17
Factorielle
while i <= n :
fact = fact * i
i = i + 1
18
Factorielle
while i <= n :
fact = fact * i
i = i + 1
18
Suite récursive
Une suite récursive est définie par une condition initiale et une fonction de
récursion : (
u0 = k
un+1 = f (un ) pour n ∈ IN
Par exemple :
(
u0 = 2
un+1 = 3 ∗ un + 4 pour n ∈ IN
19
Suite récursive
Une suite récursive est définie par une condition initiale et une fonction de
récursion : (
u0 = k
un+1 = f (un ) pour n ∈ IN
Par exemple :
(
u0 = 2
un+1 = 3 ∗ un + 4 pour n ∈ IN
u = 2 # valeur au rang 0
n = 5 # valeur de la suite à calculer
i = 1
while i <= n :
u = 3 * u + 4
i = i + 1
u = 2 # valeur au rang 0
n = 5 # valeur de la suite à calculer
i = 1
while i <= n :
u = 3 * u + 4
i = i + 1
20
Suite récursive : simulation
u = 2 # valeur au rang 0
n = 5 # valeur de la suite à calculer
i = 1
while i <= n :
u = 3 * u + 4
i = i + 1
21
PGCD
21
PGCD
21
Algorithme d’Euclide
Algorithme d’Euclide
On veut calculer le PGCD de deux entiers a et b, tels que a ≥ b.
1. Si b 6= 0, le PGCD de a et b est le PGCD de b et du reste de la
division euclidienne de a par b
2. si b= 0, le PGCD de a et b est a
22
Algorithme d’Euclide
Algorithme d’Euclide
On veut calculer le PGCD de deux entiers a et b, tels que a ≥ b.
1. Si b 6= 0, le PGCD de a et b est le PGCD de b et du reste de la
division euclidienne de a par b
2. si b= 0, le PGCD de a et b est a
b 6= 0
22
Algorithme d’Euclide : exemple
23
Algorithme d’Euclide : exemple
23
Algorithme d’Euclide : exemple
23
Algorithme d’Euclide : exemple
23
Algorithme d’Euclide : exemple
23
Algorithme d’Euclide : Implémentation
# Programme qui calcule le PGCD de deux entiers
a = 147
b = 105
while b != 0 :
r = a % b # reste de la division euclidienne
a = b
b = r
print ( " Le pgcd de " , a_init , " et " , b_init , " est " , a )
24
Algorithme d’Euclide : simulation
25
Table de multiplications
Afficher une table de multiplication sous ce format :
Table de multiplication de 8 :
8 * 1 = 8
8 * 2 = 16
8 * 3 = 24
8 * 4 = 32
8 * 5 = 40
8 * 6 = 48
8 * 7 = 56
8 * 8 = 64
8 * 9 = 72
8 * 10 = 80
26
Table de multiplications
Afficher une table de multiplication sous ce format :
Table de multiplication de 8 :
8 * 1 = 8
8 * 2 = 16
8 * 3 = 24
8 * 4 = 32
8 * 5 = 40
8 * 6 = 48
8 * 7 = 56
8 * 8 = 64
8 * 9 = 72
n = 8
print ( " Table de multiplication de " , n , " : " )
i = 1
while i <= 9:
m = n * i
print (n , " * " , i , " = " , m )
i = i + 1
26
Tables de multiplications
27
Tables de multiplications
while i <= n :
print ( " Table de multiplication de " , i , " : " )
j = 1
while j <= 9 :
print (i , " * " , j , " = " , i * j )
j = j + 1
i = i + 1
27
Tables de multiplications
Jusq u ’à qu ’ elle table souhaitez - vous aller ? 2
Table de multiplication de 1 :
1 * 1 = 1
1 * 2 = 2
1 * 3 = 3
1 * 4 = 4
1 * 5 = 5
1 * 6 = 6
1 * 7 = 7
1 * 8 = 8
1 * 9 = 9
Table de multiplication de 2 :
2 * 1 = 2
2 * 2 = 4
2 * 3 = 6
2 * 4 = 8
2 * 5 = 10
2 * 6 = 12
2 * 7 = 14
2 * 8 = 16
2 * 9 = 18 28
Boucle for
Boucles while et boucles for
29
Syntaxe de la boucle for
for var in l is t e_ d e_ v al e ur s :
instruction_1
instruction_2
...
instruction_n
autre_instruction
• Avec
• La variable var prend toutes les valeurs contenues dans
liste_de_valeurs
• instruction_1, instruction_2, . . . , instruction_n sont des
instructions, qui forment le corps de la boucle
• Attention : c’est l’indentation qui délimite le corps de la boucle !
• autre_instruction ne fait pas partie du corps de la boucle
• Et ne pas oublier les :
30
Séquence
for var in l is t e_ d e_ v al e ur s :
instruction_1
instruction_2
...
instruction_n
autre_instruction
31
Intervalle d’entiers : range
Intervalle d’entiers : range
range construit un intervalle d’entiers.
Plusieurs utilisations sont possibles :
32
Intervalle d’entiers : range
Intervalle d’entiers : range
range construit un intervalle d’entiers.
Plusieurs utilisations sont possibles :
• range(8) :
32
Intervalle d’entiers : range
Intervalle d’entiers : range
range construit un intervalle d’entiers.
Plusieurs utilisations sont possibles :
• range(8) : 0, 1, 2, 3, 4, 5, 6, 7
32
Intervalle d’entiers : range
Intervalle d’entiers : range
range construit un intervalle d’entiers.
Plusieurs utilisations sont possibles :
• range(8) : 0, 1, 2, 3, 4, 5, 6, 7
• range(3, 10) :
32
Intervalle d’entiers : range
Intervalle d’entiers : range
range construit un intervalle d’entiers.
Plusieurs utilisations sont possibles :
• range(8) : 0, 1, 2, 3, 4, 5, 6, 7
• range(3, 10) : 3, 4, 5, 6, 7, 8, 9
32
Intervalle d’entiers : range
Intervalle d’entiers : range
range construit un intervalle d’entiers.
Plusieurs utilisations sont possibles :
• range(8) : 0, 1, 2, 3, 4, 5, 6, 7
• range(3, 10) : 3, 4, 5, 6, 7, 8, 9
• range(10, 3) :
32
Intervalle d’entiers : range
Intervalle d’entiers : range
range construit un intervalle d’entiers.
Plusieurs utilisations sont possibles :
• range(8) : 0, 1, 2, 3, 4, 5, 6, 7
• range(3, 10) : 3, 4, 5, 6, 7, 8, 9
• range(10, 3) : intervalle vide
32
Intervalle d’entiers : range
Intervalle d’entiers : range
range construit un intervalle d’entiers.
Plusieurs utilisations sont possibles :
• range(8) : 0, 1, 2, 3, 4, 5, 6, 7
• range(3, 10) : 3, 4, 5, 6, 7, 8, 9
• range(10, 3) : intervalle vide
• range(3, 10, 2) :
32
Intervalle d’entiers : range
Intervalle d’entiers : range
range construit un intervalle d’entiers.
Plusieurs utilisations sont possibles :
• range(8) : 0, 1, 2, 3, 4, 5, 6, 7
• range(3, 10) : 3, 4, 5, 6, 7, 8, 9
• range(10, 3) : intervalle vide
• range(3, 10, 2) : 3, 5, 7, 9
32
Intervalle d’entiers : range
Intervalle d’entiers : range
range construit un intervalle d’entiers.
Plusieurs utilisations sont possibles :
• range(8) : 0, 1, 2, 3, 4, 5, 6, 7
• range(3, 10) : 3, 4, 5, 6, 7, 8, 9
• range(10, 3) : intervalle vide
• range(3, 10, 2) : 3, 5, 7, 9
• range(10, 3, -2) :
32
Intervalle d’entiers : range
Intervalle d’entiers : range
range construit un intervalle d’entiers.
Plusieurs utilisations sont possibles :
• range(8) : 0, 1, 2, 3, 4, 5, 6, 7
• range(3, 10) : 3, 4, 5, 6, 7, 8, 9
• range(10, 3) : intervalle vide
• range(3, 10, 2) : 3, 5, 7, 9
• range(10, 3, -2) : 10, 8, 6, 4
32
Boucle for : quelques exemples
Somme des n premiers entiers
s = 0
n = 5
33
Parcours d’un mot
34
Parcours d’un mot
* b *
* o *
* n *
* j *
* o *
* u *
* r *
34
Parcours d’une chaine de caractère
nb_voyelles = 0
print ( " ’" , chaine , " ’ contient " , nb_voyelles , " voyelles " )
35
Parcours d’une chaine de caractère
nb_voyelles = 0
print ( " ’" , chaine , " ’ contient " , nb_voyelles , " voyelles " )
35
Boucles imbriquées : affichage des multiples d’une série de
nombres
On souhaite écrire un programme qui donne l’affichage suivant :
Quel est le nombre maximum ? 8
1 est un nombre premier
2 est un nombre premier
3 est un nombre premier
4 est é gal à 2 * 2
5 est un nombre premier
6 est é gal à 2 * 3
6 est é gal à 3 * 2
7 est un nombre premier
8 est é gal à 2 * 4
8 est é gal à 4 * 2
36
Boucles imbriquées : affichage des multiples d’une série de
nombres
On souhaite écrire un programme qui donne l’affichage suivant :
Quel est le nombre maximum ? 8
1 est un nombre premier
2 est un nombre premier
3 est un nombre premier
4 est é gal à 2 * 2
5 est un nombre premier
6 est é gal à 2 * 3
6 est é gal à 3 * 2
7 est un nombre premier
8 est é gal à 2 * 4
8 est é gal à 4 * 2
37
Pour conclure
Résumé du cours
Aujourd’hui, on a vu
38