On commence: بسم الله
Imagine qu’on travaille, par exemple, sur une liste L de longueur n et on veut exécuter un code pour chaque case. Est-ce qu’on va écrire le code pour chaque case? Et si n vaut 10 000, on va écrire le code 10 000 fois?
En Python en peut utiliser les boucles, c’est un code qui dit PC de répéter un travail (pas nécessairement le meme travail, par exemple si on a une liste des entiers et on veut mettre toutes les cases au carré, le code est donc en fonction de l’indice d’itération) un nombre de fois ou bien de faire un traitement tant qu’une condition (ou groupes de conditions) est vérifiée.
Il y a 2 types de boucles:
- Boucle For: Cette boucle va exécuter le code pour une série de valeurs donné (pour un certain Range).
- Boucle While : Cette boucle va exécuter le code tant que une condition est vérifiée.
NB:
Les boucles ne sont pas utilisées seulement pour les listes, j’ai juste donné des exemples pour bien comprendre le contexte et leur utilité.
Boucle « For »:
Comme on a dit, cette boucle va exécuter le code pour un Range donné
Syntaxe:
for *indice* in range (*début*, *fin*,*pas*): ligne 1 lign 2 ...
!! N’oublie pas que le dernier élément fin n’est pas inclu (c’est la logique de Python 🤷♂️🤷♂️)
Voilà un example: (Analyse le code et essaye d’interpréter ce qui va se passer avant de l’exécuter)
NB:
- Dans l’exemple, print(x) est exécutée après la boucle est terminée. Sans décalage, le pc va comprendre qu’il ne fait pas partie du code bouclé.
- Si la boucle commence par 0 et le pas vaut 1, on peut écrire seulement la borne supérieure fin c-à-d : for indice in range (fin)
- Le pas c’est le numéro d’incrémentation de l’indice , par défaut le pas = 1
Example avec pas modifié:
Ecris un code qui prend un entier n positif comme input. On doit afficher tout les nombres pairs compris entre 0 et n.
Voilà une proposition:
NB:
Le pas doit etre un entier
Exercice:
Ecris un code qui prend un input et affiche une liste contenant tout les diviseurs de l’input (par exemple si l’utilisateur saisie 6 comme input, on doit afficher: [1, 2, 3, 6])
Voilà une proposition pour la solution:
Ne regarde pas la solution avant de faire ton mieux
En utilisant l’opérateur modulo « % » (tu dois le connaitre puisque tu es en CPGE, et on l’a déjà expliqué dans le cours de l’Introduction)
Si tu ne veux pas utiliser modulo
« For » pour les itérables:
Tout d’abord, les itérables sont les strucutres qui ont plusieurs éléments et qu’on peut accéder un par un (exp: les listes, chaines, tuples …) contrairement aux structures comme les entiers, flottants, booléens …
Pour itérer entre les éléments d’un itérable, on peut écrire:
for *élément* in *itérable*: ligne 1 ligne 2 ...
Exercice:
Ecris un code qui prend une chaine de caractères comme input et pour chaque caratère on doit afficher l’ordre dans la table ASCII (Rappelle toi de la fonction ord ( ) dans le cours des chaines de caractères).
Solution proposée
Information IMPORTANT pour la boucle « For »:
L’ensemble des valeurs pour lequel tu définis la boucle for ne peut pas etre modifié, voilà ce que je veux dire:
Prenant par exemple le code de l’exercice précedent, meme si on change s dans la boucle, cette dernière va itérer sur les valeurs qui ont été définis la première fois.
Regarde ce qui est affiché, c’est comme si on a pas changé s. Mais en réalité, s a changé, et pour le prover on va afficher s à chaque fois.
Meme chose pour la forme for indice in (début, fin, pas) ; meme si on change la valeur du début, fin ou pas, le code va considérer les valeurs qui ont été premièrement choisies (dans l’exercice des diviseurs, meme si on change n dans la boucle ça ne va pas avoir un effet sur le Range de la boucle)
Boucle « While »:
Dans plusieurs situations, on veut un code qui se répète tant qu’une condition est vérifiée. Pour le faire, on doit utiliser la boucle « while ».
while *booléen* : ligne 1 ligne 2 ...
- « While » est plus puissante que « for », en fait tout boucle « for » peut etre reformulée sous forme d’une boucle « while ».
- Les débutants souvent écrivent une boucle while infinie (tu va voir comment 😂😂), quand tu commis cette erreur tu doit cliquer sur
ctrl + c
pour arreter le code.
Excercice :
Ecris un code qui prend un entier comme input, tant que l’entier est positif on doit dire à l’utilisateur de saisir un entier négatif (avec une signe moins « – » au début). Quand il saisit un entier négatif, on affiche Merci.
Solution proposée
On va convertir cette boucle « for »:
en boucle « while »:
Pour expliquer ce code un peu, on sait qu'on doit itérer entre toutes les cases de L , donc on doit aller de 0 jusqu'au dernier indice qui vaut len( l ) - 1 donc i doit etre strictement inférieur à len ( l ) et lorsqu'on termine le processus pour une case on doit passer à la case après donc i doit incrémenté par 1
Instruction "break":
Lorsqu'on veut totalement arreter une boucle, on écrit une ligne qui ne contien que le mot break
(je ne parle pas d'une chaine de caractère "break", regarde le code au-dessous).
Cette commande dit au PC d'arreter la boucle for
meme si elle n'a pas encore atteint la fin et d'arreter la boucle while
meme si le booléen (condition) est true
.
Example:
Ecris un code qui prend une chaine de caractères comme input. Si l'input contient une caractère qui n'est pas une lettre de l'alphabet, on doit afficher "Intrus" sinon on affiche "Tout est alphabétique"
Instruction "continue":
Si on écrit continue
dans une boucle, on dit au pc d'ignorer toute autre ligne de la boucle seulement pour cette itération et de passer à l'itération suivante.
Exemple:
Ecris un code prend une chaine de caracères comme input et affiche le nombre de caractères qui ne sont pas des lettres de l'alphabet
Exercice
Ecrire un programme qui permet de calculer la moyenne de notes fournies au clavier avec un dialogue de ce type :
note 1 : 12 note 2 : 15.25 note 3 : 13.5 note 4 : 8.75 note 5 : -1 moyenne de ces 4 notes : 12.37 (on a dit 4 et pas 5 car la 5ème est négative)
Le nombre des notes n'est pas connu a priori et l'utilisateur peut en fournir autant qu'il le désire. Pour signaler qu'il a terminé, on convient qu'il fournira une note fictive négative. Celle-ci ne devra naturellement pas être prise en compte dans le calcul de la moyenne.
Ne regarde pas le corrigé avant de faire ton mieux.
Solution proposée
Note Personnelle:
Personnellement, j'utilise très rarement les instructions break
ou continue
. À la place, je préfère créer un booléen et adapter mon code de manière à obtenir un résultat équivalent à ce qu'un break
ou continue
ferait.
Il est préférable de bien maîtriser les concepts de base, car cela te permet de résoudre efficacement n'importe quel problème ou exercice. Apprendre trop de notions sans les approfondir risque de te faire oublier une grande partie à long terme.