Boucle itérative : pour/for
Avec l'instruction range
La structure "for" avec range
Voici la structure en Python d'une boucle répétitive for
avec range
for i in range(n):
instruction 1
instruction 2
...
Dans cette boucle $i$ prendra les valeurs de 0 à $n-1$.
Toutes les instructions dans la boucle seront appliquées pour chaque valeur de $i$.
Dans cette structure, on connait à l'avance le nombre de répétitions. Dans notre cas, il est égal à $n$.
Cette boucle fait le calcul : 0+1+2+3+...+10
s=0
for i in range(11):
s=s+i
print(s)
Vérifier que le résultat affiché correspond bien à la somme 0+1+2+3+...+10.
Vous pouvez visualiser les différentes étapes de calcul mises en oeuvre par cet algorithme ci-dessous :
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
.
Modifier le code de l'exemmple précédent de sorte d'afficher la somme $10+11+12+13+...+99+100$.
L'objectif de cet exercice est d'écrire une fonction Python compter_voyelles(ch)
qui prend en paramètre une chaîne de caractères, ch
représentant une phrase et qui retourne le nombre de voyelles dans ce mot.
- Tester le script suivant :
ch = "La vie"
print(len(ch))
Que fait la fonction len?
- Tester le script suivant :
ch = "Pourquoi tant de poissons vivent-ils dans l'eau salée? Parce que l'eau poivrée les ferait éternuer!"
for i in range(0,len(ch)):
print(ch[i])
Modifier le script pour qu'il affiche le nombre de caractères de cette chaîne de caractère.
- Tester le script suivant :
ch = "Pourquoi tant de poissons vivent-ils dans l'eau salée? Parce que l'eau poivrée les ferait éternuer!"
print("z" in ch)
print("e" in ch)
A quoi sert l'opérateur in
?
- Citer l'ensemble des voyelles
- Compléter le code suivant :
def compter_voyelles(ch):
compteur = ...
for i in ...:
if ... in "aeiouyAEIOUY":
...
return compteur
assert compter_voyelles("Pourquoi tant de poissons vivent-ils dans l'eau salée? Parce que l'eau poivrée les ferait éternuer!") == 36, "Try again !"
L'objectif de cet exercice est d'écrire une fonction Python compter_lettre(ch, lettre)
qui prend en paramètre une chaîne de caractères, ch
et une lettre et qui retourne le nombre de lettre présentes dans la phrase ch.
- Tester le script suivant :
ch = "Pourquoi les plongeurs plongent-ils toujours en arrière et jamais en avant ? Parce que sinon, ils tombent dans le bateau !"
for lettre in ch :
print(lettre)
Quelle difference y a t il dans la manière d'écrire cette boucle for par rapport à l'exercice précédent?
- Compléter le code suivant :
def compter_lettre(ch, lettre):
compteur = ...
for elt in ...:
if ... :
...
return compteur
assert compter_lettre("Pourquoi les plongeurs plongent-ils toujours en arrière et jamais en avant ? Parce que sinon, ils tombent dans le bateau !", "e") == 12, "Try again !"
assert compter_lettre("Pourquoi les plongeurs plongent-ils toujours en arrière et jamais en avant ? Parce que sinon, ils tombent dans le bateau !", "r") == 7, "Try again !"
Écrire une fonction somme(n)
où $n$ est un entier qui renvoie la valeur de la somme $1+2+3+...+n$.
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.
-
Proposez une fonction nommée population
qui prend comme argument un entier $N$ et qui renvoie la population de
ce village au bout de $N$ années écoulées.
-
Testez votre fonction avec quelques valeurs.
Correction de l'exercice en vidéo accessible par ce lien.
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 2022,
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)}$.
-
Quelle somme d'argent disposera Crésus sur son placement en janvier 2023 ?
-
Quelle somme d'argent disposera Crésus sur son placement en janvier 2024 ?
Le but est de connaître la somme présente sur le placement au bout de 10 ans, soit en janvier 2032,
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 = ...
for i in range(...) :
N = ...
P = ...
print("Au bout de 10 ans, Crésus aura",...,"€.")
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 15 ans.
Il fait appel à vous afin que vous lui proposiez un algorithme permettant de savoir le capital au bout de 15 ans.
Réaliser cet algorithme.
Proposez un programme qui affiche tous les résultats possibles (éventuellement redondants) du produit deux nombres entiers compris entre 0 et 10.
Pour afficher 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)
.
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).
-
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)
Exécuter sur code et changer la citation afin de trouver, valider ou infirmer une hypothèse sur le rôle de ce code.
-
Transformer le code pour qu'il compte le nombre de i.
exercice de renforcement
Proposer une fonction pour_perec
qui remplace tous les "e" d'une phrase par un espace " ".
Exercices de renforcement
Sur la boucle répétitive for
Écrire une fonction somme_carree(n)
où $n$ est un entier qui renvoie 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