for in
for in
DESCRIPTION.
Exécute un bloc de script en boucle, en itérant une variable compteur, tant qu'il y a des éléments dans l'objet de référence.
SYNTAXE.
for variable in collection :
for ⇨ appel de l’instruction [ OBLIGATOIRE ]
variable ⇨ variable qui recevra la valeur du compteur [ OBLIGATOIRE ]
in ⇨ complément de l’instruction [ OBLIGATOIRE ]
collection ⇨ toutes les valeurs du compteur [ OBLIGATOIRE ]
PRÉSENTATION GÉNÉRALE D'UNE BOUCLE POUR TOUS.
for compteur in objet : (Initialise la boucle for)
Ligne F1
Ligne F2
if expression : continue (Si l'expression est true, nouvelle valeur)
if expression : break (Si l'expression est true, aller à S1)
Ligne F3
Ligne Fn
else : (a faire si la boucle n'a pas été interrompu par un break)
Ligne E1
Ligne E2
Ligne S1 (suite du programme)
Ligne S2
REMARQUES.
for est une instruction composée (de plusieurs lignes), ce qui implique le symbole : (2 points) terminant l'appel de for et l'indentation des lignes de script composant la boucle for.
Les clauses break, continue et else sont facultatives, et même à éviter le plus souvent possible. Mais, si on peut utiliser autant de tests conditionnels contenant les clauses break ou continue que l'on souhaite, on ne peut placer qu'une seule clause else par boucle for. Si plusieurs clauses break ou continue sont présentes, seule la première occurrence validée par le code sera exécutée.
Les variables-compteurs, variable, des boucles for ne doivent pas être déclarées avant leur utilisation !
La dernière valeur de variable est conservée à la sortie du bloc (boucle for), mais pas à la sortie du bloc fonction où la boucle for se trouve. Cela permet, entre autre, de connaitre la valeur de sortie de variable en cas de sortie avec la clause break, ou en cas d'un pas d’incrémentation dans une suite numérique du type range ( debut , fin , pas ).
On peut imbriquer autant de boucles for que l'on souhaite, mais attention à la lisibilité, au dessus de 2 boucles imbriquées.
variable et collection ne doit jamais être une variable globale ou mutable.
La clause else, si elle est présente, sera exécutée après la dernière incrémentation de variable, si aucune instruction break n'a été utilisée pour sortir de la boucle for. Cela permet d'appliquer un traitement particulier si toutes les itérations ont bien eu lieu.
La clause continue, si elle est présente et exécutée, initiera la valeur suivante de variable et lancera la boucle suivante, si la nouvelle valeur variable est dans l'intervalle des valeurs de collection.
La clause break, si elle est présente et exécutée, fera pointer, quelque soit la valeur de variable, le programme sur le code suivant la boucle for.
L'instruction for est aussi utilisée pour la constitution optimisée d'objets itérables tel que : list ( ) ; tuple ( ) ; dict ( ) ; set ( ) ; ... Voir ces fonctions pour plus de détails sur les compréhensions de listes et leurs particularités.
EXEMPLES.
1. Boucle for avec des valeurs numériques.
Pour générer une boucle for ayant pour compteur des valeurs numériques, on utilisera l'instruction for avec syntaxe général suivante : for i in range ( debut , fin , pas ) avec :
- for, début de la boucle ;
- i, variable d'incrémentation ;
- in, opérateur logique d'appartenance ;
- range ( ), fonction native générant une suite numérique selon les attributs passés ;
- debut, première valeur numérique, inclus, pour i ;
- fin, dernière valeur numérique, exclus, pour i (valeur de sortie) ;
- pas, espacement entre 2 valeurs de i.
si fin et pas sont omis, les valeur de i partiront de 0 jusque (debut - 1) avec un pas de 1, ce qui corresponds à range ( 0 , debut , 1 ).
Les valeurs numériques debut, fin et pas, doivent être du type int ( ) (nombres entiers). Par exemple :
for i in range ( 5 ) : i prendra les valeurs 0, 1, 2, 3, 4 car 5 est exclu ;
for i in range ( 5 , 10 ) : i prendra les valeurs 5, 6, 7, 8, 9 ;
for i in range ( 2, 16 , 3 ) : i prendra les valeurs 2, 5, 8, 11, 14.
Les attributs debut, fin et pas peuvent aussi être des entiers négatifs.
for i in range ( -17 , -14 ) : i prendra les valeurs -17, -16, -15 ;
Mais si debut est un entier négatif avec fin omis, le bloc de code ne sera jamais exécuté, sans pour cela lever une exception. for i in range ( -3 ) : i prendra le valeur -3 et le programme se poursuit à la première ligne après la boucle for.
si fin est supérieur à debut ( fin < debut ), alors pas doit être une valeur négative, sinon le script contenue dans la boucle ne s’exécutera jamais. for i in range ( 7 , 2 ) : i prendre la valeur 7, qui est supérieure à la valeur de sortie 2, le script se poursuit à la première ligne après la boucle for.
for i in range ( 9 , 5 , -1 ) : i prendra les valeurs 9, 8, 7, 6.
for i in range ( 24 , 9 , -4 ) : i prendra les valeurs 24, 20, 16, 12.
Ces considérations sont à prendre en compte, quand on passe des variables comme attributs à la fonction range ( ). Par exemple, si A = 12, B = 4, C = -1, D = 8 / 5, alors :
for i in range ( A ) : i prendra les valeurs de 0 à 11 ;
for i in range ( A , B ) : i prendra la valeur 12 ;
for i in range ( B , A ) : i prendra les valeurs de 4 à 11 ;
for i in range ( B , A , C ) : i prendra la valeur 4 ;
for i in range ( A , B , C ) : i prendra la valeur de 12 à 5 ;
for i in range ( D ) : Lève l'exception TypeError.
Notez que la fonction range ( ) créer un objet de itérateur, ce qui revient à fournir un objet itérable (voir ci-dessous) à la boucle for.
2. Boucle for avec des objets itérateurs.
LST_Voyelles = [ "a" , "e" , "i" , "o" , "u" , "y" ]
for kvoyelle in LST_Voyelles :
print ( kvoyelle , end = " " )
print ( "\nFin de la liste des voyelles." )
retourne :
a e i o u y
Fin de la liste des voyelles.
3. Boucle for avec une clause continue.
LST_Voyelles = [ "a" , "e" , "i" , "o" , "u" , "y" ]
GLB_Texte = "Salut mon ami !"
for klettre in GLB_Texte :
if klettre in LST_Voyelles : continue
print ( klettre , end = " " )
print ( "\nFin de la boucle avec continue." )
retourne :
S l t m n m !
Fin de la boucle avec continue.
4. Boucle for avec une clause break.
LST_Voyelles = [ "a" , "e" , "i" , "o" , "u" , "y" ]
GLB_Texte = "Salut mon ami !"
for klettre in GLB_Texte :
if klettre in LST_Voyelles : break
print ( klettre , end = " " )
print ( '\nFin de la boucle avec break." )
retourne :
S
Fin de la boucle avec break.
5. Boucle for avec une clause else et continue, sans clause break.
LST_Voyelles = [ "a" , "e" , "i" , "o" , "u" , "y" ]
GLB_Texte = "Salut mon ami !"
for klettre in GLB_Texte :
if klettre in LST_Voyelles : continue
print ( klettre , end = " " )
else :
print ( end = "\n" )
print ( "Maintenant Python exécute la clause else," )
print ( "Avant de sortir de la boucle." )
print ( )
print ( "Fin de la boucle avec continue et else." )
retourne :
S l t m n m !
Maintenant Python exécute la clause else,
Avant de sortie de la boucle.
Fin de la boucle avec continue et else.
6. Boucle for avec une clause else et break.
LST_Voyelles = [ "a" , "e" , "i" , "o" , "u" , "y" ]
GLB_Texte = "Salut mon ami !"
for klettre in GLB_Texte :
if klettre in LST_Voyelles : break
print ( klettre , end = " " )
else :
print ( end = "\n" )
print ( "Maintenant Python exécute la clause else," )
print ( "Avant de sortir de la boucle." )
print ( )
print ( "Fin de la boucle avec break et else." )
retourne :
S Fin de la boucle avec break et else.
LECTURE DE LA DERNIER VALEUR.
Normalement, toute variable déclarée dans un bloc, est inaccessible en dehors de ce bloc et de ses sous-bloc, puis détruite à la sortie du bloc (portée locale). Cependant la variable-compteur variable d'une boucle for reste accessible, à la sortie du bloc de la boucle for, par son parent, mais pas en dehors de la fonction englobant cette boucle for.
def FNC_Test ( ) :
for kvaleur in range ( GLB_Debut , GLB_Fin , GLB_Pas ) :
if 9 < kvaleur < 16 : break
print ( kvaleur , end = ", " )
print ( " ..." , end = "\n " )
print ( "Dans la fonction Test : " )
print ( f"La dernier valeur de i est : { kvaleur }" )
GLB_Debut = int ( input ( "Debut ?" ) )
GLB_Fin = int ( input ( "Fin ?" ) )
GLB_Pas = int ( input ( "Pas ?" ) )
GLB_Pas = abs ( GLB_Pas )
if GLB_Fin < GLB_Debut : GLB_Pas = -GLB_Pas
FNC_Test ( )
print ( "Hors de la fonction Test : " )
print ( f"La dernier valeur de i est : { kvaleur }" )
retourne
Debut ?5
Fin ?17
Pas ?3
5, 8, ...
Dans la fonction Test :
La dernier valeur de i est : 11
Hors de la fonction Test :
Traceback (most recent call last):
File "/home/pi/Documents/test.py", line 20, in <module>
print ( f"La dernier valeur de i est : {i}" )
NameError: name 'i' is not defined
Bien qu'inaccessible en dehors de la fonction FNC_Test ( ), la variable kvaleur est bien déclarée pour toutes les instructions et méthodes qui l'utiliseraient après la sortie de la boucle for (mais pas avant cette dite boucle) où elle était active. Il faut donc bien faire attention à ne pas utiliser une variable de même nom, qu'une variable-compteur variable, dans les blocs parents d'une boucle for, sauf si on souhaite obtenir la dernière valeur de variable après une boucle for.
PARTICULARITES.
Certains objets peuvent avoir une méthodologie particulière des boucles for.
Par exemple les objet de type dict ( ) qui peuvent retourner 2 valeurs (clé:valeur) dans le traitement de la boucles.
DCT_Client = { "Nom" : "SMITH" , "Prenon" : "John" , "Fonction" : "Réceptionniste" , "Poste" : 17 }
for kcle , kvaleur in DCT_Client.items ( ) : print ( kcle , " -" , kvaleur , "." )
retourne :
Nom - SMITH .
Prenon - John .
Fonction - Réceptionniste .
Poste - 17 .
Ces particularités, quand elles existent, sont présentées dans les méthodes concernées.
Votre aide est précieuse pour améliorer ce site, alors n'hésitez pas à faire part de
Dans la LOGITHEQUE de MON PYTHON PAS A PAS
vous trouvez des suggestions de projets simples et classiques pour
ooo
TESTER - DÉCOUVRIR - PRATIQUER - APPROFONDIR - EXPLORER
ooo
la programmation récréative avec le langage PYTHON 3
avec un exemple de résolution à télécharger pour vous inspirer.