Avant de commencer, quelques rappels utiles pour ce TP.
print(). Elle affiche à l'écran ce qu'on lui donne entre parenthèses. Par exemple, print(3 + 4) affiche 7, et print("Bonjour") affiche Bonjour. Tu peux aussi lui donner plusieurs éléments séparés par des virgules : print("Résultat :", 7) affiche Résultat : 7. Essaie ça dans la console ci-dessous avant de répondre aux premières questions.- Affectation et incrémentation :
i = i + 1ajoute 1 ài(on peut aussi écrirei += 1) - Comparateurs :
==!=<><=>=— renvoientTrueouFalse - Boucle
for i in range(n):— répète un bloc un nombre connu à l'avance de fois - Division entière
//et reste%:17 // 5vaut3,17 % 5vaut2
i = 3, que vaut i après l'instruction i = i + 1 ?7 % 2 ?Comprendre la syntaxe de while : la condition est testée avant chaque tour, et la boucle continue tant qu'elle est vraie.
Contrairement à for, qui répète un nombre de fois fixé à l'avance, la boucle while répète un bloc d'instructions tant qu'une condition est vraie — sans savoir forcément combien de tours cela va prendre.
while condition : # instructions répétées tant que condition est TrueÀ chaque tour, Python réévalue la
condition. Si elle est vraie, il exécute le bloc indenté puis revient tester la condition. Dès qu'elle est fausse, la boucle s'arrête.
Boucle for | Boucle while |
|---|---|
Nombre de tours connu à l'avance (donné par range()) | Nombre de tours inconnu à l'avance, dépend de l'évolution d'une variable |
| for i in range(5): print(i) | i = 0 while i < 5: print(i) i = i + 1 |
Ce programme affiche les nombres de 1 à 5 avec une boucle while. Lis-le attentivement avant de le lancer.
- 1Lance le programme et vérifie ce qui s'affiche.
- 2Modifie la condition pour afficher les nombres de 1 à 10.
i = i + 1 pour « voir ce qui se passe » : la condition i <= 5 resterait toujours vraie, la boucle ne s'arrêterait jamais, et la page se figerait (il faudrait la recharger avec F5).while i <= 5 et i qui part de 1 ?i = i + 1 de ce programme ?i automatiquementi ne changerait jamais de valeuri = i + 1. Pour la faire diminuer, on écrit de la même façon i = i - 1.Et voici les symboles de comparaison qui peuvent t'être utiles. Attention : les symboles « supérieur ou égal » (≥) et « inférieur ou égal » (≤) n'existent pas sur le clavier — en Python, on les écrit avec deux caractères tapés à la suite, sans espace entre eux :
>: strictement supérieur (une seule touche)>=: supérieur ou égal — on tape la touche>puis la touche=juste après<: strictement inférieur (une seule touche)<=: inférieur ou égal — on tape la touche<puis la touche=juste après==: égal à — on tape deux fois la touche=!=: différent de — on tape la touche!puis la touche=
Complète ce programme qui compte à rebours de 10 jusqu'à 1, puis affiche « Décollage ! ».
i > 0 par i > 3, quelle est la dernière valeur affichée avant « Décollage ! » ?Utiliser une variable accumulatrice avec while, et savoir repérer la cause d'une boucle infinie.
Comme avec for, on peut utiliser une variable accumulatrice pour cumuler un résultat au fil des tours (une somme, un produit…).
Complète ce programme qui calcule la somme des entiers de 1 à n à l'aide d'une boucle while.
- 1Complète la condition et l'accumulation.
- 2Lance le programme avec
n = 10: tu dois obtenir 55.
i doit-elle être incrémentée à l'intérieur de la boucle et non avant ?Le programme ci-dessous ne s'arrête jamais — il contient une erreur classique. Ne l'exécute pas : analyse-le seulement à la lecture.
i = 0
somme = 0
while i < n:
somme = somme + i
print("Somme :", somme)
n vaut 5, ce qui est trop grandi n'est jamais modifié dans la bouclesomme devrait être initialisée à 1 et non à 0Corrige maintenant le programme ci-dessous en ajoutant la ligne manquante, puis lance-le.
while plutôt que for ?Reconnaître les situations où le nombre de répétitions n'est pas connu à l'avance, et où while est indispensable.
while est particulièrement utile quand on cherche combien de fois il faut répéter une opération pour atteindre un certain résultat — un nombre qu'on ne peut pas calculer avant de lancer la boucle.
Un capital de 1000 € augmente de 5 % chaque année. Complète ce programme pour savoir au bout de combien d'années il aura dépassé 2000 €.
for i in range(...) avec un nombre de tours écrit directement dans le code ?for ne peut pas contenir de calcul avec des décimalesfor avec des pourcentagesComplète ce programme qui cherche la première puissance de 2 strictement supérieure à cible, en doublant à chaque tour.
cible = 500), que vaut compteur affiché à la fin ?cible = 1000, combien de doublements faut-il en partant de 1 pour dépasser 1000 ?Écrire une fonction qui utilise une boucle while en interne, et qui renvoie un résultat avec return.
On peut tout à fait mettre une boucle while à l'intérieur d'une fonction, exactement comme on l'a fait avec for dans le TP précédent.
//. a // b donne le quotient de la division de a par b, sans la partie décimale. Par exemple 17 // 10 vaut 1, et 123 // 10 vaut 12 : on « retire » le dernier chiffre du nombre. C'est pour ça qu'en répétant n = n // 10, on enlève un chiffre à chaque tour, jusqu'à ce qu'il n'en reste plus (n devient 0).Cette fonction compte le nombre de chiffres d'un entier positif, en le divisant par 10 à chaque tour jusqu'à ce qu'il devienne nul.
- 1Lis la fonction : que fait
n = n // 10à chaque tour ? - 2Lance le programme et vérifie les résultats.
- 3Ajoute un appel
print(nombre_chiffres(0))— que vaut le résultat, et pourquoi ?
nombre_chiffres(0) ?Complète cette fonction qui calcule la somme des chiffres d'un entier positif, en t'inspirant de l'exercice précédent.
- 1
n % 10donne le dernier chiffre den;n // 10retire ce chiffre. - 2Complète la condition et les deux lignes manquantes.
somme_chiffres(123), que vaut la variable chiffre au premier tour de boucle ?somme_chiffres(999) ?- AÉcris une fonction
est_premier(n)qui teste, avec unwhile, sinest divisible par un nombre entre 2 et n−1. Elle renvoieFalsedès qu'un diviseur est trouvé,Truesinon. Teste avecest_premier(9)etest_premier(13). - BÉcris une fonction
collatz(n)qui compte le nombre d'étapes pour atteindre 1 en appliquant la règle : sinest pair,n = n // 2; sinon,n = n * 3 + 1. Teste aveccollatz(6). - CÉcris une fonction
diviseurs(n)qui affiche, avec une bouclewhile, tous les diviseurs denentre 1 et n.
est_premier(9) ?TrueFalse