Python >> Tutoriel Python >  >> Python

Comment terminer des boucles en Python

Savoir comment sortir correctement d'une boucle est une compétence importante. Lisez la suite pour découvrir les outils dont vous avez besoin pour contrôler vos boucles.

Dans cet article, nous allons vous montrer différentes manières de terminer une boucle en Python. Cela peut sembler un peu trivial au début, mais il y a quelques concepts importants à comprendre sur les instructions de contrôle. Nous présenterons également des méthodes moins connues pour terminer les boucles en Python afin de vous donner des outils pour un meilleur contrôle sur la façon dont vos programmes sont exécutés.

Si vous débutez avec Python, nous vous recommandons de commencer par cet article pour apprendre certains des termes que nous utilisons. Ou n'hésitez pas à consulter ce cours, qui est parfait pour les débutants car il ne suppose aucune connaissance préalable en programmation ni aucune expérience informatique.

Itérer avec des boucles for

Le point d'entrée ici utilise une boucle for pour effectuer des itérations. La boucle for est l'un des concepts de base les plus importants de Python. Vous les rencontrerez dans de nombreux contextes, et comprendre leur fonctionnement est une première étape importante.

Pour les débutants en Python, cet article sur les boucles for est un bon point de départ. Fondamentalement, une boucle for est un moyen d'itérer sur une collection de données. Les données peuvent être numériques, par exemple, un nombre à virgule flottante ou un entier, ou même des données textuelles, et peuvent être stockées dans différentes structures, y compris des listes, des tuples, des ensembles et des dictionnaires. Pour des informations plus approfondies sur ces structures de données, consultez ce cours.

Ce n'est pas fini tant que ce n'est pas fini

Cette tautologie linguistique a été le mantra de nombreux outsiders dans une compétition. C'est aussi la première étape de notre discussion sur la façon de terminer une boucle en Python. Nous pouvons définir un itérable à boucler avec l'une des structures de données mentionnées ci-dessus. Alternativement, nous pouvons également utiliser la plage intégrée (), qui renvoie une séquence immuable. Pour des exercices pratiques utilisant des fonctions intégrées, consultez ce cours.

range() accepte 3 arguments entiers :start (optionnel, par défaut 0), arrêter (obligatoire) et étape (facultatif, par défaut 1). Il renvoie une séquence avec un nombre prédéfini d'éléments.

Nous pouvons parcourir les éléments dans une séquence comme suit :

>>> for i in range(-2, 11, 3):
>>>     print(i)
-2
1
4
7
10

Il y a quelques choses intéressantes à propos de cet exemple. Premièrement, les arguments peuvent être négatifs. Vous pouvez même spécifier un pas négatif pour compter à rebours. Essayez vous-même. Deuxièmement, il n'est pas nécessaire d'atteindre la valeur d'arrêt exacte. Dans l'exemple ci-dessus, nous progressons dans la séquence commençant à -2, en prenant des pas de 3, puis nous nous arrêtons à 10. C'est avant la valeur d'arrêt définie de 11, mais une étape supplémentaire de 3 nous emmène au-delà de la valeur d'arrêt. C'est le moyen le plus évident de terminer une boucle en Python - après un nombre prédéfini d'itérations.

Si vous souhaitez itérer sur certaines données, il existe une alternative à la boucle for qui utilise les fonctions intégrées iter() et next() . Le premier définit un itérateur à partir d'un itérable, et le second renvoie l'élément suivant de l'itérateur. La boucle, ou l'itération, est terminée une fois que nous avons renvoyé le dernier élément de l'itérateur. Appel next() après cela soulève le StopIteration exception. Vous ne pouvez itérer qu'une seule fois avec ces fonctions car l'itérable n'est pas stocké en mémoire, mais cette méthode est beaucoup plus efficace lorsqu'il s'agit de grandes quantités de données. Si vous souhaitez voir des exemples concrets d'application de ces deux fonctions pour un bouclage efficace, consultez cet article.

Énoncés de contrôle de boucle

pause

L'instruction break est la première des trois instructions de contrôle de boucle en Python. Il est utilisé en conjonction avec des instructions conditionnelles (if-elif-else) pour terminer la boucle plus tôt si une condition est remplie. Plus précisément, l'instruction break fournit un moyen de quitter complètement la boucle avant la fin de l'itération. L'exemple suivant illustre ce comportement :

>>> for i in range(5):
>>>     if i == 3:
>>>         break
>>>     print(i)
>>> print('Finished')
0
1
2
Finished

Nous utilisons range() en spécifiant uniquement l'arrêt requis dispute. Dans ce cas, le start et l'étape les arguments prennent leurs valeurs par défaut de 0 et 1, respectivement. Boucler simplement à travers range(5) imprimerait les valeurs 0 à 4. Au lieu de cela, nous vérifions si l'élément est égal à 3, et si c'est le cas, l'instruction break arrête complètement la boucle. La dernière ligne, print('Finished') est en dehors de la boucle et est donc toujours exécuté après la rupture de la boucle.

continuer

Comparez cela avec l'instruction continue, comme indiqué ci-dessous :

>>> for i in range(5):
>>>     if i==3:
>>>         continue
>>>     print(i)
>>> print('Finished')
0
1
2
4
Finished

Une fois que la condition de la deuxième ligne est évaluée à True, le continue l'instruction ignore le print déclaration à l'intérieur de la boucle. Il continue ensuite la boucle à l'élément suivant. La boucle se termine lorsque le dernier élément est atteint. Ceci est pratique si vous souhaitez que votre boucle se termine mais que vous souhaitiez ignorer certains éléments. Et comme vu ci-dessus, tout code en dessous et en dehors de la boucle est toujours exécuté.

passer

La troisième instruction de contrôle de boucle est pass . À proprement parler, ce n'est pas un moyen de sortir d'une boucle en Python. Cependant, il convient de le mentionner car il apparaît souvent dans des contextes similaires aux autres instructions de contrôle. Essayez l'exemple ci-dessus avec une instruction pass au lieu de continue , et vous remarquerez tous les éléments définis par range() sont imprimés à l'écran. L'instruction pass sert d'espace réservé pour le code que vous voudrez peut-être ajouter ultérieurement à sa place.

Procéder à la sortie de secours en Python

Les fonctionnalités que nous avons vues jusqu'à présent montrent comment sortir d'une boucle en Python. Si vous souhaitez quitter complètement un programme avant d'atteindre la fin, le module sys fournit cette fonctionnalité avec le exit() fonction. L'appel de cette fonction lève un SystemExit exception et termine tout le programme.

sys.exit() accepte un argument optionnel. Il peut s'agir d'un entier ou d'une chaîne, qui peut être utilisée pour afficher un message d'erreur à l'écran.

Prenons un exemple :

>>> import sys
>>> for i in range(5):
>>>     if i == 3:
>>>         sys.exit('Error message')
>>>     print(i)
>>> print('Finished')
0
1
2
SystemExit: Error message

Dans ce contexte, sys.exit() se comporte de la même manière que break dans l'exemple précédent, mais lève également une exception. Par conséquent, l'instruction print finale en dehors de la boucle for n'est pas exécutée dans cet exemple. L'ensemble du programme est simplement terminé.

Boucle sur des listes

Une opération courante à effectuer dans une boucle consiste à modifier une structure de données telle qu'une liste. Si vous souhaitez supprimer un élément d'une liste pendant une boucle, vous pouvez vous retrouver à chercher le mot-clé del, surtout si vous avez une formation dans d'autres langages de programmation comme C++ ou Java.

Cela peut être un outil pratique car il peut supprimer des éléments des structures de données ainsi que supprimer des variables locales ou globales. Mais cela peut devenir un peu délicat si vous modifiez une liste en boucle.

Prenons l'exemple suivant, où nous voulons supprimer tous les nombres impairs d'une liste de nombres :

>>> numbers = [1, 1, 2, 3, 4, 5, 6]
>>> for i in range(len(numbers)):
...     if numbers[i] % 2 != 0:
...         del numbers[i]

L'exécution de ce code produira IndexError: list index out of range . Nous avons défini notre boucle pour qu'elle s'exécute sur 7 itérations (la longueur de la liste). Puisque nous avons défini cela avec range() , il est immuable. Pendant la boucle, nous commençons à supprimer des éléments de la liste, ce qui modifie sa longueur. Il a maintenant moins d'éléments que la séquence sur laquelle nous voulons itérer. De plus, si vous prenez un moment pour considérer l'exemple, vous voyez que le deuxième 1 ne sera pas supprimé car il glisse vers la position 0 alors que la boucle va vers la position avec l'index 1.

Pour remédier à tout cela, nous pouvons utiliser une astuce astucieuse pour parcourir les éléments dans l'ordre inverse, en utilisant la fonction intégrée reversed() :

>>> numbers = [1, 1, 2, 3, 4, 5, 6]
>>> for i in reversed(range(len(numbers))):
... 	if numbers[i] % 2 != 0:
...     	del numbers[i]

Le reversed() La fonction renvoie un itérateur, dont nous avons parlé plus tôt dans l'article. Alternativement, vous pouvez utiliser range() pour compter à rebours pendant l'itération comme nous l'avons noté précédemment. Ces méthodes suppriment les éléments de la fin de la liste, garantissant que l'index de la liste actuelle n'est jamais supérieur à la longueur de la liste.

Ou encore mieux, nous pouvons utiliser l'approche la plus Pythonic, une compréhension de liste, qui peut être implémentée comme suit :

>>> numbers = [1, 1, 2, 3, 4, 5, 6]
>>> numbers = [num for num in numbers if num % 2 == 0]

Pour ceux d'entre vous qui n'ont jamais vu ce genre de magie auparavant, cela équivaut à définir une liste, à utiliser une boucle for, à tester une condition et à l'ajouter à une liste. Normalement, cela prendrait 4 lignes. Mais avec une compréhension de liste, nous y parvenons en une seule !

Obtenez plus de contrôle et terminez les boucles en Python

Cette discussion s'est concentrée sur la façon de sortir d'une boucle en Python - en particulier, comment sortir d'une boucle for en Python. Nous aimerions vous encourager à passer à l'étape suivante et à appliquer ce que vous avez appris ici.

Comme nous l'avons déjà dit, commencez par faire de petits pas et progressez vers des exemples plus complexes. Essayez d'expérimenter avec while boucles. Vous découvrirez peut-être qu'il existe un moyen plus fondamental de quitter un while boucle qui ne s'applique pas aux boucles for - lorsque la condition définie par le while l'instruction est évaluée à False .

Comme autre extension, testez ce qui se passe lorsque vous utilisez des boucles for imbriquées avec des instructions de contrôle. Vous constaterez que vous pouvez modifier une boucle, tandis que l'autre continue de s'exécuter normalement. Avec un peu de pratique, vous maîtriserez le contrôle de la fin d'une boucle en Python.