Boucles finies for
⚓︎
L'instruction range()
⚓︎
progression d'entiers
L'instruction range()
renvoie une progression d'entiers :
range(fin)
renvoie la progression croissante defin
entiers consécutifs partant de0
jusqu'àfin-1
.range(debut, fin)
renvoie la progression croissante defin-debut
entiers consécutifs partant dedebut
jusqu'àfin-1
.range(debut, fin, pas)
renvoie la progression d'entiers :debut
,debut+pas
,debut+2*pas
,debut+3*pas
etc. strictement inférieurs àfin
.
range()
Les plus courantes :
range(5)
renvoie la progression de5
entiers consécutifs :0
,1
,2
,3
,4
, (et pas5
)range(3,8)
renvoie la progression de8-3=5
entiers consécutifs :3
,4
,5
,6
,7
, ( et pas8
)
Plus rares :
range(10,5,-1)
renvoie la progression décroissante des entiers :10
,9
,8
,7
,6
( et pas5
)range(-3,6,2)
renvoie la progression croissante des entiers :-3
,-1
,1
,3
,5
( et pas7
)
Je vérifie ma compréhension (bouton en bas pour recommencer)
-
En langage Python lors de instruction
for k in range(2,7)
la variablek
prend les valeurs :-
2 et 7
-
2; 3; 4; 5 et 6
-
2; 3; 4; 5; 6 et 7
-
2; 3; 4; 5; 6; 7 et 8
-
-
En langage Python lors de instruction
for k in range(5)
la variablek
prend les valeurs :-
0; 1; 2; 3 et 4
-
0; 1; 2; 3; 4 et 5
-
1; 2; 3 et 4
-
1; 2; 3; 4 et 5
-
-
La variable
k
prend toutes les valeurs entières de \(0\) à \(33\) si on utilise :-
for k in range(0,33)
-
for k in range(0,34)
-
for k in range(33)
-
for k in range(34)
-
-
En langage Python, lors de l'instruction
for k in range(2,29)
, la variablek
prend- 29 valeurs
- 28 valeurs
- 27 valeurs
- 26 valeurs
Les répétitions à l'aide de for
⚓︎
parcourir une progression d'entiers
L'instruction for ... in ...
parcourt la progression et permet d'exécuter de manière répétée un bloc indenté :
syntaxe d'une boucle finie | |
---|---|
1 2 3 4 |
|
-
Le
in
et les deux points sont obligatoires -
action1()
etaction2()
sont exécutées pour chaque nouvelle valeur deentier
-
action3()
sera faite après la fin des répétitions.
Premiers exemples
Les lignes indentés suivants l'instruction for
sont les lignes de la boucles.
La variable signalée après l'instruction for
est un indice, on utilise parfois la lettre i
.
Essayer chacun des exemples
La boucle de la ligne 1 réalise 3 boucles, et celle de la ligne 7 en fait 5.
On utilise end=""
pour supprimer le retour de ligne par défaut de l'instruction print()
.
L'indice i
de la boucle de la ligne 1 prend les valeurs \(1\), \(2\), \(3\) et enfin \(4\).
L'indice j
de la boucle de la ligne 6 prend les valeurs \(3\), \(4\), \(5\) et enfin \(6\).
# Tests
(insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
En précisant le paramètre pas
, on peut produire des progressions d'entiers non consécutifs croissants ou décroissants !
# Tests
(insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
Importance de l'indentation
Dans chacun des exemples ci-dessous, l'indice i
de la boucle de la ligne 1 prend les valeurs entières \(0\), à \(5\).
-
La boucle de la ligne 3 est exécutée à la suite de la boucle de la ligne 1.
-
La ligne 4 est exécutée 5 fois. La ligne 5 est exécutée 1 fois.
# Tests
(insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
- Les lignes 2 à 5 font partie de la boucle de la ligne 1 et seront exécutées à chaque passage de la première boucle.
- La ligne 4 est exécutée un total de 30 fois. La ligne 5 est exécutée 6 fois.
# Tests
(insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
Exercice 1
-
Analyser le script-ci dessous. Vous pouvez lire le script décrit en langage naturel
1 2 3
for i in range(1,36) : if 35 % i == 0 : print(i)
1 2
pour i allant de 1 à 35 si le reste de la division de 35 par i est nul, alors imprimer i
-
Corriger les erreurs dans le script ci-dessous et exécuter le.
- Modifier le script pour afficher les diviseurs de \(37\). Que peut-on dire du nombre \(37\) ?
- Modifier le script pour déterminer si le nombre \(4891\) est premier.
# Tests
(insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
Solution
- Le script affiche les diviseurs de 36
- Attention aux indentations, aux
:
ainsi qu'aux paramètres de l'instructionrange()
. - Il faut changer la ligne 1 et la ligne 2
\(37\) est un nombre premier, ses seuls diviseurs sont \(1\) et \(37\).
1 2 3
for i in range(1,38) : if 37 % i == 0 : print(i)
- Il faut utiliser le script :
\(4892\) n'est pas premier.
1 2 3
for i in range(1,4892) : if 4891 % i == 0 : print(i)
Principe accumulateur⚓︎
compteurs et accumulateurs dans Python
Un compteur est une variable à laquelle on ajoute 1 à chaque répétition d'une boucle.
Le compteur est incrémenté à chaque répétition d'une boucle.
Un accumulateur est une variable à laquelle on doit ajouter une valeur (ou multiplier par une valeur, ou une combinaison des deux opérations) à chaque répétition d'une boucle.
un compteur simple
Le script ci-dessous défini une fonction nbrdediviseur()
de paramètre nbr
et qui renvoie la valeur finale de la variable compteur
.
- Exécuter le script.
- Vérifier que l'instruction
nbrdediviseur(37)
renvoie \(2\). - Que renvoie l'instruction
nbrdediviseur(738821)
? Que peut-on en déduire ?
# Tests
(insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
un accumulateur pour calculer une somme
L'appel somme()
utilise une boucle pour renvoyer l'image la somme \(0+1+2+3+4+\ldots+98+99\).
- Exécuter le script ainsi que l'appel
somme()
- Modifier le script pour que l'appel
somme()
renvoie la somme des carrés : \(1+2^2+3^2+4^2+\ldots+99^2\). - Modifier à nouveau le script pour que l'appel
somme()
renvoie la somme des carrés : \(1^2+2^2+3^2+4^2+\ldots+99^2+100^2\). - Valider le script.
# Tests
(insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
Exercice 2
Compléter le script de la fonction d'appel produit()
qui renvoie le produit \(1\times 2\times 3\times 4\times \ldots \times 50\).
# Tests
(insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
Exercice 3
Compléter le script de la fonction d'appel sominv()
qui renvoie la somme \(1+\dfrac{1}{2}+\dfrac{1}{3}+\dfrac{1}{4}+\ldots+\dfrac{1}{20}\)
# Tests
(insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
Exercice 4
Compléter le script de la fonction d'appel s()
de paramètre n
qui renvoie la somme \(1+\dfrac{1}{2}+\dfrac{1}{2^2}+\dfrac{1}{2^3}+\ldots+\dfrac{1}{2^n}\)
# Tests
(insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
Exercice 5 : Ascii Art
- Analyser les scripts des fonctions
carre()
,triangle()
etdiagonale()
. - Exécuter le script ci-dessous.
-
Qu'affiche les appels
carre(5)
,triangle(5)
etdiagonale(5)
?
###(Dés-)Active le code après la ligne# Tests
(insensible à la casse)
(Ctrl+I)Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)Entrer ou sortir du mode "plein écran"
(Esc)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 -
Proposer un script d'une fonction d'appel
triangle1()
et de paramètren
tel que l'appeltriangle1(5)
affiche :>>> triangle1(5) @@@@@ @@@@ @@@ @@ @
-
Proposer un script d'une fonction d'appel
diagonale2()
et de paramètren
tel que l'appeldiagonale1(5)
affiche :>>> diagonale1(5) / / / / /
###(Dés-)Active le code après la ligne# Tests
(insensible à la casse)
(Ctrl+I)Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)Entrer ou sortir du mode "plein écran"
(Esc)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.128013m@t;)v3( *o,0gr7/=sedkiw-6cf:nhpulPyabS41q25050v0u0d0L0x0I0t0j0B0I0L0t0t0s010d0x0G010406050t0H0b0b0L0p0K040N0l0I0H0-0l0E050r0@0_0{0}0=0G04051d161g0r1d0=0v0x0g0#0%0)0+0F0x0o0F0I1u0F0d0:050W0M0I0u1p0(0*011t1v1x1v0d1D1F1B0d0p1e0d0F0#100t0G0L0E0+0R011H1r010C0Y0u0E0L0b0u1B1!1$1+1J1.1F1;1?0:0a0j0J0p0l0G0l0t0x130E0j0U1Y0p0p0u0B2b161_0E1e0r1W2o1T1V1U1C0v1{0+1x0E1:281B1m1o0$1I2y0x2A0E0l2E1B0G2h1e2m2o2S0?1#2c2G1,2L0p0`0I0:0P2l2W0;2V1`2Y1J2!2$0:0R2*1$2,2m2x012;0L2%040h2^2n0=2{2/0+2~300O332`2W2|390:0S3c353e372}0l2#2 0:0A3j2-2X1q2:3o2=040q3c1h2Q162E2r0v1V2w3m0B2M1@1e3G1f3E2U172+053M0U2R3l3w0+0w0:0U0C3c0j3u3f0C0:1T0x1$0o1F2)3U2_3-3m0/040i3C363#2}0:153`2n3|433~0f3+492H013~0D3+0j4k4l4m0j064m4e1,3%040C3o4d424f0E0:0x4x3!4f0l0y4B462S3,4y2Z0M0:0p3?0u414E1,3~40473Z2.434A044J3V4M1J4b4D4!4f4h3j4n4l4r2:4O042P2J0d4T4.4V0:4X2U4*0+0t1)04020Q0H0l0d0e0j595b5d4~3v4F0:0k5j3f4B5o3}0:0m4-5k1,560:5g5c0e0c5A5i4Y4@0+0l5m5r4a515L4z455O1,5J040z5R2:5q5G544g0:4c4Y4L4U4+5$3+063k4 1J4t3)5v3.3(3=0o142 0u3_535*0+4W5W385Q5Z615#045%4K5H694i5(4=4n4p4?5!4t4v0p5@3m4$4C5(6d4G4I6p4#4_4Q0E0o4S675:625N6E5w5X4%64695u6I2|0b0x0:0n6M3~6O606F015T5V6P3m6R2(6V5,6t5!4:4Y6j4=6d0E4_4{0E4}6%5M3 6M5y585a5B5f725F6Y6J5I5K6|4/6H775p046s7e5s6a6X4)68705E0e0r7p6+6a3t0r3X0u2o2P7y3F1n3H2r2u2p0L1E7B0r3G0=7L0V0X0Z04. -
Défi : propoer le script d'une fonction d'appel
pyramide()
et de paramètren
tel que l'appelpyramide(10)
affiche les 10 lignes suivantes :>>> pyramide(10) * *** ***** ******* ********* *********** ************* *************** ***************** *******************
###(Dés-)Active le code après la ligne# Tests
(insensible à la casse)
(Ctrl+I)Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)Entrer ou sortir du mode "plein écran"
(Esc)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.128013mt;)v3( *o,gr/=sedkiw-cf:nhpulPyabS1q2+050s0r0c0H0u0E0q0i0x0E0H0q0q0p010c0u0C010406050q0D0b0b0H0n0G040J0k0E0D0(0k0A050o0/0;0?0^0-0C040518111b0o180-0s0u0f0W0Y0!0$0B0u0m0B0E1p0B0c0+050R0I0E0r1k0Z0#011o1q1s1q0c1y1A1w0c0n190c0B0W0{0q0C0H0A0$0M011C1m010y0T0r0A0H0b0r1w1V1X1$1E1)1A1,1.0+0a0i0F0n0k0C0k0q0u0~0A0i0P1T0n0n0r0x26111;0A190o1R2j1O1Q1P1x0s1?0$1s0A1+231w1h1j0X1D2t0u2v0A0k2z1w0C2c192h2j2N0.1W272B1%2G0n0=0E0+0K2g2R0,2Q1=2T1E2V2X0+0M2#1X2%2h2s012,0H2Y040g2:2i1c2L112z2m0s1Q2r2*0$0x2H1/19331a312P122$053a0P2M2R2@0t0+0P0y2~040i2(2S1l2+0y0+0C0G0n1-0u0P3u3x2@0*040h3J2?382^0+103i2;3K3R3M0e3u3w3Q3z0$3M0z3#0i060i3/3$3o3R3q040y0k0n3#3X3(3S040u3|3%2C010k0v0+2E423=3~0A0I0+3F0A0m0r3P4b443M3O3V2 432U3T4k2)3~3Z4a4v4m0+3+4p0,3:4F3;4z2U4e042K2E0c4u3y4A3N4y4Q1%0q1!04020L0D0k0c0d0i4Z4#4%4P2@0k0+0j4-3Y0+4o2P4r2+4t4D3}444/040w4=4c48534R0e0l4T2@4W0+4*4$0d0j5e4,4}4`0$504;5k4l1%4n561%0b0u2Z5t1E500N5y0$5v2.5C454:5G0A555p4I1E4x4D4H4U5O0+3!4D0-0o3l0r2j2K5!321i342m2p2k0H1z5%0o335X0P0R0T0q04.
# Tests
(insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)