Formulation du problème
Étant donné une boucle Python et une condition logique. Comment redémarrer la boucle si la condition est remplie ?
for/while ...: # ... loop body here ... if condition: # restart loop
Solution 1 :Réinitialiser la boucle While
La boucle while vérifie une condition afin de déterminer si le corps de la boucle doit être exécuté ou non. Vous pouvez remettre la condition à sa valeur initiale afin de relancer effectivement la boucle.
Dans l'exemple suivant, vous utilisez la condition de boucle i < 3
et augmentez la valeur de i
à chaque itération de la boucle. Vous pouvez réinitialiser la valeur de la variable de boucle à i = 0
pour relancer la boucle dès que l'utilisateur tape 'r'
.
i = 0 while i < 3: print('i =', i) # loop body # Restart loop logic i = i + 1 if input() == 'r': i = 0 # force restart
Vous utilisez le Python intégré input()
fonction pour prendre l'entrée de l'utilisateur à chaque itération et la renvoyer sous forme de chaîne.
Voici un exemple d'exécution où la boucle n'est pas redémarrée car l'utilisateur n'a jamais utilisé 'r'
comme entrée (une ligne sur deux est l'entrée utilisateur, tandis que la deuxième ligne est la première ligne d'entrée utilisateur) :
i = 0 alice i = 1 bob i = 2 carl
Et voici un exemple où la boucle est redémarrée à la troisième itération en raison du 'r'
entrée utilisateur :
i = 0 alice i = 1 bob i = 2 r i = 0 alice i = 1 bob i = 2 carl
Si vous avez besoin d'un rappel rapide sur la façon de traiter les entrées utilisateur, consultez ce didacticiel :
Solution 2 :boucle de redémarrage imbriquée
Une alternative pour forcer une boucle à redémarrer si une certaine condition est remplie consiste à intégrer la boucle de redémarrage dans une boucle while externe pour l'exécuter à plusieurs reprises jusqu'à ce qu'une condition de sortie soit remplie.
Le code suivant montre comment procéder en Python :
restart = True while restart: for i in range(3): print('i =', i) # loop body # Default: execute once restart = False # Restart loop logic (any restart condition): if input() == 'r': restart = True break # force restart
Nous créons une variable restart initialement définie sur True
. La boucle externe s'exécutera jusqu'à ce que la variable de redémarrage soit définie sur False
.
Maintenant, vous exécutez la boucle principale qui doit être potentiellement redémarrée si une certaine condition est remplie. Le code utilise la condition de redémarrage input() == 'r'
, donc si l'utilisateur saisit le caractère 'r'
, la boucle est relancée.
Le redémarrage est accompli en définissant la variable de redémarrage sur True
à nouveau, de sorte que la boucle externe s'exécute à nouveau, ce qui signifie que toute la boucle interne for est redémarrée.
Ce cycle entier est répété jusqu'à ce que la condition de redémarrage ne soit jamais remplie. Cela définit automatiquement le restart
variable à False
ce qui signifie que la boucle externe n'est pas exécutée à nouveau, ce qui signifie que la boucle interne n'est pas redémarrée.
Voici un exemple d'exécution où la boucle n'est pas redémarrée car l'utilisateur n'a jamais utilisé 'r'
en entrée :
i = 0 alice i = 1 bob i = 2 carl
Et voici un exemple où la boucle est redémarrée à la troisième itération en raison du 'r'
entrée utilisateur :
i = 0 alice i = 1 bob i = 2 r i = 0 alice i = 1 bob i = 2 carl