Avant -propos

Cette page sert à acquérir la notion de boucle répétitive en algorithmique et son implémentation dans le langage Python. Cette page contient :

Découverte

Un exemple introductif

Virgile veut expliquer, par téléphone, à son ami Dante comment dessiner la frise dessinée sur le quadrillage ci-dessous : frise Il utilise pour cela les instructions suivantes :

  1. Donner la suite d’instructions que Virgile doit transmettre à Dante :

  2. Identifier une séquence d’instructions qui se répète plusieurs fois.

  3. Combien de fois est-elle répétée ?

Code de déblocage du lien menant à la correction :

Formalisation

Lorsque l’on doit dans un programme effectuer plusieurs fois la même tâche pendant un nombre connu d'itérations (=répétitions), on utilise une boucle répétitive, c’est à dire une boucle du type ci-contre :

Pour variable allant de valeurdépart à valeurfin faire tâche Fin_Pour

Les coureurs de 10000 mètres doivent parcourir 25 tours d'une piste faisant 400 mètre de longueur. Ils savent à l'avance qu'ils doivent effectuer 25 tours pour franchir la ligne d'arrivée. On peut modéliser cette course par l'algorithme suivant en pseudo-langage :

Pour tour allant de 1 à 25 faire courir un tour de piste Fin_Pour afficher("Arrivée")

Voici un algotihme écrit en pseudo-langage et aussi en Scratch2 comme vous avez normalement déjà vu au collège :

Programme en pseudo-langage Programme en Scratch2
Saisir X # correspond en langage Python à : input("X=") Y ← 1 # correspond en langage Python à : Y = 1 Pour i allant de 1 à 4 faire # ici le comteur est noté i Y ← Y×X # correspond en langage Python à : Y = Y*X Fin_Pour Afficher(Y) # correspond en langage Pyton à : print(Y)
programme en Scracth2
  1. Quel calcul est répété dans la boucle répétitive Pour ?

  2. Combien de fois l’instruction Pour permet de répéter ce calcul ?

    1. Reproduire et compléter le tableau ci-dessous pour en déduire la valeur de Y affichée en fin de programme.

      Avant le début de la boucle

      Fin de la première itération

      Fin de la deuxième itération

      Fin de la troisième itération

      Fin de la quatrième itération

      X vaut ... ... ... ... ...
      i vaut ... ... ... ... ...
      Y vaut ... ... ... ... ...
    2. Quelle est la valeur de Y qui sera affichée ?

    Code de déblocage du lien menant à la correction :

  3. Reproduire la démarche précédente afin de connaître la valeur de Y affichée si initialement X prend la valeur 3.

    Code de déblocage du lien menant à la correction :

  4. Plus généralement, exprimer en fonction de la lettre X l'expression de Y qui sera affichée.

    Code de déblocage du lien menant à la correction :

exercice de renforcement

Un village en zone périurbaine compte aujourd'hui 2300 habitants. Le village voit sa population augmenter chaque année de 150 habitants. Pour étudier l'évolution de la population au cours du temps, un cabinet d'experts propose au conseil municipal l'algorithme suivant (écrit en oseudo-langage à gauche et en Scratch 2) :

Programme en pseudo-langage Programme en Scratch2
Entrer N P ← 2300 Pour i allant de 1 à N faire P ← P+150 Fin Pour Afficher P
programme en Scracth2
  1. Compléter le tableau pour en déduire la valeur de P affichée en sortie lorsque l'on saisit 4 dans la variable N.

    Avant le début de la boucle

    Fin de la première itération

    Fin de la deuxième itération

    Fin de la troisième itération

    Fin de la quatrième itération

    N vaut ... ... ... ... ...
    P vaut ... ... ... ... ...
    i vaut ... ... ... ... ...
  2. Quel est le sens concret de la valeur P affichée en sortie lorsque l'on saisit 4 dans la variable N ?

  3. Code de déblocage du lien menant à la correction :

  4. Que permet d'afficher l'algorithme si l'instruction "Afficher P" est dé placée comme ci-dessous ?

    Entrer N P ← 2300 Pour i allant de 1 à N faire P ← P+150 Afficher P # l'affichage est déplacé ici, c'est le seul changement Fin Pour
  5. Comment utiliser l'algorithme pour connaître la population prévisible de la commune en 2030 ?

  6. Code de déblocage du lien menant à la correction :

exercice de renforcement

Votre ami Crésus dispose d'une somme de 1000€ qu'il décide de placer en banque. La banque lui propose pour un placement d’un montant de 1000 euro fait le $\text{1}^\text{er}$ janvier 2021, un taux d’intérêt composé annuel de 2 %. Cela signifie qu’à la fin de chaque année la somme en banque augmente de 2%.

Augmenter de 2% revient à multiplier par $\displaystyle{\left(1+\frac{2}{100}\right)}$.

  1. Quelle somme d'argent disposera Crésus sur son placement en janvier 2022 ?

  2. Quelle somme d'argent disposera Crésus sur son placement en janvier 2023 ?

  3. Code de déblocage du lien menant à la correction :

  4. Le but est de connaître la somme présente sur le placement au bout de 10 ans, soit en janvier 2031, en supposant qu'aucun retrait ne sera effectué.
    Pour cela, reproduire et compléter l'algorithme en pseudo-code ci-dessous en sachant que :

    • N correspond à l'année considérée,

    • P à la somme présente sur son placement l'année N.

    • i est le compteur de la boucle répétitive Pour.

    N ← ………………… P ← ……………… Pour i allant de ……… à ……… N ← …………………………………… P ← …………………………………… ……………………………………………… FinPour Afficher (« Au bout de 10 ans, Crésus aura » ,…………,« €.»)

    Il se peut que certains ………………………… doivent rester vides.

Code de déblocage du lien menant à la correction :

Boucle itérative en langage Python : for

Avec l'instruction range

La boucle répétitive

Pour i allant de 0 à n instruction 1 instruction 2 ... FinPour

s'écrit en langage Python avec les mots-clés for et range comme ci-dessous :

for i in range(n+1):
	instruction 1
	instruction 2
	...
    

Cette boucle suivante écrite en Python fait le calcul : $0+1+2+3+4+5$

s=0
for i in range(6):
    s=s+i
print(s)
  1. Vérifier en copiant ce code dans Edupuython que le résultat affiché correspond bien à la somme $0+1+2+3+4+5$.

  2. Modifier le code précédent de sorte d'afficher la somme $0+1+2+3+...+99+100$.

  3. Code de déblocage du lien menant à la correction :

Vous pouvez visualiser les différentes étapes de calcul mises en oeuvre dans cet algorithme dans le cas où il s'arrête avec $i=10$ :

Plus généralement, lors de l'instruction for i in range(m,n), où m et n sont deux entiers tels que n>m, i prend toutes les valeurs entières entre m et n-1.

Le code suivant :

for i in range(5,9):
    print(i)

affiche successivement : 5, 6, 7 et 8. La dernière valeur de i est donc 8 puisque range se termine avec 9.

Écrire un programme qui demande à l'utilisateur $n$ est un entier naturel $n$ supérieur à 10 et qui affiche la valeur de la somme $10+11+12+...+n$.

Code de déblocage du lien menant à la correction :

exercice de renforcement

Un village en zone périurbaine compte aujourd'hui 2300 habitants. Le village voit sa population augmenter chaque année de 120 habitants.

  1. Proposez un programme qui demande à l'utilisateur un entier $N$ correspondant au nombre d'années projetés à partir de cette année et qui renvoie la population de ce village au bout de $N$ années écoulées.

  2. Testez votre fonction avec quelques valeurs.

S'aider de l'exercice similaire accessible ici où l'algorithme a été écrit en pseudo-code.

Code de déblocage du lien menant à la correction :

Correction de l'exercice en vidéo accessible par ce lien.

exercice de renforcement

Proposez un programme qui affiche tous les résultats possibles (éventuellement redondants) du produit deux nombres entiers compris entre 0 et 10.

Pour affciher un résutat comme "2*3=6" o ù 2 et 3 sont stockés dans deux variables a et b, il suffit de saisir le code print(a,"*",b,"=",a*b).

Code de déblocage du lien menant à la correction :

exercice de renforcement

On considère le programme ci-contre écrit en Python :

a = "Je vous dis"
for loop in range(1,5):
    a = a + " bravo"
a = a + "!"
print(a)
  1. Saisir le code sur EduPython.

  2. Quel est le type de valeur stockée de la variable a ?

  3. Quel affichage obtient-on ?

  4. Combien de fois a été répété le mot bravo ?

  5. Que se passe-t-il si l’on omet le symbole : à la fin de la deuxième ligne ?

  6. Que se passe-t-il si on remplace la variable loop par une variable nommée remplace ? Pourquoi ?

  7. Comment repère-t-on la fin de la tâche qui est répétée ?

  8. Quel est le rôle du symbole + sur des chaînes de caractères ?

  9. Comment modifier ce programme pour obtenir 8 fois le mot bravo dans la phrase répétée ?

Code de déblocage du lien menant à la correction :

sur un objet itérable

La structure "for" avec in

Voici la structure en Python d'une boucle for avec in

for elt in iterable:
	instruction 1
	instruction 2
	...
			

Dans cette boucle, elt va parcourir les éléments de la iterable.

La iterable peut être une chaine de caractères.

Le programme ci-dessous affiche séparément chaque caractère d'une chaîne de caractères :

# -*- coding: utf-8 -*-
ch="Bonjour à tou.te.s"
for elt in ch:
    print(elt)

Vérifier que le programme .

Tester le script ci-dessus pour vérifier qu'il réalise bien à ce qui a été annoncé et modifier la chaîne de carctères avec une autre phrase (Vous pouvez aussi rajouter des nombres et des symboles).

  1. Que fait le code suivant :

    # -*- coding: utf-8 -*-
    citation="Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions."
    compteur=0
    for elt in citation:
    	if elt=="e":
    		compteur=compteur+1
    print(compteur)
    	
  2. Transformer le code pour qu'il compte le nombre de i.

Code de déblocage du lien menant à la correction :

exercice de renforcement

Proposer un programme en langage Python qui demande à l'utilisateur une phrase (=chaîne de caractères) et qui remplace tous les "e" de la phrase saisie par un espace " ".

Code de déblocage du lien menant à la correction :

Exercices

Sur la notion de boucle répétitive Pour

La famille Elpmip va consacrer 2000€ cette année 2021 pour ses loisirs. Afin d'économiser pour un projet immobilier, la famille Elpmip prévoit de réduire chaque année son budget loisir de 5% par an.

Diminuer de 5% revient à multiplier par $\displaystyle{\left(1-\frac{5}{100}\right)}$.

  1. Calculer le budget loisir B de la famille Elpmip prévu pour 2022 ?

  2. Quel budget cumulé aura consacré en tout la famille Elpmip au cours des deux premières années 2021 et 2022 ?

  3. Le but est de connaître le budget total T consacré à ses loisirs par la famille Elpmip sur les 5 prochaines années, en supposant que le plan d'économie est respecté.
    Pour cela, reproduire et compléter l'algorithme en pseudo-code ci-dessous en sachant que :

    • N correspond à l'année considérée,

    • B au budget loisirs consacré par la famille Elpmip l'année N.

    • T au budget total loisirs consacré par la famille Elpmip entre 2021 et l'année N.

    • i est le compteur de la boucle répétitive Pour.

    N ← ………………… B ← ………………… T ← ………………… Pour I allant de ………… à ………… N ← ……………………………………… ………… ← ……………………………………… ………… ← ……………………………………… FinPour Afficher (« Au bout de 5 ans, le budget total loisirs sera de», ………, « €.»)

    Il se peut que certains ………………………… doivent rester vides.

Votre ami Youssouf possède une somme S de 5000€ qu’il aimerait placer sur un compte rémunéré à la banque.
La banque lui propose un taux à intérêts composés de 3% l’an, c’est à dire que son compte est augmenté de 3% chaque année. Youssouf voudrait connaître la somme d’argent qu’il possèderait chaque année ainsi que la somme totale au bout de 10 ans.

Il fait appel à vous afin que vous lui proposiez un algorithme permettant de savoir le capital au bout de 10 ans. Réaliser cet algorithme.

Alain place, début janvier 2021, 6000€ sur un compte rémunéré à 1% l’an. Chaque début d’année suivante, il placera 1200€ sur ce compte en plus. Il décide de faire fructifier ce compte jusqu'au début janvier 2030. Il veut savoir quelle somme d’argent sera sur ce compte début janvier 2030.

Recopier et compléter l’algorithme ci-dessous traduisant le problème de placement sachant que la variable S correspond à la somme sur le compte et N au nombre d’années déjà écoulées :

N ← ………………… S ← ………………… …………………………… …………………………………………………………………… faire ………… ← ……………………………………… ………… ← ……………………………………… FinPour Afficher (« La somme finale sur le compte sera de», ………, « €.»)
  • introduire d’autres variables si besoin à condition de les définir dans les variables,

  • ne pas utiliser tous les espaces pointillés.

Implémentation en Python avec for et range

Mme Elmip Lise veut placer 20000€ sur un compte rémunéré au taux d’intérêt composé de 1% (chaque année, la somme d’argent placée augmente de 1%).

Mme Elmip Lise a fait appel à un ami afin de savoir quelle somme elle disposera sur ce compte au bout de 10 ans, sans retrait intermédiaire.

  1. Cet ami lui propose l'algorithme suivant :

    capital = 20000
    for i in range(1,10)
        capital = capital * (1+1/100)
    print(capital)

    Vous paraît-il correct ou non pour répondre au problème de Mme Elpmip ? Si non, proposez une correction.

  2. Corriger éventuellement cet algorithme puis l'exécuter sur EduPython pour répondre à la question que se pose Mme Elpmip.

  3. Modifier l'algorithme précédent afin que le programme :

    • demande le nombre d'années du placement à l'utilisateur du programme,

    • stocke ce nombre d'années dans une variable annee,

    • affiche le capital sur le compte au bout de ce temps de placement.

M. Ed Moah veut placer 15000€ sur un compte rémunéré au taux d’intérêt composé de 1.5% (chaque année, la somme d’argent placée augmente de 1.5%).

M. Ed Moah fait appel à vous afin de savoir quelle somme il disposera sur ce compte au bout de 10 ans, sans retrait intermédiaire.

  1. Compléter l’algorithme ci-dessous écrit en Python (C stocke le capital sur le compte) :

    C = ....................
    for ..................
        C = ..............
    print(...)
  2. Programmer cet algorithme sur Python pour répondre à la question de M. Ed Moah.

Afin de faire une promotion sur les pommes, un supermarché décide de les présenter en faisant un empilement esthétique sous forme d'une pyramide à base carrée. Au sommet (1er étage), il y a une pomme, au-dessous (étage 2), il y a 4 pommes, au-dessous (3ème étage), il y a 9 pommes, et ainsi de suite. Pour visualiser :

empilement
  1. Combien y-a-t-il de pommes à l'étage $i$ ?

  2. Compléter le script ci-dessous afin qu'il permette de calculer le nombre total de pommes pour réaliser une pyramide à 10 étages.

    n = 10
    nb_pommes = ......
    for ..................
        nb_pommes = ..............
  3. Combien de pommes faut-il pour construire une telle pyramide à 10 étages ?

Plusieurs légendes sont associées au jeu d'échecs. L'une d'elles situe la scène en Inde. Un roi s'ennuyant promit une récompense à qui saurait fortement le distraire. Le brahmane Sissa lui présenta le jeu d'échecs. Le roi pour le remercier pour ce jeu si distrayant lui demanda ce que le brahmane désirait en échange de cette découverte.
Le sage Sissa demanda au roi de déposer un grain de riz sur la première case, deux grains sur la deuxième, quatre sur la troisième case et ainsi de suite en faisant en sorte de doubler le nombre de grains de riz en passant d'une case à l'autre. Un échiquier ne comportant que 64 cases, le roi trouva cette demande modeste.

  1. Combien de grains de riz sont présent sur la ième case de l'échiquier ?

  2. Proposer un script en langage Python qui détermine le nombre de grains de riz présents sur un échiquier entièrement complété.

  3. Dans sa publication de juin 2018, le département américain de l’agriculture (USDA) a évalué l’offre mondiale de riz à 631,2 millions de tonnes pour la campagne 2017-2018. De plus, il est estimé qu'en moyenne, 1000 grains de riz pèsent 32 grammes.

    Que penser de la demande de Sissa ?

  1. Proposer un code qui affiche toutes les manières possibles d’obtenir un euro avec des pièces de 2 centimes et de 5 centimes.

  2. Améliorer le code afin qu'il affiche le nombre de possibilités différentes d'obtenir ainsi un euro.

Exercices de renforcement

Sur la notion de boucle répétitive Pour

Voici un algotihme écrit en pseudo-langage :

Saisir X # correspond en langage Python à : input("X=") Y ← 0 # correspond en langage Python à : Y = 1 Pour i allant de 1 à 5 faire # ici le comteur est noté i Y ← Y+X # correspond en langage Python à : Y = Y+X Fin_Pour Afficher(Y) # correspond en langage Python à : print(Y)
  1. Quel calcul est répété dans la boucle répétitive Pour ?

  2. Combien de fois l’instruction Pour permet de répéter ce calcul ?

    1. Reproduire et compléter le tableau ci-dessous pour en déduire la valeur de Y affichée en fin de programme.

      Avant le début de la boucle

      Fin de la première itération

      Fin de la deuxième itération

      Fin de la troisième itération

      Fin de la quatrième itération

      Fin de la dernière itération

      X vaut ... ... ... ... ... ...
      i vaut ... ... ... ... ... ...
      Y vaut ... ... ... ... ... ...
    2. Quelle est la valeur de Y qui sera affichée ?

  3. Quelle est la valeur de Y affichée si initialement X prend la valeur 6.

  4. Plus généralement, exprimer en fonction de la lettre X l'expression de Y qui sera affichée.

Pour accéder à une correction : lien direct.

Un lac subit l'invasion d'une algue proliférante. On admet que la masse d'algues, en kilogrammes, N années après aujourd'hui est notée Q, valeur qui est obtenu par l'algorithme suivant, écrit en pseudo-code :

Entrer N Q ← 100 Pour i allant de 1 à N faire Q ← Q×1.1 Fin Pour Afficher Q
  1. Compléter le tableau pour en déduire la masse d'algues proliférantes dans 5 ans.

    Avant le début de la boucle

    Fin de la première itération

    Fin de la deuxième itération

    Fin de la troisième itération

    Fin de la quatrième itération

    Fin de la cinquième itération

    N vaut ... ... ... ... ... ...
    Q vaut ... ... ... ... ... ...
    i vaut ... ... ... ... ... ...
  2. Comment modifier le programme de sorte que la masse d'algues soit affichée chaque année ?

Pour accéder à une correction : lien direct.

Sur la boucle répétitive implémentée en Python : for

Écrire un programme qui demande à l'utilisateur de saisir un entier naturel $n$ non nul et qui affiche la valeur de $1^2+2^2+...+n^2$.

Pour accéder au code de la correction : lien

Éléonore Wouétel fait des économies. Elle a placé en début d'année 1000€ sur un compte rémunéré en banque. Elle pense que durant chacune des huit années suivantes, elle pourra déposer sur ce compte 200€.
De plus, la banque lui verse, à la fin de chaque année, 1% d'intérêt, c'est à dire qu'elle rajoute sur le compte 1% de la somme présente sur le compte en début d'année.

Proposer un algorithme qui affiche la somme qu'Élénore aura sur son compte au bout de huit années de placement.

Pour accéder au code de la correction : lien

Proposer une fonction nommée nb_voyelles qui prend en arguments une chaîne de caractères et qui renvoie le nombre de voyelles (minuscules non accentuées) de cette chaîne. Tester ensuite par exemple en exécutant nb_voyelles("Ah oui ! Vive l'été !"").

Vous pouvez utiliser le mot-clé or ; exemple : elt=='e' or elt='i' signifie que l'on teste si "elt est un 'e' ou un 'i' ".

Pour accéder au code de la correction : lien

Licence Creative Commons
Les différents auteurs mettent l'ensemble du site à disposition selon les termes de la licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International