[Plan du site]
Vous êtes ici ---
> Le Site du Zéro
> Les tutoriels
> Non-Officiels
> Programmation
> Python
> Apprenons Python ! > Le début, la base de tout... > Les conditions
> Lecture du tutoriel
Les conditions
Vous vous apprêtez à lire un tutoriel rédigé par un membre de ce site. Malgré tout le soin que ce membre a pu apporter au tutoriel, nous ne pouvons pas garantir que les informations contenues sur cette page sont exactes à 100%. Merci de garder cela en tête lorsque vous lirez cette page ;o)
Votre grand-mère vous a acheté un super-jeu-de-la-mort-qui-tue pour la console SationDeJeux24. Mais comble de malchance, le petit programme que vous avez créé en Python pour jouer à des jeux SationDeJeux24 sur votre Xboite 2728 n'arrive pas à lancer votre nouveau jeu. Pourquoi ? Parce qu'une variable n'est pas comme elle devrait être... Votre programme n'a pas su s'adapter en faisant des choix différents ! Game over.
Comment un programme informatique peut-il gérer des situations différentes, si vous (le fier programmeur) n'êtes pas tout le temps derrière lui ? Vous allez l'apprendre dans ce chapitre
(ça tombe super bien non ?)
Jusque là vous n'avez utilisé que la ligne de commande (command line) de Python, ou encore l'IDLE de python (interface plus développée que la ligne de commande, mais que l'on ne vous demande pas de connaître). N'en avez vous pas déjà assez de devoir sans cesse taper le code, et tout retaper quand cela ne marche pas ?
Il y a une solution miracle ! Il vous faut tout d'abord vous munir de votre bloc-notes, ou de tout autre éditeur. Un bon éditeur de texte gratuit comme notepad++ (déjà préconisé dans les cours xhtml et php du site du zéro) fait bien l'affaire puisqu'il possède une coloration synthaxique pour Python. Cela aide beaucoup pour relever les fautes. Si vous avez Windows, vous pouvez le télécharger sur
le site officiel.
Créez un nouveau document, entrez votre script python puis enregistrez-le au format
.py
Sachez qu'il est préférable d'entrer cette ligne de code au tout début du script :
Code : Python
pour que les utilisateurs de Linux puissent l'éxécuter directement (nous expliquons ça en annexe).
Dès que votre document est enregistré vous pouvez le lancer en l'ouvrant avec Python (Sous Windows, en double-cliquant dessus si votre installation est correcte, toutefois nous parlons également de ça en annexe). Il existe d'autres formats d'enregistrement de vos programmes en Python, vous aurez l'occasion de les découvrir plus tard. Voici un exemple de programme :
Code : Python1
2 | #!/usr/bin/python
print "Je sais compter : 3*14 font", 3*14
|
Heu... J'ai un souci ! Dès que je lance mon programme il y a une fenêtre noire qui s'ouvre et se ferme instantanément ! Pourquoi ?
Python exécute le programme instruction après instruction (c'est à dire ligne par ligne). Or, arrivé à la fin, il n'a plus rien à faire - le programme est terminé. Comme sous XP les fenêtres en ligne de commande se ferment à la fin d'un programme, nous ne pouvons pas voir le résultat
Vous verrez plus tard, on n'aura plus ce genre de soucis en mettant en place une interface graphique. Pour l'instant, si vous voulez remédier à ce problème, inscrivez le code suivant à la fin de votre script :
Code : Python1 | raw_input('Appuyez sur entree pour quitter le programme...')
|
Que fait ce code ? En temps normal, il sert à lire ce que l'utilisateur entre au clavier - nous l'utiliserons donc abondamment dans peu de temps. Pour l'instant, comme il attend une entrée de la part de l'utilisateur, Python se met à attendre - donc le programme est bloqué, et vous n'avez plus qu'à lire ce qui a été affiché, puis à appuyer sur entrée. Cette façon de faire présente toutefois des défauts, dont nous parlons encore une fois en annexe
Maintenant que vous savez enregistrer votre code, en cas d'erreur, il suffit de modifier la partie incriminée, de sauvegarder, et de relancer le programme ! Ce n'est pas plus simple qu'avant ?
Comme maintenant nous n'allons écrire que des "blocs de texte", il nous faudra non seulement être capables de retenir la syntaxe du Python par coeur, mais aussi et surtout savoir décrire notre programme à l'avance : il est hors de question que vous écriviez un programme peu à peu, sans savoir vraiment où vous allez, en testant au fur et à mesure. Comment feriez-vous dans le cadre d'un projet de 5000 lignes à 10, soit 500 lignes en moyenne chacun (pour le moment nous découvrons encore, mais vous serez prêt à faire de vrais projets plus tôt que vous ne le pensez) ? Illustration du pathétique d'une telle situation :
Citation : Des mauvais programmeurs"Hé, fais voir ton code que je teste le mien !"
"Ah non pas encore eu le temps de le faire, désolé !"
"Ah ben je peux pas avancer alors !"
Ceci n'est pas de la programmation : c'est du bricolage, et c'est important de faire la différence. Vous devez à l'avenir être capable de dire "Mon programme va faire cela", puis de penser "pour faire cela, alors il devra être capable de... et de...".
La liste des capacités d'un programme s'appelle un "cahier des charges". C'est utile. En réalité, tout votre programme doit pouvoir s'exprimer sous forme de langage humain - sinon, c'est que vous même ne comprenez pas ce qu'il fait
Une fois le programme fini, il ne reste plus qu'à l'exécuter. Et comme je l'ai dit, il faut pouvoir tout prévoir à l'avance : comment le programme va réagir dans tel cas, ce qu'il va faire dans tel autre... en gros, vous devez déterminer l'
ACTION de la machine en fonction des
CONDITIONS qui l'entourent. Vous ne serez pas là pour encadrer votre programme, il devra agir comme un grand

Vous même, d'ailleurs, avant de sortir de chez vous :
SI (il y'a de la pluie) ALORS [vous prenez un parapluie puis vous sortez] SINON [vous sortez sans parapluie]
Observez la condition, entre parenthèse, et les deux actions, entre crochets. Elles ne sont pas placées n'importe où, elles suivent une certaine syntaxe propre au Français. La programmation, c'est tout pareil. On a des conditions, qui, si elles sont vraies, donnent lieu à certaines actions, sinon, à d'autres. On appelle le SI un "test condtionnel" (on "teste" quelque chose, une condition), et l'action exécutée (ou généralement le groupe d'actions) une "instruction conditionnelle" (une instruction donnée à la machine qui n'est exécutée QUE dans une certaine condition)
Revenons à un exemple concret : ce programme affiche le nombre de pommes que vous avez dans votre panier :
Code : Python1
2
3 | #!/usr/bin/python
nombre_de_pommes = 1
print "J\'ai " , nombre_de_pommes , " pomme dans mon panier"
|
Code : Console | J'ai 1 pomme dans mon panier |
Il affiche correctement le résultat, dans cet exemple tout marche bien. Maintenant si vous modifiez la variable nombre_de_pommes, en remplaçant la première ligne par
Code : Python
vous obtiendrez
Code : Console | J'ai 3 pomme dans mon panier |
Et oui, il y a un souci au niveau du pluriel ! Ce n'est pas seulement pour vous montrer l'importance de l'orthographe qu'on vous présente cet exemple, c'est pour vous faire comprendre que ce script est incapable de faire face aux différentes valeurs que peuvent prendre les variables. Or les variables sont faites pour varier justement ! Si l'utilisateur veut acheter trois pommes mais qu'il n'y en a que deux en réserve cela peut aussi causer des soucis : il faut prévoir cette éventualité en utilisant des conditions.
Maintenant analysons la structure d'une condition en programmation :
En Français on pourrait traduire ce schéma par : si la condition est remplie (CONDITION sur le schéma), alors j'exécute les instructions qui suivent (BLOC D'INSTRUCTION). Si cette condition n'est pas remplie, alors je passe à la suite de mon programme.
La situation pourrait être par exemple, "cette variable est égale à cette autre variable" : si c'est le cas Python va lire les instructions qui suivent, sinon il passe à la suite en faisant comme si n'avait pas vu le bloc d'instructions.
Pour le problème des pommes, ce qu'il faudrait faire est facile à dire : si nombre_de_pommes est supérieur ou égal à 2, on écrit "pommes", et si nombre_de_pommes est inférieur à 2, on écrit "pomme"
Maintenant observez ce que cela devient en Python :
Code : Python1
2
3
4 | if nombre_de_pommes >= 2:
print "pommes"
if nombre_de_pommes < 2:
print "pomme"
|
Ce n'est pas bien difficile à saisir non ?
Explication pas à pas :
- Le
if signifie "si" en anglais.
- nombre_de_pommes est le nom de votre variable, laquelle contient une donnée de type int (nombre)
-
>= 2 et
< 2 signifient "supérieur à 2" et "inférieur à 2", ce qui est assez compréhensible non ?
- Quand on utilise une instruction de contrôle en Python, (ici le test conditionnel, par exemple, mais nous en verrons d'autres), il faut
obligatoirement terminer la ligne par deux points. Sinon, Python se fâche !

- Le bloc d'instruction à exécuter si la condition est remplie est indenté. C'est-à-dire qu'il est précédé de plusieurs espaces (ou de tabulations).
Quel est l'intérêt de l'identation ? Dans tous les langages, elle sert à rendre le code plus lisible, plus aéré. Une grande particularité de Python est qu'elle est indispensable. Voici d'abord ce qui se serait passé sans indentation :
Code : Python1
2
3
4 | if nombre_de_pommes > 2:
print "pommes"
if nombre_de_pommes < 2:
print "pomme"
|
Python nous signale une erreur :
Code : Console | IndentationError: expected an indented block |
Traduction : Python s'attendait à trouver un bloc de code indenté. Pourquoi ? Parce que, pour se référer au schéma du dessus, les blocs en Python sont délimités par l'indentation. Après une ligne terminée par des deux points, il doit y avoir un bloc indenté.
C'est obligatoire !. Ce sont les espaces au début des lignes qui permettent à Python de comprendre le programme - après tout, il n'est qu'un automate, et obéït à des règles de compréhension très simples. L'ensemble des règles à respecter pour nous structurer le code afin que Python le comprenne s'appelle la
syntaxe.
Devinez alors comment l'on fait pour terminer le bloc d'instructions ? Et bien on ne met plus l'identation aux instructions qui n'en font pas partie, tout simplement !
Voici le code que l'on peut obtenir au final, pour afficher le nombre de pommes avec la bonne orthographe :
Code : Python1
2
3
4
5
6
7
8 | #!/usr/bin/python
nombre_de_pommes = 3
if nombre_de_pommes >= 2:
chose = " pommes dans mon panier"
if nombre_de_pommes < 2:
chose = " pomme dans mon panier"
print "J\'ai " , nombre_de_pommes , chose
raw_input('Appuyez sur entree pour quitter le programme...')
|
Code : Console | J'ai 3 pommes dans mon panier
Appuyez sur entree pour quitter le programme... |
Code : Console | J'ai 1 pomme dans mon panier
Appuyez sur entree pour quitter le programme... |
L'avantage de cette organisation avec des identations, c'est que le code y est clair et rapide à taper. D'autres langages utilisent les parenthèses et les accolades pour délimiter leurs conditions et leurs blocs d'instructions, ce qui rend le code lourd et moins lisible. Et vous conviendrez que dans le cas d'un programme de 3000 lignes de code, la lisibilité se fait indipensable !
Les différents opérateurs :
Pour faire nos tests conditionnels, nous aurons besoin d'opérateurs de comparaison. Avant de passer à la suite, voici une petite liste de ce qu'on peut utiliser :
x
== y : Teste si x est égal à y
x
!= y : Teste si x est différent de y
x
> y : Teste si x est plus grand que y
x
< y : Teste si x est plus petit que y
x
>= y : Teste si x est plus grand ou égal à y
x
<= y : Teste si x est plus petit ou égal à y
Notez que l'opérateur de comparaison '==' comprend deux signes '=', et quand on débute on en omet souvent un : et dans ce cas.... devinez ce qui se passe.... Python se fâche encore !
Les conditions peuvent aussi être imbriquées (c'est à dire "placées les unes dans les autres"), voici ce que l'on peut faire par exemple :
Code : Python1
2
3
4
5
6
7 | if condition1:
if condition2:
instructions
if condition3:
if condition4:
instructions
...
|
Toutefois il ne faut pas abuser des imbrications de conditions, on s'y perd rapidement, il peut y avoir bien plus pratique. C'est ce que l'on va voir de suite :
Code : Python1
2
3
4
5
6 | if condition:
instructions
elif condition:
instructions
else:
instructions
|
elif signifie "sinon si", c'est une autre condition qui ne s'active que si la précédente n'est pas vérifiée.
else signifie "sinon", elle annonce les instructions qui seront éxécutées si aucune condition n'est vérifiée.
Un exemple concret : imaginons que l'utilisateur attribue le nom d'un instrument de musique à la variable "instrument" et votre programme doit afficher à quelle famille d'intruments il appartient. En n'utilisant que des if on pouvait obtenir ceci :
Code : Python1
2
3
4
5
6
7
8
9 | if instrument == "saxophone":
famille = "famille des bois"
if instrument == "piano":
famille = "famille des percussions"
if instrument == "batterie":
famille = "famille des percussions"
if instrument == "xylophone":
famille = "famille des percussions"
print instrument , "fait partie de la" , famille
|
Ce code a un gros inconvénient, tout comme celui qui suit :
Code : Python1
2
3
4
5 | if instrument == "saxophone":
famille = "famille des bois"
else:
famille = "famille des percussions"
print instrument , "fait partie de la" , famille
|
Si la variable instrument est égale à "flûte", dans le premier cas il y aura une erreur car la variable "famille" n'aura pas été crée, dans le second cas le code affichera "flûte fait partie de la famille des percussions". Or ce n'est pas le cas, il faut donc éviter d'utiliser le else pour un cas particulier.
On peut écrire ceci pour que notre code d'exemple fonctionne :
Code : Python 1
2
3
4
5
6
7
8
9
10
11 | if instrument == "saxophone":
famille = "famille des bois"
elif instrument == "piano":
famille = "famille des percussions"
elif instrument == "batterie":
famille = "famille des percussions"
elif instrument == "xylophone":
famille = "famille des percussions"
else:
famille = "- famille inconnue -"
print instrument , "fait partie de la" , famille
|
Ici si l'utilisateur veut afficher la famille de la flûte, on lui affiche que le programme ne peut pas la lui donner. En revanche il y a beaucoup de elif dans ce code, c'est bête le piano, le xylophone et la batterie sont tous trois des percussions... On aimerait bien faire une condition qui fasse "sinon si l'instrument est un piano, ou une batterie, ou un xylophone, la famille est celle des percussions. En programmation on peut utiliser
or (ou) et
and (et) dans les conditions (que ce soit sur les if ou les elif), ce qui permet souvent d'optimiser le code. Voici notre exemple corrigé :
Code : Python1
2
3
4
5
6
7 | if instrument == "saxophone":
famille = "famille des bois"
elif instrument == "piano" or instrument == "batterie" or instrument == "xylophone":
famille = "famille des percussions"
else:
famille = "- famille inconnue -"
print instrument , "fait partie de la" , famille
|
Le
and est lui utilisé lorsque l'on vérifie plusieurs paramètres : "si j'apprend le python et que j'aime ça, je continue de l'apprendre"
Bien sûr, il faut savoir tout utiliser au bon moment. Le fait qu'on dispose de mots clefs comme elif et else ne remplace pas l'imbrication de plusieurs ifs si elle est utile :
Code : Python 1
2
3
4
5
6
7
8
9
10
11
12 | if loisir == "musique":
if outil == "guitare":
print "Ah, vous jouez de la guitare ! "
elif outil == "piano":
print "Oh, vous jouez du piano ! "
else:
print "La musique est un loisir sain :)"
elif loisir == "programmation" or loisir == "informatique":
print "Je me doute bien que vous vous intéressez à l'informatique !"
print "Sinon, que feriez-vous là ?"
else:
print "Vous n'avez pas de loisir ? Comme c'est triste :("
|
Une condition sert à tester si une expression est vraie ou fausse : c'est un test logique.
Il y a plusieurs opérateurs de test :
| Opérateur | Teste si |
|---|
== |
Egal |
!= |
Différent |
> |
Plus grand |
< |
Plus petit |
>= |
Plus grand ou égal |
<= |
Plus petit ou égal |
On met deux points à la fin de l'instruction de test, et on indente le bloc d'instructions.
Structure d'une condition :
Code : Python1
2 | if maCondition :
bloc_instructions _indente
|
If : Si
Elif : Sinon si : si la condition précédente n'est pas remplie, alors on teste ce qui suit
Else : Sinon : Si aucune des conditions n'est remplie, on exécute son bloc d'instructions
and et
or servent à vérifier plusieurs conditions à la fois.
Nb : Notez bien que si une instruction est vérifiée, alors Python passe à la suite !
- On a une variable a égale à ce que vous voulez. Votre programme testera :
- Si a est inférieur à 1000 : on affichera : Code : Console
- Si a est supérieur à 1000 : on affichera :Code : Console
- Si a est égal à 2786 : on affichera : Code : Console
- Sinon, on affichera que : Code : Console
Prenez plusieurs valeurs, pour tester votre programme. A chaque fois, il commencera par
Code : Python
Vous avez bien réfléchi à cet exercice ? Parce que c'est l'heure de le corriger

.
a est-il supérieur, inférieur à 1000 ?
Secret (cliquez pour afficher)On doit donc tester si a est supérieur à 1000, inférieur à 1000, égal à 2786. Si a ne rentre pas dans ces condtitions, on affiche que a n'est pas un chiffre.
Code : Python1
2
3
4
5
6
7
8
9 | a = 256
if a < 1000:
print "a est inferieur a 1000 !"
elif a >= 1000:
print "a est superieur ou egal a 1000 !"
else:
print "a n\'est pas un chiffre !"
if a == 2786:
print "a est egal a 2786 !"
|
Pourquoi n'ai-je pas mis un
elif pour a == 2786 ?
Parce que a peut être supérieur à 1000 ET égal à 2786. Il faut donc utiliser un if en plus (si une condition est vérifiée, alors Python passe à la suite).