Contrôle d’exécution

Exécution conditionnelle

Un bloc d’instructions conditionnel est défini avec l’instruction if suivie d’une expression de type bool et de :. Le bloc doit être indenté. Voici un exemple :

1
2
3
x = 1.0
if x > 0:
    print("x est strictement positif")

x est une variable contenant un flottant. L’expression x > 0 donne un objet de type bool. Si sa valeur est True, le bloc indenté est exécuté.

Il faut noter que le bloc indenté défini après l’instruction if travaille dans le même espace de noms que le code qui contient cette instruction. Ainsi, une variable définie dans ce bloc :

1
2
3
4
x = 1.0
if x > 0:
    print("x est strictement positif")
    signe = 'positif'

est visible en dehors du bloc, c’est-à-dire après l’instruction if. Bien sûr, dans l’exemple précédent, le nom signe n’est pas défini si la condition est fausse. Pour remédier à cet inconvénient, on peut utiliser la clause else, qui permet de définir le bloc exécuté si la condition est fausse :

1
2
3
4
5
6
x = 1.0
if x > 0:
    signe = 'positif'
else :
    signe = 'négatif ou nul'
print('x est ' + signe)

L’expression située à droite de if est le plus souvent de type bool, mais il peut aussi s’agir d’un nombre (entier ou flottant), qui est automatiquement converti en True si ce nombre est strictement positif.

Dans le cas où la condition est fausse, on peut parfois avoir besoin de faire un autre test. Le mot clé elif (qui signifie else if) permet de le faire :

1
2
3
4
5
6
7
8
x = 0.0
if x > 0:
    signe = 'positif'
elif x < 0:
    signe = 'negatif'
else:
    signe = 'nul'
print('x est ' + signe)

On remarque que la condition a priori la moins probable est placée en dernier, ce que l’on essaye de faire en général pour des raisons d’efficacité.

Boucle conditionnelle

L’instruction while permet d’exécuter en boucle un bloc d’intructions, tant que la condition donnée est vraie. Par exemple :

1
2
3
4
demande = True
while demande:
    x = float(input("Entrez un nombre positif : "))
    demande = not(x > 0)

Ce bloc d’intructions demande à l’utilisateur d’entrer un nombre et répète la demande tant que le nombre saisi n’est pas positif. Ce type de boucle est à utiliser lorsque le nombre d’itérations ne peut être déterminé a priori.

Il faut noter l’existence de l’instruction break, qui permet de sortir de la boucle à partir de n’importe quel point du bloc, par exemple :

1
2
3
4
while True:
    x = float(input("Entrez un nombre positif : "))
    if x > 0:
        break

Cette solution est cependant moins claire, car la condition n’apparaît plus dans l’instruction while.

Tout comme pour le bloc conditionnel, les variables définies dans la boucle continuent d’exister après la boucle, et l’exemple précédent permet de comprendre pourquoi cela est souhaitable.

Boucle for

L’instruction for permet de construire une boucle en itérant sur les éléments d’une liste :

1
2
3
L = [0,3,8,11]
for n in L:
    print(n)

On peut en faire autant avec un n-uplet ou avec une chaîne de caractères. Si on souhaite disposer aussi des indices des éléments, voici comment procéder :

1
2
3
L = [0,3,8,11]
for i,n in enumerate(L):
    print(i,n)

L’objet range permet d’itérer sur un nombre entier en progression arithmétique.

range(start,stop,step)

Le paramètre start indique la première valeur, stop indique la valeur qu’il ne faut pas dépasser et step est l’incrément (la raison de la suite). L’incrément peut être omis et dans ce cas la valeur 1 est utilisée. L’argument start peut être omis, auquel cas la valeur 0 est utilisée. Voici un exemple :

1
2
for i in range(10):
    print(i)

Il faut remarquer que la variable i continue d’exister après le bloc de la boucle :

1
2
3
for i in range(10):
    print(i)
print(i) # dernière valeur (9)

Il est donc possible de poursuivre l’itération :

1
2
3
4
for i in range(10):
    print(i)
for i in range(i+1,20):
    print(i)

Dans certains cas, il faut passer à l’itération suivante lorsqu’une certaine condition est remplie. L’instruction continue permet de le faire :

1
2
3
4
for i in range(0,20,1):
    if (i > 10):
        continue
    print(i) # seuls les nombres <= 10 sont affichés

Tout comme pour le bloc conditionnel et la boucle while, les variables définies dans la boucle continuent d’exister après la boucle. Autrement dit, le contenu de la boucle travaille dans le même espace de noms que le code qui contient la boucle.