IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Apprendre à programmer avec Python

Apprendre programmer avec Python


prcdentsommairesuivant

Chapitre 3 : Contrle du flux d'instructions

Dans notre premier chapitre, nous avons vu que l'activit essentielle d'un analyste-programmeur est la rsolution de problmes. Or, pour rsoudre un problme informatique, il faut toujours effectuer une srie d'actions dans un certain ordre. La description structure de ces actions et de l'ordre dans lequel il convient de les effectuer s'appelle un algorithme.

Les structures de contrle sont les groupes d'instructions qui dterminent l'ordre dans lequel les actions sont effectues. En programmation moderne, il en existe seulement trois : la squence et la slection, que nous allons dcrire dans ce chapitre, et la rptition que nous aborderons au chapitre suivant.

3.1. Squence d'instructions

Sauf mention explicite, les instructions d'un programme s'excutent les unes aprs les autres, dans l'ordre o elles ont t crites l'intrieur du script.

Le chemin suivi par Python travers un programme est appel un flux d'instructions, et les constructions qui le modifient sont appeles des instructions de contrle de flux.

Python excute normalement les instructions de la premire la dernire, sauf lorsqu'il rencontre une instruction conditionnelle comme l'instruction if dcrite ci-aprs (nous en rencontrerons d'autres plus loin, notamment propos des boucles de rptition). Une telle instruction va permettre au programme de suivre diffrents chemins suivant les circonstances.

10 Tel qu'il est utilis ici, le terme de squence dsigne donc une srie d'instructions qui se suivent. Nous prfrerons dans la suite de cet ouvrage rserver ce terme un concept Python prcis, lequel englobe les chanes de caractres, les tuples et les listes (voir plus loin).

3.2. Slection ou excution conditionnelle

Si nous voulons pouvoir crire des applications vritablement utiles, il nous faut des techniques permettant d'aiguiller le droulement du programme dans diffrentes directions, en fonction des circonstances rencontres. Pour ce faire, nous devons disposer d'instructions capables de tester une certaine condition et de modifier le comportement du programme en consquence.

La plus simple de ces instructions conditionnelles est l'instruction if. Pour exprimenter son fonctionnement, veuillez entrer dans votre diteur Python les deux lignes suivantes :

 
Sélectionnez

>>> a = 150
>>> if (a > 100):
...

La premire commande affecte la valeur 150 la variable a. Jusqu'ici rien de nouveau.
Lorsque vous finissez d'entrer la seconde ligne, par contre, vous constatez que Python ragit d'une nouvelle manire. En effet, et moins que vous n'ayez oubli le caractre : la fin de la ligne, vous constatez que le prompt principal (>>>) est maintenant remplac par un prompt secondaire constitu de trois points11.

Si votre diteur ne le fait pas automatiquement, vous devez prsent effectuer une tabulation (ou entrer 4 espaces) avant d'entrer la ligne suivante, de manire ce que celle-ci soit indente (c'est-dire en retrait) par rapport la prcdente. Votre cran devrait se prsenter maintenant comme suit :

 
Sélectionnez

>>> a = 150
>>> if (a > 100):
...     print "a dpasse la centaine"
...

Frappez encore une fois <Enter>. Le programme s'excute, et vous obtenez :

 
Sélectionnez

a dpasse la centaine

Recommencez le mme exercice, mais avec a = 20 en guise de premire ligne : cette fois Python n'affiche plus rien du tout.

L'expression que vous avez place entre parenthses est ce que nous appellerons dsormais une condition. L'instruction if permet de tester la validit de cette condition. Si la condition est vraie, alors l'instruction que nous avons indente aprs le : est excute. Si la condition est fausse, rien ne se passe. Notez que les parenthses utilises ici sont optionnelles sous Python. Nous les avons utilises pour amliorer la lisibilit. Dans d'autres langages, il se peut qu'elles soient obligatoires.

Recommencez encore, en ajoutant deux lignes comme indiqu ci-dessous. Veillez bien ce que la quatrime ligne dbute tout fait gauche (pas d'indentation), mais que la cinquime soit nouveau indente (de prfrence avec un retrait identique celui de la troisime) :

 
Sélectionnez

>>> a = 20
>>> if (a > 100):
...     print "a dpasse la centaine"
... else:
...     print "a ne dpasse pas cent"
...

Frappez <Enter> encore une fois. Le programme s'excute, et affiche cette fois :

 
Sélectionnez

a ne dpasse pas cent

Comme vous l'aurez certainement dj compris, l'instruction else ( sinon , en anglais) permet de programmer une excution alternative, dans laquelle le programme doit choisir entre deux possibilits. On peut faire mieux encore en utilisant aussi l'instruction elif (contraction de else if ) :

 
Sélectionnez

>>> a = 0
>>> if a > 0 :
...     print "a est positif"
... elif a < 0 :
...     print "a est ngatif"
... else:
...     print "a est nul"
...

11 Dans certaines versions de l'diteur Python pour Windows, le prompt secondaire n'apparat pas.

3.3. Oprateurs de comparaison

La condition value aprs l'instruction if peut contenir les oprateurs de comparaison suivants :

 
Sélectionnez

x == y 				# x est gal  y
x != y 				# x est diffrent de y
x > y 				# x est plus grand que y
x < y 				# x est plus petit que y
x >= y 				# x est plus grand que, ou gal  y
x <= y 				# x est plus petit que, ou gal  y

Exemple :

 
Sélectionnez

>>> a = 7
>>> if (a % 2 == 0):
...     print "a est pair"
...     print "parce que le reste de sa division par 2 est nul"
... else:
...     print "a est impair"
...

Notez bien que l'oprateur de comparaison pour l'galit de deux valeurs est constitu de deux signes gale et non d'un seul12. (Le signe gale utilis seul est un oprateur d'affectation, et non un oprateur de comparaison. Vous retrouverez le mme symbolisme en C++ et en Java).

12 Rappel : l'oprateur % est l'oprateur modulo : il calcule le reste d'une division entire. Ainsi par exemple, a % 2 fournit le reste de la division de a par 2.

3.4. Instructions composes - Blocs d'instructions

La construction que vous avez utilise avec l'instruction if est votre premier exemple d'instruction compose. Vous en rencontrerez bientt d'autres. Sous Python, toutes les instructions composes ont toujours la mme structure : une ligne d'en-tte termine par un double point, suivie d'une ou de plusieurs instructions indentes sous cette ligne d'en-tte. Exemple :

 
Sélectionnez

Ligne d'en-tte:
    premire instruction du bloc
    ... ...
    ... ...
    dernire instruction du bloc

S'il y a plusieurs instructions indentes sous la ligne d'en-tte, elles doivent l'tre exactement au mme niveau (comptez un dcalage de 4 caractres, par exemple). Ces instructions indentes constituent ce que nous appellerons dsormais un bloc d'instructions. Un bloc d'instructions est une suite d'instructions formant un ensemble logique, qui n'est excut que dans certaines conditions dfinies dans la ligne d'en-tte. Dans l'exemple du paragraphe prcdent, les deux lignes d'instructions indentes sous la ligne contenant l'instruction if constituent un mme bloc logique : ces deux lignes ne sont excutes - toutes les deux - que si la condition teste avec l'instruction if se rvle vraie, c'est--dire si le reste de la division de a par 2 est nul.

3.5. Instructions imbriques

Il est parfaitement possible d'imbriquer les unes dans les autres plusieurs instructions composes, de manire raliser des structures de dcision complexes. Exemple :

 
Sélectionnez

if embranchement == "vertbrs":                    # 1
    if classe == "mammifres":                      # 2
        if ordre == "carnivores":                   # 3
            if famille == "flins":                 # 4
                print "c'est peut-tre un chat"     # 5
        print "c'est en tous cas un mammifre"      # 6
    elif classe == 'oiseaux':                       # 7
        print "c'est peut-tre un canari"           # 8
print"la classification des animaux est complexe"   # 9

Analysez cet exemple. Ce fragment de programme n'imprime la phrase c'est peut-tre un chat que dans le cas o les quatre premires conditions testes sont vraies.

Pour que la phrase c'est en tous cas un mammifre soit affiche, il faut et il suffit que les deux premires conditions soient vraies. L'instruction d'affichage de cette phrase (ligne 4) se trouve en effet au mme niveau d'indentation que l'instruction : if ordre == "carnivores": (ligne 3). Les deux font donc partie d'un mme bloc, lequel est entirement excut si les conditions testes aux lignes 1 & 2 sont vraies.

Pour que la phrase c'est peut-tre un canari soit affiche, il faut que la variable embranchement contienne vertbrs , et que la variable classe contienne oiseaux .

Quant la phrase de la ligne 9, elle est affiche dans tous les cas, parce qu'elle fait partie du mme bloc d'instructions que la ligne 1.

3.6. Quelques rgles de syntaxe Python

Tout ce qui prcde nous amne faire le point sur quelques rgles de syntaxe :

3.6.1. Les limites des instructions et des blocs sont dfinies par la mise en page

Dans de nombreux langages de programmation, il faut terminer chaque ligne d'instructions par un caractre spcial (souvent le point-virgule). Sous Python, c'est le caractre de fin de ligne13 qui joue ce rle. (Nous verrons plus loin comment outrepasser cette rgle pour tendre une instruction complexe sur plusieurs lignes). On peut galement terminer une ligne d'instructions par un commentaire. Un commentaire Python commence toujours par le caractre spcial # . Tout ce qui est inclus entre ce caractre et le saut la ligne suivant est compltement ignor par le compilateur.

Dans la plupart des autres langages, un bloc d'instructions doit tre dlimit par des symboles spcifiques (parfois mme par des instructions, telles que begin et end). En C++ et en Java, par exemple, un bloc d'instructions doit tre dlimit par des accolades. Cela permet d'crire les blocs d'instructions les uns la suite des autres, sans se proccuper d'indentation ni de sauts la ligne, mais cela peut conduire l'criture de programmes confus, difficiles relire pour les pauvres humains que nous sommes. On conseille donc tous les programmeurs qui utilisent ces langages de se servir aussi des sauts la ligne et de l'indentation pour bien dlimiter visuellement les blocs.

Avec Python, vous devez utiliser les sauts la ligne et l'indentation, mais en contrepartie vous n'avez pas vous proccuper d'autres symboles dlimiteurs de blocs. En dfinitive, Python vous force donc crire du code lisible, et prendre de bonnes habitudes que vous conserverez lorsque vous utiliserez d'autres langages.

13 Ce caractre n'apparat ni l'cran, ni sur les listings imprims. Il est cependant bien prsent, un point tel qu'il fait mme problme dans certains cas, parce qu'il n'est pas encod de la mme manire par tous les systmes d'exploitation. Nous en reparlerons plus loin, l'occasion de notre tude des fichiers texte (page 115).

3.6.2. Instruction compose = En-tte , double point , bloc d'instructions indent

Nous aurons de nombreuses occasions d'approfondir le concept de bloc d'instructions et de faire des exercices ce sujet, ds le chapitre suivant.

Le schma ci-contre en rsume le principe.

  • Les blocs d'instructions sont toujours associs une ligne d'en-tte contenant une instruction bien spcifique (if, elif, else, while, def, ...) se terminant par un double point.
  • Les blocs sont dlimits par l'indentation : toutes les lignes d'un mme bloc doivent tre indentes exactement de la mme manire (c'est--dire dcales vers la droite d'un mme nombre d'espaces14). Le nombre d'espaces utiliser pour l'indentation est quelconque, mais la plupart des programmeurs utilisent des multiples de 4.
  • Notez que le code du bloc le plus externe (bloc 1) ne peut pas lui-mme tre cart de la marge de gauche (Il n'est imbriqu dans rien).
Image non disponible

14 Vous pouvez aussi indenter l'aide de tabulations, mais alors vous devrez faire trs attention ne pas utiliser tantt des espaces, tantt des tabulations pour indenter les lignes d'un mme bloc. En effet, et mme si le rsultat parat identique l'cran, espaces et tabulations sont des codes binaires distincts : Python considrera donc que ces lignes indentes diffremment font partie de blocs diffrents. Il peut en rsulter des erreurs difficiles dboguer. En consquence, la plupart des programmeurs prfrent se passer des tabulations. Si vous utilisez un diteur "intelligent", vous pouvez escamoter le problme en activant l'option "Remplacer les tabulations par des espaces".

3.6.3. Les espaces et les commentaires sont normalement ignors

A part ceux qui servent l'indentation, en dbut de ligne, les espaces placs l'intrieur des instructions et des expressions sont presque toujours ignors (sauf s'ils font partie d'une chane de caractres). Il en va de mme pour les commentaires : ceux-ci commencent toujours par un caractre dise (#) et s'tendent jusqu' la fin de la ligne courante.


prcdentsommairesuivant

Licence Creative Commons
Le contenu de cet article est rédigé par Gérard Swinnen et est mis à disposition selon les termes de la Licence Creative Commons Attribution 3.0 non transposé.
Les logos Developpez.com, en-tête, pied de page, css, et look & feel de l'article sont Copyright © 2013 Developpez.com.