
Cet article décrit une boucle (exécution répétée) utilisant l’instruction while en Python.
Contrairement à l’instruction for, qui récupère séquentiellement des éléments itérables tels que list, while se répète tant que l’expression conditionnelle est True.
Cet article décrit le contenu suivant.
- Utilisation de base de l’instruction while en Python
- Terminez la boucle :
break
- Passez au cycle suivant :
continue
- Exécuter après l’arrêt normal :
else
- Boucle infinie avec l’instruction while
- Terminer avec une entrée au clavier
- Résiliation forcée
Voir l’article suivant pour l’instruction for. L’instruction for est plus appropriée lorsque vous souhaitez obtenir un élément tel qu’une liste ou lorsque vous souhaitez exécuter uniquement un certain nombre de fois.
Au lieu d’utiliser l’instruction while, une boucle infinie peut être implémentée en utilisant l’instruction for et les fonctions du module itertools de la bibliothèque standard. Des boucles infinies avec des compteurs, etc. peuvent souvent être écrites facilement en utilisant les fonctions d’itertools.
Utilisation de base de l’instruction while en Python
L’instruction while en Python s’écrit comme suit :
while expression:
... <do something>
Un exemple spécifique est le suivant.
i = 0
while i < 3:
print(i)
i += 1
# 0
# 1
# 2
Vous pouvez spécifier plusieurs conditions pour la partie expression avec et ou ou.
Terminez la boucle :break
Utilisez break pour terminer la boucle while.
i = 0
while i < 3:
print(i)
if i == 1:
print('!!BREAK!!')
break
i += 1
# 0
# 1
# !!BREAK!!
Passez au cycle suivant :continue
Vous pouvez ignorer le cycle et passer au suivant en continuant.
break termine la boucle entière, mais continue ne saute que le code après l’instruction continue dans le cycle.
while i < 3:
if i == 1:
print('!!CONTINUE!!')
i += 1
continue
print(i)
i += 1
# 0
# !!CONTINUE!!
# 2
Notez que si vous écrivez le code d’une variable utilisée dans une expression telle que i += 1 après continue, la variable ne sera pas mise à jour et la boucle ne se terminera pas de manière inattendue.
L’arrêt forcé est décrit à la fin.
Exécuter après l’arrêt normal :else
Utilisez else pour exécuter quelque chose une fois la boucle terminée avec succès.
i = 0
while i < 3:
print(i)
i += 1
else:
print('!!FINISH!!')
# 0
# 1
# 2
# !!FINISH!!
Si la boucle se termine par break, la suite de la clause else n’est pas exécutée.
i = 0
while i < 3:
print(i)
if i == 1:
print('!!BREAK!!')
break
i += 1
else:
print('!!FINISH!!')
# 0
# 1
# !!BREAK!!
Dans le cas de continue, la suite de la clause else est exécutée.
i = 0
while i < 3:
if i == 1:
print('!!SKIP!!')
i += 1
continue
print(i)
i += 1
else:
print('!!FINISH!!')
# 0
# !!SKIP!!
# 2
# !!FINISH!!
Boucle infinie avec l’instruction while
Si l’expression conditionnelle dans l’instruction while est toujours True, la boucle ne se termine jamais et l’exécution est répétée à l’infini.
Dans l’exemple suivant, l’heure UNIX est acquise par time.time() et le temps écoulé est mesuré pour définir la condition d’interruption.
import time
start = time.time()
while True:
time.sleep(1)
print('processing...')
if time.time() - start > 5:
print('!!BREAK!!')
break
# processing...
# processing...
# processing...
# processing...
# processing...
# !!BREAK!!
Par exemple, un nombre différent de zéro ou une chaîne non vide est considéré comme vrai, donc même while 1:, etc. entraînera une boucle infinie.
start = time.time()
while 1:
time.sleep(1)
print('processing...')
if time.time() - start > 5:
print('!!BREAK!!')
break
# processing...
# processing...
# processing...
# processing...
# processing...
# !!BREAK!!
Dans l’exemple de code ci-dessus, une boucle infinie est utilisée pour l’explication, mais la même opération peut être écrite sans boucle infinie, comme indiqué ci-dessous.
start = time.time()
while time.time() - start <= 5:
time.sleep(1)
print('processing...')
else:
print('!!FINISH!!')
# processing...
# processing...
# processing...
# processing...
# processing...
# !!FINISH!!
Terminer avec une entrée au clavier
Pour terminer la boucle infinie par une entrée au clavier au lieu de définir break, interceptez KeyboardInterrupt par ctrl + c.
try:
while True:
time.sleep(1)
print('processing...')
except KeyboardInterrupt:
print('!!FINISH!!')
Si vous appuyez sur ctrl + c sur le terminal en cours d’exécution (Mac) ou sur l’invite de commande (Windows cmd.exe), la boucle while est terminée et la clause except est exécutée.
Consultez l’article suivant pour la gestion des exceptions.
Résiliation forcée
Si vous vous trompez de définition de l’expression conditionnelle, le processus peut tomber de manière inattendue dans une boucle infinie et ne jamais se terminer.
Il peut être résilié de force par les moyens suivants.
- ctrl + c dans un terminal en cours d’exécution
- Terminer le processus dans Activity Monitor ou Task Manager
- Trouvez le nom du processus Python et tuez-le