Aller au contenu

Python - Boucles Pour

I. de simples répétitions⚓︎

Exemple : la situation

Les enfants du village vous ont posé beaucoup de questions sur ce que font les enfants sur Terre. Ils ont été supris d'apprendre que, comme eux, les enfants terriens doivent aller à l'école. Et ils ont trouvé très étonnant que ceux-ci doivent lever le doigt pour demander la permission de parler en classe, car eux doivent pencher la tête pour cela.

Ce que vous n'aviez pas prévu, c'est qu'une petite fille trouverait amusant de lever le doigt comme une terrienne. Sa maîtresse n'a pas du tout apprécié car, pour cette tribu, lever le doigt de cette manière est une grave insulte au grand sorcier ! La petite fille a été sévèrement punie et vous la retrouvez en pleurs. Vous vous sentez un peu responsable et décidez de l'aider à faire sa punition.

Mon info

Ainsi, imaginons que l'on souhaite écrire 5 fois « Coucou ». On pourrait le faire avec le programme suivant :

print("Coucou")
print("Coucou")
print("Coucou")
print("Coucou")
print("Coucou")

C'est plutôt convenable ici… Mais si on veut effectuer par exemple 1 000 affichages, cela va devenir bien plus fastidieux !

Pour plus d'efficacité, on aimerait indiquer directement que l'on souhaite répéter l'affichage en boucle, de la même manière qu'on pourrait écrire en français :

Répéter 5 fois :
\(\hspace{2em}\) Afficher "Coucou"

Comme pour les instructions conditionnelles, on utilise l'indentation pour définir le bloc d'instructions qui doit être répété.

En Python, pour répéter 5 fois l'instruction qui affiche « Coucou », on va écrire le programme ci-dessous. En effet, en anglais "loop" signifie "boucle". On peut considérer que la variable loop contient le numéro de la boucle que l'on est en train de réaliser.

for loop in range(5):
    print("Coucou")

qui va produire cette sortie :

Coucou
Coucou
Coucou
Coucou
Coucou

Au lieu de la variable loop, on trouve souvent la variable i. Cela donne :

for i in range(5):
    print("Coucou")

Pour coder la répétition, nous avons utilisé la structure suivante :

for i in range(5):
    bloc d'instructions

Vous pouvez donc écrire une boucle de cette façon, en indiquant le nombre de répétitions à la place du chiffre 5.

Nous éluciderons par la suite les mystères de cette écriture. Prenez garde à ne pas oublier le deux-points : à la fin de la ligne.

Tester - 1

Recopier à la main l'exemple donné ci-dessus avec la variable loop

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Tester - 2

Recopier à la main l'exemple donné ci-dessus avec la variable i

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Tester - 3

👉 Remarque : vous trouverez aussi des codes comme celui-ci

for _ in range(5):
    print("Coucou")

Recopier à la main l'exemple donné ci-dessus avec la variable _

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
À vous de jouer - 1

Votre programme doit écrire 7 fois la phrase : "Je dois respecter le Grand Sorcier.", en plaçant cette phrase exactement une fois sur chaque ligne. Attention, si votre programme n'affiche pas exactement cette phrase avec les points et la majuscule là où il faut, il faudra tout recommencer.

Important : votre programme ne doit pas faire plus de 2 lignes

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Solution
for i in range(7):
    print("Je dois respecter le Grand Sorcier.")
Erreurs fréquentes

Il est facile de se tromper dans les boucles lorsqu'on n'a pas l'habitude.

  • Si on oublie le : à la fin de la ligne :

SyntaxError: invalid syntax

  • Si l'on oublie d'indenter :

SyntaxError: expected an indented block

😊 Face à ce type d'erreur, on pensera donc à vérifier que le deux-points est bien présent et que l'indentation a été faite.

Corrigez l'erreur

Testez puis corrigez la ou les erreurs dans le script suivant :

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Solution
for i in range(10):  # (1)
    print("J'ai tout compris 😊 !")  # (2)
  1. Ne pas oublier : en fin de ligne

  2. Ne pas oublier l'indentation (grâce à une tabulation)

Cliquer sur les + pour lire les explications

II. for i in range(...)⚓︎

Le gourmand insatiable

Bob découvre un beau fraisier....

  • Il cueille une fraise et la mange.
  • Y prenant goût, il y retourne et cette fois prend 2 fraises.
  • N'y tenant plus, il y retourne et prend cette fois 3 fraises.

Et ainsi de suite, à chaque fois, il ne peut pas s'en empêcher, il y retourne. Et à chaque fois il prend une fraise de plus que la fois précédente !

👉 Testez ci-dessous. Quel est le problème ?

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Solution

L'affichage produit n'est pas le bon.

On voudrait obtenir :

Bob mange  1 fraises
Bob mange  2 fraises
Bob mange  3 fraises
Bob mange  4 fraises
Bob mange  5 fraises
Bob mange  6 fraises
Bob mange  7 fraises
Bob mange  8 fraises
Bob mange  9 fraises
Bob mange  10 fraises
Rectifier le code

Rectifier ci-dessous pour obtenir l'affichage désiré.

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Solution 1
nombre = 1

for i in range(10) :
    print("Bob mange ", nombre, "fraises")
    nombre = nombre + 1  # à chaque cueillette, il mange une fraise de plus
Solution 2
nombre = 0

for i in range(10) :
    nombre = nombre + 1  # à chaque cueillette, il mange une fraise de plus
    print("Bob mange ", nombre, "fraises")      
Tester for i in range

Tester puis répondre à la questions suivante : Quelles sont les valeurs prises par la variables i lorsqu'on exécute l'instruction
for i in range(10) ?

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Solution

i prend successivement les valeurs 0, 1, 2, 3, 4, 5, 6, 7, 8 et 9.

Cela correspond à 10 valeurs différentes.

Mon info

🖐️ Dans les activités précédentes, vous avez écrit des codes contenant des boucles, servant à répéter des instructions.
Mais la variable, nommée loop ou plus simplement i, n'était pas utilisée dans la boucle.

💡 Quand on veut simplement répéter plusieurs fois un bloc d'instruction, on n'a en effet pas besoin d'utiliser cette variable. Mais dans de très nombreux cas, cette valeur nous est très utile.

À vous de jouer 2

Ecrire un code qui affiche :

i = 0  
i = 1  
i = 2
...  
i = 49 
i = 50

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Solution
for i in range(51):
    print("i = ", i)
Les fraises de Bob

Pour résoudre le problèmes des cueillettes de Bob, nous n'avions en réalité pas besoin de la variable nombre

Tester :

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Doit-on toujours démarrer à 0 ?

😊 Non !

Il est possible de modifier cela. Dans l'exemple qui précède, à la première cueillette, il mange 1 fraise. Ce serait donc plus pratique si le compteur i démarrait à 1, non ?

On peut le faire, mais attention à bien conserver 10 itérations....

Tester ci-dessous :

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier

Ce code doit afficher, à chaque cueillette, combien Bob mange de fraises. Mais le code n'est pas correct :

Remarque

Nous avons modifié l'appel de range().

Au lieu de range(10) nous avons écrit range(1, 10).

  • au début i prend la valeur 1
  • A la fin i prend la valeur 9 (comme avant, ça n'a pas changé), et pas à 10, il nous manque donc une cueillette...
Solution : le code correct pour 10 cueillettes

Tester ci-dessous :

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Doit-on toujours incrémenter de 1 ?

😊 Non !

Bob est encore plus gourmand

😂 On va changer un peu les données du problème. A la première cueillette, Bob mange 5 fraises. A la seconde, 10 fraises.
A la suivante, 15 fraises.
Et à chaque cueillette, il augmente de 5....

Le nombre de fraises est donc 5, puis 10, puis 15 etc...

On pourrait facilement s'en sortir si on avait une variable i qui commence à 5, augmente de 5 en 5, et s'arrête à .... ???

Là encore, attention à bien conserver 10 itérations....

👉 Le plus simple es de se poser les 3 questions qui importent :

  • quelle est la valeur de départ ?
  • quelle est l'incrément ?
  • quelle est la valeur finale ?

😀 Les 2 premières sont déjà résolues : on commence à 5 et on incrémente de 5.

🌵 La troisième question est plus délicate. Combien de fraises mange-t-il à la 10ème cueillette ?

La réponse est \(50\) :

  • à la 1ere cueillette : \(1*5\) fraises
  • à la 2ème cueillette : \(2*5\) fraises
  • à la 3ème cueillette : \(3*5\) fraises
    etc...

💡 Nous allons donc faire une boucle pour laquelle :

  • au début i = 5
  • incrémente de \(5\)
  • la dernière est i = 50

Tester ci-dessous :

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier

Modifiez la valeur 55 dans le code ci-dessus, et comprenez ce qu'il se passe :

Essayer par exemple : 51, 52, 54, 49 ...

Exemple

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier

III. La syntaxe par l'exemple⚓︎

for i in range(n)

Important

Prenez le temps de lire les commentaires !

Cliquez sur les +

for i in range(4):  # (1) (2)
   print(i)  
  1. ⚠ Le caractère : est obligatoire après if, elif, else, for et while. Il provoque l'indentation automatique du bloc d'instruction qui suit.

  2. ⚠ i prend les valeurs entières de l'intervalle [0; 4[

Tester :

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier

Un seul argument

Dans cet exemple nous avons appelé la fonction range avec une seul argument qui est 4.

Table de multiplication

Tester :

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Améliorer la table de multiplications ? (Cliquer)

D'habitude, on ne commence pas à \(0 \times\) nombre, mais à \(1 \times\) nombre

Tester :

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier

Deux arguments

Dans cet exemple nous avons appelé la fonction range avec deux arguments qui sont 1 et 11.

for i in range(a, b)

Important

Prenez le temps de lire les commentaires !

Cliquez sur les +

for i in range(2, 5):  # (1)
    print(i)  
  1. ⚠ i prend les valeurs entières de l'intervalle [2; 5[

Tester :

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
for i in range(a, b, pas)

Important

Prenez le temps de lire les commentaires !

Cliquez sur les +

for i in range(1, 10, 2):  # (1)
print(i)  
  1. ⚠ i prend les valeurs entières de l'intervalle [1; 10[ avec un pas de 2

Tester :

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier

Trois arguments

Dans cet exemple nous avons appelé la fonction range avec trois arguments qui sont 1, 10 et 2.

Parcours par éléments

Important

Prenez le temps de lire les commentaires !

Cliquez sur les +

for lettre in "NSI":  # (1)
    print(lettre)  
  1. ⚠ lettre prend comme valeurs successivement tous les caractères de "NSI"

Tester :

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier

IV. Exercices⚓︎

Exercice 1

Question 1

Vous devez faire une boucle qui affiche les numéros suivants, Utilise une boucle for i in range(...) avec un seul argument :

3
6
9
12
15
18

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Solution : Question 1
for i in range(6) :
    print("numéro :", 3 * (i + 1))

Question 2

Vous devez faire une boucle qui affiche les numéros suivants, Utilise une boucle for i in range(...) avec deux arguments :

3
6
9
12
15
18

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Solution : Question 2
for i in range(1, 7) :
    print("numéro :", 3 * i)

Question 3

Vous devez faire une boucle qui affiche les numéros suivants, Utilise une boucle for i in range(...) avec trois arguments :

3
6
9
12
15
18

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Solution : Question 3
for i in range(3, 19, 3) :
    print("numéro :", i)
Exercice 2

Question 1 : initialisation : Choix de a et n

Exécuter le script ci-dessous pour observer les variables a et n qui ont automatiquement été choisies.

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier

Question 2

Vous devrez déterminer la valeur de a à la fin de la boucle for, juste en réfléchissant. Il est recommandé de réaliser un tableau de déroulé.
Les variables a et n ont été choisies automatiquement (et affichées) lorsque vous avez exécuté le code du cadre précédent.

Pour savoir si vous avez trouvé la bonne réponse, exécuter le script suivant, et saisir la réponse que vous avez trouvée.

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Solution

i prend toutes les valeurs entières de 0 à n - 1, soit n valeurs.
A chaque itération a augmente de 2, donc en tout a augmente de 2 \(\times\)n.
En sortie de boucle a vaut donc a + 2 \(\times\)n.

Exercices 3 à faire sur papier

1. Question 1.
Ecrire un code Python qui affiche les entiers de 0 à 11

Solution
for i in range(12): 
    print(i)

2. Question 2.
Ecrire un code Python qui affiche les entiers de 10 à 21

Solution
for i in range(10, 22) : 
    print(i)

3. Question 3.
Ecrire un code Python qui affiche Les carrés des entiers entre 1 et 10 compris

Solution
for i in range(1, 11) :
    print(i ** 2)

Exercice 4 : QCM

  • On donne le script suivant :

    somme = 0
    for i in range(1, 6):
        somme = somme + i
    print(somme)
    
    Que s'affiche-t-il ?

    • 15

    • 21

    • 10

    • 0

    • Autre

Solution

Ce code fait la somme 0+1+2+3+4+5

Exercice 5

Compléter le code suivant. A la fin la variable somme vaut la somme des entiers de 1 à 100 (compris).

Aucun affichage n'est demandé.

⚠️ N'oubliez surtout pas de valider valider après avoir exécuté play

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 5/5
.128013vP/2iSpn1g07o klefa=,)+_y-mwdtus(3rh:bc050D0r0E0t0f0q0G0o0N0q0t0G0G0u010E0f0h010406050G0F0B0B0t0J0z040g0n0q0F0(0n0i050d0/0;0?0^0-0h041118051b0d180-0D0f0b0W0Y0!0$0Y0i0k0F0t0k0r0A0h0z0E0K0 0o0K0f0k0K0q1D0K0E0+050R0M0q0r1k0Z0#011C1E1G1E0E1M1O1K0E0J191y0W0{0G0h0t0i0$0e011Q1m010s0T0r0i0t0B0r1K1,1.1?1S1_1O1|1~0+0a0o0c0J0n0h0n0G0f0~0i0o0P1*0J0J0r0N2j11210i190d1y2w1$1(1%1L0D231n0f0i1{2g1K1h1j0X1R2G2I0i0n2M1K0h2p192u2w2Z0.1-2k2O1@2S0J0=0q1K0t1B2p0s0$030y0y0N2T0r1G2R0n0A0e0m0A0j0+0j110t2!2%0,2$222)1S2+2-2/2;0r2?012^2`2|2~2J31331;040e383a1.3c2u2F013h0t2.192:0K2=2@2_2{0P3r2S3t0A0I0+0I3y2t3b1a2X112M2z0D1(2E3f0$3O1 193%1c3#2#123Z3.2Y2%0o0f0D0$2_2u3S353I3}3 013N3q2H3s32341=270r403p3P4b3R4d443X3C3,3E0+0G0n0;0r3Y3A0o3d2(1l1S0n0+0u4y2v4A4q4D0$0B0f0+0l4I3c3^3A4B464i424d3v052:3~4i3.3Q304!4f1}4h484j2}4l4,3u1K0d394W4r0p0+0s0n0J4S4K3|4r0i0+0f544}4M010n0C59104U4J5c2P3E0M0+0J1.1t4S5l1@0*040H5t4L5m4O365z565d5w0v5b5A1@5C040j0l375j3{3e5G0+0w0L4S0-5R4W4(4;4Z333U455$494k2 3S3U0o4g4)4a5/4d5*3y0o5}555T5m58044u4w5J5F5m4F044H5R5 4C614t4v1~66601@690x6j6e2*595Y5t0d3`3!0r2w3;2x3)112A6C0t1N6x3$1i4T0P0R0T0G04.
Exercice 6

Compléter le code suivant. A la fin la variable produit vaut le produit des entiers de 1 à 10 (compris).

Aucun affichage n'est demandé.

⚠️ N'oubliez surtout pas de valider valider après avoir exécuté play

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 5/5
.128013vP/2iSpn1go klefa=,)8_y-mwdtus(3rh*:bc050B0p0C0r0f0o0E0m0M0o0r0E0E0s010C0f0h010406050E0D0z0z0r0H0x040g0l0o0D0%0l0i050d0.0:0=0@0,0h041017051a0d170,0B0f0b0V0X0Z0#0X0i0k0D0r0k0p0y0h0x0C0I0~0m0I0f0k0I0o1C0I0C0*050Q0L0o0p1j0Y0!011B1D1F1D0C1L1N1J0C0H181x0V0`0E0h0r0i0#0e011P1l010q0S0p0i0r0z0p1J1+1-1=1R1^1N1{1}0*0a0m0c0H0l0h0l0E0f0}0i0m0O1)0H0H0p0M2i10200i180d1x2v1#1%1$1K0B221m0f0i1`2f1J1g1i0W1Q2F2H0i0l2L1J0h2o182t2v2Y0-1,2j2N1?2R0H0;0o1J0r1A2o0q0#030w0w0M2S0p1F2Q0l0y0e0v0y0j0*0j100r2Z2$0+2#212(1R2*2,2.2:0p2=012@2_2{2}2I30321:040e37391-3b2t2E013g0r2-182/0I2;2?2^2`0O3q2R3s0y0G0*0G3x2s3a192W102L2y0B1%2D3e0#3N1~183$1b3!2!113Y3-2X2$0m0f0B0#2^2t3R343H3|3~013M3p2G3r31331;260p3 3o3O4a3Q4c433W3B3+3D0*2V2S0D2h3X3z0m3c2%1k1R0l0*0s4x2u4z4p4C0#0z0f354H3b3@3z4A454h414c3u052/3}4h3-3P2 4Y4e1|4g474i2|4k4*3t1J0d384U4q0n0*0q0l0H4Q4J3{4q0i0*0f524{4L010l0A570 4S4I5a2O3D0L0*0H1-1s4Q5j1?0)040F5r4K5k4N4P5h3`3d5b5u0t595y1?5A040j365C5s1R5u0u0K4Q0,5P3B4$4/4X323T445Z484j2~3R3T0m4f4%495,4c5%3x0m5`535E5k56044t0B4v0C5I545b4E044G5C5|4B5~4s2c624w6b5Q0#680J655}2)575V5r0d3_3Z0p2v3:2w3(102z6C0r1M6x3#1h4R0O0Q0S0E04.
Exercice 7

Compléter le code suivant. A la fin la variable somme vaut la somme des carrés des entiers de 1 à 5 (compris).

Aucun affichage n'est demandé.

⚠️ N'oubliez surtout pas de valider valider après avoir exécuté play

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 5/5
.128013vP/2iSpn1g0o kl9efa=,)6+_y-mwdtus(3rh*:bc050E0r0F0t0f0p0H0n0P0p0t0H0H0u010F0f0h010406050H0G0C0C0t0K0A040g0m0p0G0*0m0i050d0;0?0^0`0/0h04131a051d0d1a0/0E0f0b0Y0!0$0(0!0i0k0G0t0k0r0B0h0A0F0L110n0L0f0k0L0p1F0L0F0-050T0O0p0r1m0#0%011E1G1I1G0F1O1Q1M0F0K1b1A0Y0}0H0h0t0i0(0e011S1o010s0V0r0i0t0C0r1M1.1:1^1U1{1Q1~200-0a0n0c0K0m0h0m0H0f100i0n0R1,0K0K0r0P2l13230i1b0d1A2y1(1*1)1N0E251p0f0i1}2i1M1j1l0Z1T2I2K0i0m2O1M0h2r1b2w2y2#0:1/2m2Q1_2U0K0@0p1M0t1D2r0s0(030z0z0P2V0r1I2T0m0B0e0q0B0j0-0j130t2$2)0.2(242+1U2-2/2;2?0r2^012`2|2~302L33351?040e3a3c1:3e2w2H013j0t2:1b2=0L2@2_2{2}0R3t2U3v0B0J0-0J3A2v3d1c2Z132O2B0E1*2G3h0(3Q211b3)1e3%2%143#3:2!2)0n0f0E0(2{2w3U373K3 41013P3s2J3u34361@290r423r3R4d3T4f463Z3E3.3G0-0H0m0?0r3!3C0n3f2*1n1U0m0-0u4A2x4C4s4F0(0C0f0-0l4K3e3`3C4D484k444f3x052=404k3:3S324$4h1 4j4a4l2 4n4.3w1M0d3b4Y4t0o0-0s0m0K4U4M3~4t0i0-0f564 4O010m0D5b124W4L5e2R3G0O0-0K1:1v4U5n1_0,040I5v4N5o4Q385B585f5y0v5d5C1_5E040x5G3g5I0-0w0N4U0/5l3}244*4?4#353W475$4b4m313U3W0n4i4+4c5/4f5*3A0n5}575S5o5a044w4y5L5H5o4H044J5Z5 4E614v4x2066601_690y6j6e2,5b5R6p4G0-0M0M6s3F5O3z5Z5Y3_3|3$0r2y3?2z3+132C6M0t1P6H3(1k4V0R0T0V0H04.
Exercice 8

Ecrire un programme qui provoque l’affichage ci-dessous :

triangle dièses

Il y a 20 lignes, et la vingtième contient 20 symboles #

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Astuce

Recopier pour tester :

>>> "#" + "#"
>>> 3 * "#"
>>> 1 * "#"

⚠️ Attention : 0 * "#" n'a pas de sens !

Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Solution
for i in range(1, 21):
    print(i*"#")
Exercice 9

Alice a déposé ses économies à sa banque sur un compte rémunéré.

Le but de cet exercice est d'écrire un programme qui demande de saisir le capital initial déposé, le taux \(t\) en %, puis calcule le capital final, au bout de 5 ans, sachant qu’il a été placé au taux d’intérêts composé \(t\)%.

1. Le programme doit afficher le capital final au bout de 5 ans.

Astuce

Indication : chaque année le capital est multiplié par \((1+\dfrac{t}{100})\)

Compléter le code ci-dessous :

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Solution
capital_initial = int(input("Capital initial : "))
t = int(input("taux en %. Par exemple saisir 2 pour un taux de 2% : "))
capital = capital_initial
for i in range(5):
    capital = capital*(1 + t/100)
print(capital)

2. Recopier, puis adapter ci-dessous le programme pour qu’il affiche le résultat au bout de n années, et non au bout de 5 ans.

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Astuce

Indication : il faut une variable supplémentaire n

Solution
capital_initial = int(input("Capital initial : "))
t = int(input("taux en %. Par exemple saisir 2 pour un taux de 2% : "))
n = int(input("nombre d'années"))
capital = capital_initial
for i in range(n):
    capital = capital*(1 + t/100)
print(capital)

3. Recopier, puis adapter votre programme pour qu'il affiche aussi les intérêts acquis au bout de n années.

Astuce

Indication : les intérêts acquis sont la différence entre le capital final au bout de n années et le capital initial.

Vos affichages devront comporter des messages comme par exemple : "Capital au bout de 5 années :"

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Solution
capital_initial = int(input("Capital initial : "))
t = int(input("taux en %. Par exemple saisir 2 pour un taux de 2% : "))
n = int(input("nombre d'années"))
capital = capital_initial

for i in range(n):
    capital = capital*(1 + t / 100)
print("Capital au bout de ", n, " années : ", capital)
interets = capital - capital_initial
print("Interets acquis : ", interets)

V. Bilan⚓︎

À retenir ❤

  • La boucle for ... in ... s'utilise lorsque :

    • on veut parcourir un à un les éléments d'un objet itérable (une chaîne de caractère, une liste, un tuple, un dictionnaire...)
    • on veut répéter une action un nombre de fois connu à l'avance.
  • Les instructions répétées peuvent mais ce n'est pas obligatoire faire appel à la variable de boucle, mais il ne faut pas que ces instructions la modifient.

  • Ne pas oublier les : et l'indentation !

  • range(n) génère une séquence de n nombres entiers : on s'en servira dès qu'on aura besoin de répéter n fois des instructions.

👉 On parle de boucle bornée.