Voila le moment de prendre des décisions!
En effet, suivant la valeur que prend telle ou telle variable, il est souvent nécessaire de faire exécuter au programme une suite différente d'instructions ...
D'où la nécessité de disposer d'instructions de test pour "aiguiller" le programme...
En Python, comme dans de très nombreux langages, un test se fait avec l'instruction if
( ='si' ).
if (condition):
Instruction 1
Instruction 2
....
...qui peut se traduire par:
"SI la condition est VRAIE,
alors exécuter les instructions 1, 2,..."
if (condition):
Instruction 1
Instruction 2
....
else :
Instruction 3
Instruction 4
....
...qui peut se traduire par:
"SI la condition est VRAIE,
alors exécuter le bloc d'instructions 1, 2,...
SINON, dans les autres cas ( donc, si la condition est fausse ),
exécuter le bloc d'instructions 3, 4,..."
if (condition A) :
Instruction 1
Instruction 2
....
elif (condition B):
Instruction 3
Instruction 4
....
else :
Instruction 5
Instruction 6
....
...qui peut se traduire par:
"SI la condition A est VRAIE,
alors exécuter le bloc d'instructions 1, 2,...
SINON SI la condition B est VRAIE,
alors exécuter le bloc d'instructions 3, 4,...
SINON, dans tous les autres cas ( donc, si aucune des conditions précédentes n'est vraie ),
exécuter le bloc d'instructions 5, 6,..."
La (ou les) instruction(s) à exécuter selon la situation sont regroupées dans un même bloc logique.
Elles sont donc toutes indentées d'un retrait par rapport à l'instruction "parente" ( ici, les instructions if
, elif
ou else
) pour indiquer à Python qu'il s'agit du même bloc logique.
Plusieurs blocs elif
( = "else if
" ) peuvent être placés les uns à la suite des autres, voire même imbriqués les uns dans les autres.
On peut ainsi écrire de très complexes tests en "imbriquant" plusieurs évaluations de condition, qui s'excluent mutuellement: le programme les évalue les unes après les autres, et dès qu'il en trouve une de vraie, exécute son bloc d'instructions et passe toutes les suivantes...
La condition est une expression, plus ou moins complexe, à évaluer à l'aide d'opérateurs de comparaison :
Opérateur | Signification | Commentaire |
---|---|---|
== |
égal à | ATTENTION: il s'agit bien d'un DOUBLE SIGNE ÉGAL... C'est une erreur classique de ne mettre qu'un seul égal, qui est l'instruction d'affectation ( qui est donc, elle, toujours vraie!!! ) |
!= |
différent de | |
> |
supérieur à | |
< |
inférieur à | |
>= |
supérieur ou égal à | |
<= |
inférieur ou égal à | |
in |
présent dans | C'est l'opérateur qui permet de tester l'appartenance d'un élément à un autre, par exemple un caractère particulier dans une chaîne, un élément dans un fichier ou une liste,...de manière générale, un élément dans une structure itérable. |
not in |
pas présent dans | C'est l'opérateur inverse, celui qui permet de tester l'absence d'un élément dans une structure itérable. |
Exemples:
if ( moyenne == 10 ):
if ( nombreEleve > 35 ):
if ( numero != 12 ):
if ( 'a' in mot ) :
Plusieurs conditions peuvent être évaluées en même temps, en utilisant les opérateurs and
( ET ) et or
( OU ).
Exemples:
if ( valeur1> 2 ) or ( valeur2 != 10 ):
"si valeur1 est supérieure à 2 OU valeur2 est différente de 10,....."
if ( monAge >=18) and ( monAge <=65 ):
"si monAge est supérieure ou égale à 18 ET inférieure ou égale à 65"
if stock <= 10:
reponse = "Stock faible!"
if ( moyenne >= 10 ) and ( exclus != 0 ):
reponse = "Elève admis."
if (score <= 100 ) :
reponse = "Petit joueur !"
elif ( score > 100 ) and (score < 200 ) :
reponse = "Pas mal..."
else :
reponse = "Champion !"
if nombre1 > nombre2:
difference = nombre1 – nombre2
test = 1
elif nombre1 < nombre2:
difference = nombre2 – nombre1
test = 0
elif nombre2 == nombre1:
difference = 0
Non : il n'y a que deux possibilités pour la condition ( nombre1 > nombre2 ou nombre1 < nombre2 ), tous les autres cas correspondant à nombre1 = nombre2.
La troisième évaluation n'est donc pas nécessaire, et peut être remplacée par un simple else :
if nombre1 > nombre2:
difference = nombre1 – nombre2
test = 1
elif nombre1 < nombre2:
difference = nombre2 – nombre1
test = 0
else:
difference = 0
if nombre != 0:
if nombre < 256:
print("Valeur trop petite!")
elif nombre > 256 :
print("Valeur trop grande!")
else:
print('Parfait!')
else:
print('Tricheur!')
Bien observer l'indentation : il y a deux blocs logiques d'instructions, dont l'un est imbriqué dans l'autre.
Cet ensemble fonctionne ainsi :
Que s'affiche-t-il à la fin de l'exécution de chacun des scripts suivants ?
Écrire un programme qui demande de saisir 2 valeurs et qui affiche la plus grande des 2 valeurs.
Écrire un script qui demande de saisir 2 chaînes de caractères et qui affiche la plus grande des 2 chaînes (celle qui a le plus de caractères).
Écrire un script qui demande à l'utilisateur d'entrer sa taille et son poids, qui calcule son IMC et qui lui indique si il est trop maigre, de corpulence normale, en surpoids ou obèse.
L'indice de masse corporelle (IMC) est une mesure basée sur deux variantes : la taille et le poids corporel.
La formule standard s’applique aux hommes et aux femmes d’âge adulte. La formule est simple : IMC = poids (kg) divisé par la taille (m) au carré.
Voici les différentes catégories d’IMC endossés par les organismes officiels de santé:
Écrire un script qui demande à l'utilisateur d'entrer un caractère, et qui compte le nombre de fois où ce caractère apparaît dans le texte ci-dessous :
long_texte = "Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos"
Attention, un peu de mise en forme ( "nettoyage" des indentations et des retours à la ligne ) sera nécessaire après le copier-coller dans Pyzo.
Écrire un programme qui demande à l'utilisateur d'entrer une année, et qui détermine si celle-ci est ( ou était ) bissextile.
Essayer de chercher la manière la plus optimisée pour écrire la condition à évaluer...
Les années bissextiles sont:
Pour tester le programme: 1900 n'était pas une année bissextile, 2000 l'était et 2016 le sera.
Il existe un algorithme qui permet de déterminer le jour de la semaine correspondant à une date donnée sous la forme: jour, mois , année entre le 1er janvier 1800 et le 31 décembre 2099.
Bien qu'apparemment complexe, il s'agit d'une simple suite d'évaluation de conditions sur les chiffres de cette date:
siecle ← les deux premiers chiffres de l'année
an ← les deux derniers chiffres de l'année
mois ← le mois
jour ← le jour
valeur = an + quotient de la division entière de an par 4
si siecle vaut 18, rajouter 2 à valeur
sinon si siecle vaut 20, rajouter 6 à valeur.
si le mois est janvier et que l'année n'est pas bissextile, ajouter 1 à valeur
si le mois est février,
si l'année est bissextile, ajouter 3 à valeur,
sinon si l'année n'est pas bissextile, ajouter 4 à valeur
si le mois est mars ou novembre, ajouter 4 à valeur
sinon si le mois est mai, ajouter 2 à valeur
sinon si le mois est juin, ajouter 5 à valeur
sinon si le mois est août, ajouter 3 à valeur
sinon si le mois est octobre, ajouter 1 à valeur
sinon si le mois est septembre ou décembre, ajouter 6 à valeur
( Noter qu'on n'ajoute rien à valeur pour avril et juillet...)
valeur = reste de la division entière de ( valeur + jour )par 7
si valeur est égale à 1, le jour de cette date est dimanche
sinon si valeur est égale à 2, le jour de cette date est lundi
sinon si valeur est égale à 3, le jour de cette date est mardi
sinon si valeur est égale à 4, le jour de cette date est mercredi
sinon si valeur est égale à 5, le jour de cette date est jeudi
sinon si valeur est égale à 6, le jour de cette date est vendredi
sinon si valeur est égale à 0, le jour de cette date est samedi
Écrire le programme qui demande à l'utilisateur d'entrer une date sous la forme requise par le programme, puis qui applique l'algorithme pour trouver le jour de la semaine correspondant à cette date.
Quelques conseils :