While loop - Learn Python 3 - Snakify

Lesson 6
Boucle en boucle


1. Boucle en boucle

while loop répète la séquence d'actions plusieurs fois jusqu'à ce que certaines conditions aient la valeur False . La condition est donnée avant le corps de la boucle et est vérifiée avant chaque exécution du corps de la boucle. En règle générale, l' while boucle est utilisée quand il est impossible de déterminer le nombre exact d'itérations de la boucle à l' avance.

La syntaxe de la while boucle dans le cas le plus simple ressemble à ceci:

while some condition:
    a block of statements

Python vérifie d'abord la condition. Si elle est fausse, la boucle est terminée et le contrôle est passé à l'instruction suivante après while corps de la boucle. Si la condition est True, le corps de la boucle est exécuté, puis la condition est vérifiée à nouveau. Cela continue alors que la condition est vraie. Une fois que la condition devient False, la boucle se termine et le contrôle est passé à l'instruction suivante après la boucle.

Par exemple, le fragment de programme suivant imprime les carrés de tous les entiers de 1 à 10. Ici, on peut remplacer la boucle "while" par la boucle for ... in range(...) :

i = 1
while i <= 10:
    print(i ** 2)
    i += 1

Dans cet exemple, la variable i à l'intérieur de la boucle itère de 1 à 10. Une telle variable dont la valeur change à chaque nouvelle itération de boucle s'appelle un compteur. Notez qu'après avoir exécuté ce fragment, la valeur de la variable i est définie et est égale à 11 , car lorsque i == 11 la condition i <= 10 est fausse pour la première fois.

Voici un autre exemple d'utilisation de la while la boucle pour déterminer le nombre de chiffres d'un nombre entier n :

n = int(input())
length = 0
while n > 0:
    n //= 10  # c&#39;est équivalent à n = n // 10
    length += 1
print(length)  # 4

À chaque itération, nous coupons le dernier chiffre du nombre en utilisant la division entière par 10 ( n //= 10 ). Dans la length variable length nous comptons combien de fois nous l'avons fait.

En Python, il existe un autre moyen plus simple de résoudre ce problème: length = len(str(i)) .

Advertising by Google, may be based on your interests

2. Flux de contrôle de boucle: autre

On peut écrire une instruction else: après un corps de boucle qui est exécuté une fois après la fin de la boucle:

i = 1
while i <= 10:
    print(i)
    i += 1
else:
    print('Loop ended, i =', i)

Au premier coup d'œil, cette affirmation ne semble pas avoir de sens, car le corps else: statement peut juste être placé après la fin de la boucle. L'instruction "else" après une boucle n'a de sens que lorsqu'elle est utilisée en combinaison avec la break instruction. Si pendant l'exécution de la boucle, l'interpréteur Python rencontre une break , il arrête immédiatement l'exécution de la boucle et en sort. Dans ce cas, la branche else: n'est pas exécutée. Ainsi, break est utilisé pour annuler l'exécution de la boucle au milieu de toute itération.

Voici un exemple de Black Jack: un programme qui lit les nombres et les somme jusqu'à ce que le total soit supérieur ou égal à 21. La séquence d'entrée se termine par 0 pour que le programme puisse s'arrêter même si la somme totale de tous les nombres est moins de 21.

Voyons comment il se comporte sur les différentes entrées.

Version 1. La boucle est quittée normalement après vérification de la condition, de sorte que la branche "else" est exécutée.

total_sum = 0
a = int(input())
while a != 0:
    total_sum += a
    if total_sum >= 21:
        print('Total sum is', total_sum)
        break
    a = int(input())
else:
    print('Total sum is less than 21 and is equal to', total_sum, '.')

Version 2. La boucle est interrompue par break , donc la branche "else" est ignorée.

total_sum = 0
a = int(input())
while a != 0:
    total_sum += a
    if total_sum >= 21:
        print('Total sum is', total_sum)
        break
    a = int(input())
else:
    print('Total sum is less than 21 and is equal to', total_sum, '.')

La branche "Else" peut également être utilisée avec la boucle "for". Regardons l'exemple quand un programme lit 5 entiers mais s'arrête juste quand le premier entier négatif est rencontré.

Version 1. La boucle est sortie normalement, donc la branche "else" est exécutée.

for i in range(5):
    a = int(input())
    if a < 0:
        print('Met a negative number', a)
        break
else:
    print('No negative numbers met')

Version 2. La boucle est annulée, donc la branche "else" n'est pas exécutée.

for i in range(5):
    a = int(input())
    if a < 0:
        print('Met a negative number', a)
        break
else:
    print('No negative numbers met')

Advertising by Google, may be based on your interests

3. Flux de contrôle de boucle: continuer

Une autre instruction utilisée pour contrôler l'exécution de la boucle est continue . Si interpréteur Python rencontre continue quelque part au milieu de l'itération de la boucle, il saute toutes les instructions restantes et procède à l'itération suivante.

for num in range(2, 10):
    if num % 2 == 0:
        print("Found an even number", num)
        continue
    print("Found a number", num)

Si la break et continue sont placés à l'intérieur de plusieurs boucles imbriquées, elles n'affectent que l'exécution de la plus secrète. Regardons un exemple plutôt stupide pour le démontrer:

for i in range(3):
    for j in range(5):
        if j > i:
            # ne casse que le pour en ligne 2
            break
        print(i, j)

Les instructions break et continue sont découragées, si vous pouvez implémenter votre idée sans les utiliser. Voici un exemple typique d'une mauvaise utilisation de la break : ce code compte le nombre de chiffres dans un entier.

n = int(input())
length = 0
while True:
    length += 1
    n //= 10
    if n == 0:
        break
print('Length is', length)

Il est plus propre et plus facile à lire pour réécrire cette boucle avec une condition de boucle significative:

n = int(input())
length = 0
while n != 0:
    length += 1
    n //= 10
print('Length is', length)
Advertising by Google, may be based on your interests

4. Affectation multiple

En Python, il est possible qu'une seule instruction d'affectation modifie la valeur de plusieurs variables. Voyons voir:

a, b = 0, 1

L'effet démontré ci-dessus code peut être écrit comme:

a = 0
b = 1

La différence entre les deux versions est que l'assignation multiple change les valeurs de deux variables simultanément.

L'affectation multiple est utile lorsque vous devez échanger les valeurs de deux variables. Dans les langages de programmation plus anciens sans le support de l'assignation multiple, ceci peut être fait en utilisant la variable auxiliaire:

a = 1
b = 2
tmp = a
a = b
b = tmp
print(a, b)
# 2 1

En Python, le même échange peut être écrit en une ligne:

a = 1
b = 2
a, b = b, a
print(a, b)
# 2 1

Le côté gauche de "=" devrait avoir une liste de noms de variables séparés par des virgules. Le côté droit peut être n'importe quelle expression, séparée par des virgules. Les listes de gauche et de droite doivent être de même longueur.

Advertising by Google, may be based on your interests