Les boucles

Une boucle est un outil puissant pour éviter de répéter des opérations. Prenons une liste

[16]:
x = [1,2,3]
[17]:
x[0] *= 2
x[1] *= 2
x[2] *= 2
x
[17]:
[2, 4, 6]

On peut faire beaucoup mieux…

Itérateur for

On peut itérer sur une liste de deux façons en utilisant un itérateur. D’abord, on peut le faire par l’indice, ce qui est la forme commune dans d’autres langages:

[18]:
x = [1,2,3]
for i in [0,1,2]:
    x[i] *= 2
x
[18]:
[2, 4, 6]

On doit faire attention à l’indentation en Python. Pour une boucle, comme un fonction, il faut indenter ce qui roule à l’intérieur d’une boucle.

Python permet aussi d’utiliser le même itérateur de la manière suivante:

[19]:
x = [1,2,3]
[x[i]**2 for i in [0,1,2]]
[19]:
[1, 4, 9]

On peut aussi utiliser range ou lieu de la liste sur les indices. len() redonne le nombre d’éléments dans la liste.

[20]:
x = [1,2,3]
[x[i]**2 for i in range(len(x))]
[20]:
[1, 4, 9]

On peut aussi itérer sur les éléments de la liste directement. Ceci évite de gérer les indices.

[21]:
xs = [1,2,3]
[x**2 for x in xs]
[21]:
[100, 400, 900]

La fonction enumerate

Parfois, on veut utiliser à la fois les indices d’une liste mais aussi itérer sur les éléments. Alors on utilise enumerate(). Deux indices sont alors disponible dans la boucle: le premier est l’indice, le deuxième la valeur.

[22]:
xs = [10,20,30]
for i,x in enumerate(xs):
    print('indice =',i,', valeur de la liste = ',x)

indice = 0 , valeur de la liste =  10
indice = 1 , valeur de la liste =  20
indice = 2 , valeur de la liste =  30

La fonction zip

Parfois, il y a deux listes et on veut faire quelque chose éléments par éléments, on peut y aller directement au lieu de passer par les indices

[23]:
xs = [10,20,30]
zs = [4,2,3]
for x,z in zip(xs,zs):
    print('x = ',x,', z = ',z)
x =  10 , z =  4
x =  20 , z =  2
x =  30 , z =  3

Boucles multiples

On peut facilement imbriquer des boucles.

[24]:
for x in xs:
    for z in zs:
            print('x = ',x,', z = ',z)
x =  10 , z =  4
x =  10 , z =  2
x =  10 , z =  3
x =  20 , z =  4
x =  20 , z =  2
x =  20 , z =  3
x =  30 , z =  4
x =  30 , z =  2
x =  30 , z =  3

Boucles while

La boucle while est utile quand on ne sait pas quand une répétition doit se terminer ou quand la terminaison dépendra d’un calcul qui doit être fait. Je donne un exemple

[26]:
todo = 5
while todo>0:
    print('todo = ',todo)
    todo -=1

todo =  5
todo =  4
todo =  3
todo =  2
todo =  1