4.2. Boucles¶
Comme dans beau de langages de programmation, il existe deux types de boucles en Python :
- les boucles inconditionnelles qui permettent d’exécuter un bloc d’instructions un nombre de fois fixé à l’avance ;
- les boucles conditionnelles qui permettent l’exécution d’un code tant qu’une condition est remplie.
4.2.1. Boucles inconditionnelles¶
Les boucles inconditionnelles en Python permettent de parcourir un objet de type itérable (comme une liste, un tuple ou une chaîne de caractères) élément par élément.
De manière générale, on utilise les mots-clés for
et in
.
for <element> in <iterable>:
<instruction1>
<instruction2>
...
On peut itérer aussi bien sur des listes
In [1]: for elt in [1, 'toto', 2.34]:
...: print(elt)
...:
1
toto
2.34
que sur des tuples
In [2]: for elt in 5, 6, 'tata': # pas besoin de parenthèses pour le tuple dans ce cas
...: print(elt)
...:
5
6
tata
et même sur des chaînes de caractère.
In [3]: for elt in 'blabla':
...: print(elt)
...:
b
l
a
b
l
a
La fonction range
La fonction range
renvoie un itérable contenant des entiers. Plus précisément, lorsque a, b, c
sont des entiers (c!=0
),
range(a)
contient les entiers0, 1, 2, ..., a-2, a-1
(aucun sia <= 0
) ;In [4]: for i in range(5): ...: print(i) ...: 0 1 2 3 4In [5]: for i in range(-5): ...: print(i) ...:
range(a, b)
contient les entiersa, a+1, a+2, ..., b-2, b-1
(aucun sib <= a
) ;In [6]: for i in range(3, 8): ...: print(i) ...: 3 4 5 6 7In [7]: for i in range(8, 3): ...: print(i) ...:
range(a, b, c)
contient les entiersa, a+c, a+2c, ...
jusqu’à atteindreb
exclu (aucun sic*(b-a)<=0
).In [8]: for i in range(4, 9, 2): ...: print(i) ...: 4 6 8In [9]: for i in range(9, 4, 2): ...: print(i) ...:In [10]: for i in range(9, 4, -2): ....: print(i) ....: 9 7 5In [11]: for i in range(4, 9, -2): ....: print(i) ....:
4.2.2. Listes en compréhension¶
En mathématiques, il existe plusieurs manières de décrire un même ensemble. L’ensemble \(\mathcal{A}\) des entiers pairs compris entre 0 et 19 peut être défini en extension :
Il peut également être décrit en compréhension :
De la même manière, la liste de ces entiers peut être défini en Python en extension :
In [12]: [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
Out[12]: [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
et en compréhension :
In [13]: [2*n for n in range(10)]
Out[13]: [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
On parle alors de liste en compréhension.
Une autre manière de définir \(\mathcal{A}\) en compréhension est la suivante :
La version correspondante en Python est :
In [14]: [n for n in range(20) if n%2==0]
Out[14]: [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
Bien entendu, on peut utiliser ce type de liste pour d’autres objets que des entiers [1].
In [15]: [s.upper() for s in ('toto', 'tata', 'titi', 'zozo', 'zaza', 'zizi') if s[0]=='t']
Out[15]: ['TOTO', 'TATA', 'TITI']
4.2.3. Boucles conditionnelles¶
Une boucle conditionnelle consiste à répéter un bloc d’instructions tant qu’une condition est vraie.
Notes
[1] | Les listes en compréhension peuvent être utilisées pour effectuer des actions plutôt que de calculer des valeurs. In [16]: s = ([], [1, 2], ['titi', 'tata'])
In [17]: [li.append('toto') for li in s]
Out[17]: [None, None, None]
In [18]: s
|