La solution apportée par Python au problème précédent est radicale :
Dans un même bloc, deux instructions de même profondeur logique doivent avoir strictement la même indentation.
Avec une telle convention, il est inutile de marquer le début et la fin d’un bloc par des éléments du langage (comme des accolades { et }, ou les mots réservés begin et end).
La contrepartie est un respect scrupuleux des indentations, mais on est aidé en cela par l’éditeur de Idle, qui augmente automatiquement l’indentation après chaque instruction d’en-tête, et qui conserve cette indentation à l’intérieur du bloc courant.
Pour sortir d’un bloc (donc diminuer l’indentation), un simple appui sur la touche d’effacement arrière suffit.
Venons-en à quelques définitions :
(voir http://docs.python.org/3.3/reference/compound_stmts.html)
- Une instruction composée est formée d’une ou de plusieurs clauses.
- Une clause est formée :
- d’un en-tête se terminant par le caractère : (deux-points),
- d’une suite, contrôlée par l’instruction d’en-tête.
- Cette suite peut se réduire à une seule instruction simple, ou consister en une instruction composée.
- Une suite simple peut être placée sur la même ligne que l’en-tête, après le caractère “:”.
- Une suite composée, appelée ici un bloc, doit débuter à la ligne qui suit l’en-tête et, par rapport à celui-ci, elle doit être indentée de façon uniforme.
Si la ligne d’en-tête d’une clause est au niveau d’indentation {n}, le bloc qui la suit est donc au niveau d’indentation {n+1} (la convention est d’utiliser quatre caractères pour séparer les deux niveaux).
On termine le bloc par un retour à l’indentation du niveau {n} (c’est-à-dire celle de la ligne d’en-tête).
Un bloc (au niveau {n+1} si sa ligne d’en-tête est au niveau {n}) peut lui-même inclure des instructions composées donc des successions de clauses (chacune d’elles pouvant donner lieu à la création de blocs qui sont alors au niveau {n+2}).
On représente ci-dessous une situation imaginaire (mais typique) d’une portion de script comportant une “clause 1” (instruction “en-tête1” suivie du “bloc1”) et une “clause 2” (instruction “en-tête2”, suivie du “bloc2”). Le “bloc1” contient lui-même une “clause3”, et le “bloc2” contient une “clause4” qui contient elle-même une “clause5”.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
instruction … instruction en-tête1 : # suivi du bloc 1 instruction en-tête3 : # suivi du bloc 3 instruction … instruction instruction instruction … instruction en-tête2 : # suivi du bloc 2 instruction … instruction en-tête4 : # suivi du bloc 4 instruction … instruction en-tête5 : # suivi du bloc 5 instruction … instruction instruction instruction … instruction instruction |
Rappel important : le bloc qui suit une ligne d’en-tête peut se réduire à une seule instruction. Dans ce cas, il est possible de le placer à la suite du caractère “deux-points” qui termine la ligne d’en-tête.
Remarque : éviter d’utiliser des tabulations (plutôt que des espaces) pour l’indentation des blocs !
Retour à l’accueil du cours Python/Numpy
Sommaire du chapitre 3
- Entrée au clavier (input) et affichage à l’écran (print)
- Nécessité de délimiter des blocs d’instructions
- L’importance fondamentale de l’indentation en Python
- Branchements conditionnels if…elif…else…
- Expressions conditionnelles
- Répétitions conditionnelles (while)
- Notion d’intervalle
- Répétitions inconditionnelles (boucles for)
- L’instruction pass