Python >> Tutoriel Python >  >> Python

Comment redémarrer une boucle en Python ?

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