Aller au contenu

Boucles bornées⚓︎

Les boucles

Il y a deux types de boucles : celles dont on connait à l'avance le nombre d'itérations (répéter 5 fois), qu'on appelle boucles bornées et les autres, les boucles non bornées (typiquement, répéter tant qu'une propriété est vraie).

Les boucles bornées

En Python, pour faire une boucle bornée, on utilise la syntaxe suivante :

for VARIABLE in ITERABLE: # (1)!
    instruction_1 # (2)!
    instruction_2
    ...
    intruction_n
  1. Les mots clef for et in sont obligatoires, tout comme les ":" à la fin.
  2. Comme pour les fonctions, l'indentation permet de déterminer les instructions qui font partie de la boucle et celles qui n'y sont pas.

Un itérable est un ensemble de valeurs que l'on peut parcourir, valeur par valeur. Nous utiliserons principalement 2 types d'itérables : les listes et les chaînes de caractères.

Répéter n fois

La plupart du temps, nous n'aurons besoin que de répéter n fois une boucle. Pour cela, nous utiliserons :

for VARIABLE in range(n): # (1)!
    instruction_1
    instruction_2
    ...
    intruction_n
  1. range(n) veut dire qu'on va répéter n fois, où n peut être une valeur, une variable ou n'importe quelle expression dont le résultat est un entier.

Vous pouvez tester l'exemple ci-dessous. N'hésitez pas à modifier le nombre de répétitions ou à rajouter des lignes d'affichage.

###(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)
Évaluations restantes : /∞

La variable de boucle

La variable de boucle prend des valeurs qui dépendent de l'itérable. Avec l'itérable range(n) ce sont les éléments de la liste de nombres entiers allant de \(0\) à \(n-1\).

Vous pouvez tester l'exemple 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)
Évaluations restantes : /∞

range(de, jusqu_a)

La fonction range peut aussi prendre 2 paramètres. Dans ce cas le premier paramètre indique la valeur de départ et la valeur avant laquelle on doit s'arrêter. Ainsi range(0, n) est équivalent à range(n).

L'itérable range(a, b), où a et b sont des entiers avec \(a<b\), prendra successivement toutes les valeurs entières de l'intervalle \([a;b[\). Il y aura donc \(b-a\) tours de boucles.

###(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)
Évaluations restantes : /∞

range(de, jusqu_a, pas)

La fonction range peut également prendre 3 paramètres. Les deux premiers paramètres ont la même utilité que dans l'exemple précédent. Le troisième permet de modifier l'écart entre chaque valeur. Au lieu d'aller de 1 en 1, on peut aller de 2 en 2 ou de 15 en 15.

Dans l'exemple suivant, vous pouvez regarder ce qui se passe quand on part de 0 ou de 1. Vous pouvez également essayer d'autres valeurs.

###(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)
Évaluations restantes : /∞

Compte a rebours

Si le troisième paramètre est un nombre négatif, et que le premier paramètre est supérieur au deuxième, on obtient un compte à rebours :

###(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)
Évaluations restantes : /∞

⚠ Si on veut que le compte à rebours aille jusqu'à 0, il faut mettre -1 pour le deuxième paramètre.

Exercice 1

Déterminer les valeurs à mettre à la place de A, B et C pour obtenir :

>>> for i in range(A, B, C):
        print(2∗i + 1)

41
35
29
23
17
11
Indice 1

Vous pouvez commencer par chercher les valeurs à mettre pour obtenir :

>>> for i in range(A, B, C):
        print(i)

40
34
28
22
16
10
Indice 2

Vous pouvez en déduire les solutions de :

>>> for i in range(A, B, C):
        print(2*i)

40
34
28
22
16
10

Vous devriez pouvoir trouver la solution

Indice 3

Vous pouvez utiliser ce terminal pour trouver les solutions :

Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)

Solution

On peut prendre :

>>> for i in range(20, 4, -3):
        print(2*i + 1)

41
35
29
23
17
11

La valeur de B peut être 4, 3 ou 2.

Exercice 2

Un placement banquaire rapporte \(3\,\%\) d'intérêts par an. Cela veut dire que le montant placé est multiplié par \(1,03\) chaque année.

Compléter le code de la fonction placement qui prend en paramètres un nombre montant ainsi qu'un entier nb_annees et qui renvoie le montant sur le compte, qui initialement était de montant et qui a rapporté des intérêts pendant nb_annees années.

Indice 1

Puisqu'on renvoie la valeur de montant, il faut probablement modifier la valeur de cette variable pendant l'exécution de la fonction.

Indice 2

Il faut essayer de faire le calcul à la main, au moins pour les 2 ou 3 premières années. Si un calcul est répété plusieurs fois, c'est qu'il doit être dans la boucle.

Exemples
>>> placement(100, 10)
134.39163793441222
>>> placement(20, 100)
384.3726396171258

###(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)
Évaluations restantes : 5/5

43908.43996.43997.43980.43993.43985.43988.43979.43928.43995.43988.43993.43979.43979.43909.43930.43980.43985.43976.43930.43910.43954.43908.43979.43981.43989.43989.43993.43978.43969.43910.44011.43991.43988.43981.43980.43985.43991.43990.43908.43927.43979.43981.43989.43989.43993.43978.43969.43910.43954.43908.43996.43985.43982.43928.43989.43993.43978.43987.43996.43991.43983.43990.43909.43930.43913.43930.43928.43979.43980.43969.43988.43997.43909.43930.43989.43993.43978.43999.43985.43990.43906.43913.43926.43919.43997.43989.43928.43913.43997.43989.43930.43928.43910.43954.43908.43996.43985.43982.43928.43995.43988.43993.43979.43979.43909.43930.43984.43985.43999.43984.43988.43985.43999.43984.43980.43930.43910.43908.43980.43993.43994.43988.43997.43928.43995.43988.43993.43979.43979.43909.43930.43984.43985.43999.43984.43988.43985.43999.43984.43980.43980.43993.43994.43988.43997.43930.43910.43908.43980.43978.43910.43908.43980.43984.43928.43995.43991.43988.43979.43976.43993.43990.43909.43930.43914.43930.43928.43995.43988.43993.43979.43979.43909.43930.43998.43985.43988.43997.43990.43993.43989.43997.43930.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43998.43985.43988.43997.43990.43993.43989.43997.43930.43910.90037.43928.44008.43978.43991.43976.43991.43979.43985.43980.43985.43991.43990.43928.43996.43997.43928.43995.43991.43978.43978.43997.43995.43980.43985.43991.43990.43908.43927.43979.43976.43993.43990.43910.43908.43927.43980.43984.43910.43908.43927.43980.43978.43910.43908.43980.43978.43910.43908.43980.43996.43928.43995.43988.43993.43979.43979.43909.43930.43988.43985.43990.43997.43990.43991.43979.43930.43910.43908.43996.43985.43982.43928.43995.43988.43993.43979.43979.43909.43930.43988.43985.43990.43997.43990.43991.43996.43985.43982.43930.43910.43908.43976.43978.43997.43910.43908.43979.43976.43993.43990.43910.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43991.43978.43989.43993.43988.43930.43910.43913.43908.43927.43979.43976.43993.43990.43910.43954.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43991.43978.43989.43993.43988.43930.43910.43914.43908.43927.43979.43976.43993.43990.43910.43954.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43991.43978.43989.43993.43988.43930.43910.43915.43908.43927.43979.43976.43993.43990.43910.43954.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43991.43978.43989.43993.43988.43930.43910.43916.43908.43927.43979.43976.43993.43990.43910.43908.43927.43976.43978.43997.43910.43908.43927.43996.43985.43982.43910.43908.43927.43980.43996.43910.43908.43980.43996.43928.43995.43988.43993.43979.43979.43909.43930.43995.43991.43996.43997.43930.43910.43908.43996.43985.43982.43910.43908.43976.43978.43997.43910.43908.43979.43976.43993.43990.43910.43908.43927.43979.43976.43993.43990.43910.43908.43995.43991.43996.43997.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43987.43930.43910.43996.43997.43998.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43998.43930.43910.43976.43988.43993.43995.43997.43989.43997.43990.43980.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43976.43930.43910.43920.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43930.43910.43989.43991.43990.43980.43993.43990.43980.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43976.43930.43910.43924.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43930.43910.43990.43994.44007.43993.43990.43990.43997.43997.43979.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43976.43930.43910.43921.43906.43908.43927.43979.43976.43993.43990.43910.43954.43928.43928.43928.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43987.43930.43910.43998.43991.43978.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43930.43910.43985.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43991.43983.43930.43910.43985.43990.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43994.43930.43910.43978.43993.43990.43999.43997.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43976.43930.43910.43920.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43930.43910.43990.43994.44007.43993.43990.43990.43997.43997.43979.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43976.43930.43910.43921.43906.43908.43927.43979.43976.43993.43990.43910.43954.43928.43928.43928.43928.43928.43928.43928.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43930.43910.43989.43991.43990.43980.43993.43990.43980.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43991.43930.43910.43909.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43930.43910.43989.43991.43990.43980.43993.43990.43980.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43991.43930.43910.43922.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43989.43998.43930.43910.43913.43926.43912.43915.43908.43927.43979.43976.43993.43990.43910.43954.43928.43928.43928.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43987.43930.43910.43978.43997.43980.43981.43978.43990.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43930.43910.43989.43991.43990.43980.43993.43990.43980.43908.43927.43979.43976.43993.43990.43910.43954.43908.43927.43995.43991.43996.43997.43910.43908.43927.43976.43978.43997.43910.43908.43927.43996.43985.43982.43910.43908.43927.43980.43996.43910.43908.43927.43980.43978.43910.43908.43927.43980.43993.43994.43988.43997.43910.43908.43927.43996.43985.43982.43910.43954.43908.43927.43996.43985.43982.43910.43954.43908.43927.43996.43997.43980.43993.43985.43988.43979.43910