Boucle¶
Une boucle permet de répéter un bloc d’instructions un certain nombre de fois.
La boucle for
¶
La boucle for
est une répétition pour chaque élément d’un ensemble.
for x in sequence:
bloc
Formellement nous avons
le mot-clé
for
une variable
x
le mot-clé
in
une
séquence
(liste, chaîne, plage)le deux-points
:
un
bloc
d’instructions indenté.
Par exemple
liste = ['Ada', 'Grace', 'Anita']
for x in liste:
print(x)
Ada
Grace
Anita
On appelle les répétions du bloc
aussi des itérations. On dit itérer sur la séquence.
On appelle la variable x
un itérateur. Cette variable peut avoir n’importe quel nom. Cette variable prend successivement toutes les valeurs de la séquence, une après l’autre.
Le bloc répété¶
Le bloc répété consiste en une ou plusieurs (1+) instructions. Toutes les instructions qui font partie du bloc sont indentées. La première instruction qui n’est plus indentée ne fait plus partie du bloc.
Ici instruction 1 fait partie du bloc d’itération.
Donc, cette instruction est exécutée 3 fois.
for i in range(3):
print('i =', i)
print('instruction 1')
print('instruction 2')
i = 0
instruction 1
i = 1
instruction 1
i = 2
instruction 1
instruction 2
Maintenant, instruction 1 ne fait plus partie du bloc d’itération.
Cette instruction est exécutée seulement une fois.
for i in range(3):
print('i =', i)
print('instruction 1')
print('instruction 2')
i = 0
i = 1
i = 2
instruction 1
instruction 2
Itérer sur une liste¶
Voici une itération sur une liste de textes.
fruits = ['pomme', 'poire', 'orange']
for fruit in fruits:
print('***', fruit)
*** pomme
*** poire
*** orange
Voici une itération sur une liste de nombres.
premiers = [2, 3, 5, 7]
for i in premiers:
print('i =', i, ' i**2 =', i**2)
i = 2 i**2 = 4
i = 3 i**2 = 9
i = 5 i**2 = 25
i = 7 i**2 = 49
adjectives = ['belle', 'riche', 'intelligente']
for x in adjectives:
print('elle est', x)
elle est belle
elle est riche
elle est intelligente
Nous pouvons aussi concaténer les textes et la variable avec l’opérateur +
.
Attention aux espaces!
for x in adjectives:
print('elle est ' + x + ', bien plus ' + x + ' que lui.')
elle est belle, bien plus belle que lui.
elle est riche, bien plus riche que lui.
elle est intelligente, bien plus intelligente que lui.
Itérer sur une chaine¶
La boucle for
peut itérer sur une chaine.
L’itérateur prend alors chaque valeur de la séquence.
for c in 'Python':
print('lettre -', c)
lettre - P
lettre - y
lettre - t
lettre - h
lettre - o
lettre - n
Itérer sur une plage¶
Nous pouvons itérer sur une plage d’entiers
for i in range(1, 7):
print(i, '* 2 =', i*2)
1 * 2 = 2
2 * 2 = 4
3 * 2 = 6
4 * 2 = 8
5 * 2 = 10
6 * 2 = 12
Nous pouvons utiliser l’itérateur multiple fois dans le bloc d’itération.
for i in range(10, 15):
print(i, '*', i, '=', i*i)
10 * 10 = 100
11 * 11 = 121
12 * 12 = 144
13 * 13 = 169
14 * 14 = 196
Boucles imbriquées¶
Une boucle peut être placée dans le corps d’une autre boucle.
Nous appelons
la boucle en
i
boucle extérieure, etla boucle en
j
boucle intérieure.
for i in range(3):
for j in range(2):
print('i =', i, ' j =', j)
i = 0 j = 0
i = 0 j = 1
i = 1 j = 0
i = 1 j = 1
i = 2 j = 0
i = 2 j = 1
Normalement chaque instruction print
se termine avec un retour à la ligne.
L’argument optionnel end
permet de le changer en 3 espaces ' '
.
for i in range(3):
for j in range(5):
print('(', i, j, ')', end=' ')
print()
( 0 0 ) ( 0 1 ) ( 0 2 ) ( 0 3 ) ( 0 4 )
( 1 0 ) ( 1 1 ) ( 1 2 ) ( 1 3 ) ( 1 4 )
( 2 0 ) ( 2 1 ) ( 2 2 ) ( 2 3 ) ( 2 4 )
Les boucles imbriquées nous permettent par exemple de programmer une table de multiplication.
Cette fois nous utilisons le caractère spécial tabulateur \t
qui aligne les caractères sur des multiples de 8.
for i in range(1, 5):
for j in range(1, 10):
print(i * j, end='\t')
print()
1 2 3 4 5 6 7 8 9
2 4 6 8 10 12 14 16 18
3 6 9 12 15 18 21 24 27
4 8 12 16 20 24 28 32 36
REPL¶
La boucle d’execution d’une console Python s’appelle aussi REPL:
Read
Evaluate
Print
Loop
Depuis JupyterLab choisir File > New > Terminal.
Ensuite démarrer une session interactive de Python avec la commande python3
.
bash-3.2$ python3
Python 3.7.9 (v3.7.9:13c94747c7, Aug 15 2020, 01:31:08)
[Clang 6.0 (clang-600.0.57)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
Nous pouvons simuler ceci
Boucle d’évaluation¶
Nous pouvons simuler la boucle d’évaluation simplifié avec
une boucle
while
la fonction
input
pour saisir une expressionla fonction
eval
pour évaluer l’expressionla fonction
print
pour afficher le résultat
La fonction eval
permet d’évaluer une chaine qui represente une expression Python valide.
eval('12 ** 2')
144
eval('1')
1
exp = input('>>>')
while exp:
res = eval(exp)
print(res)
exp = input('>>>')
>>> 1 + 2
3
>>> 12 * 23
276
>>> 23 **4
279841
>>> 123 // 23
5
>>>
exec('a = 123')
a
123
Evaluer une expression¶
L’évaluation d’une affectation donne une erreur.
eval('a = 123')
File "<string>", line 1
a = 123
^
SyntaxError: invalid syntax
Nous devons utiliser la fonction exec
exec('a = 1.23')
a
1.23
a
123
Si l’expression contient le symbol =
nous exécutions l’expression, sinon
nous évaluons l’expression et affichons le résultat.
exp = input('>>>')
while exp:
if '=' in exp:
exec(exp)
else:
print(eval(exp))
exp = input('>>>')
>>> 123 ** 23
1169008215014432917465348578887506800769541157267
>>> a = 12
>>> a ** 2
144
>>> a += 1
>>> a
13
>>>
Terminer avec quit()¶
La vrai console Python quitte avec la commande quit()
.
La fonction print
retourne la valeur None
.
Dans ce cas nous ne voulons pas afficher le résultat.
exp = input('>>>')
while exp != 'quit()':
if '=' in exp:
exec(exp)
else:
res = eval(exp)
if res:
print(res)
exp = input('>>>')
>>> print('hello')
hello
>>> a = 12
>>> print(a ** 2)
144
>>> quit
<IPython.core.autocall.ZMQExitAutocall object at 0x102d6e090>
>>> quit()
Quiz¶
Dans le quiz suivant il faut compter, ou plutôt avoir l’oeil pour la quantitié d’émojis. Quand vous deveinez correctement, votre score incrémente.
import random
score = 0
while True:
n = random.randint(1, 9)
x = input(str(score) + '\t' + '❤️' * n)
if x == '':
break
elif int(x) == n:
score += 1
print('total score:', score)
0 ❤️❤️❤️❤️❤️❤️❤️ 6
0 ❤️❤️❤️❤️❤️❤️❤️ 7
1 ❤️❤️❤️❤️❤️ 5
2 ❤️❤️❤️❤️❤️ 5
3 ❤️❤️❤️ 3
4 ❤️❤️❤️❤️ 4
5 ❤️❤️❤️❤️❤️❤️❤️❤️ 8
6 ❤️❤️❤️ 3
7 ❤️❤️❤️❤️❤️❤️ 7
7 ❤️❤️❤️ 3
8 ❤️❤️❤️❤️❤️❤️
total score: 8