Les testsâïž
Principeâïž
Un programme doit pouvoir s'adapter à des différentes situations grùce à des tests.
Par exemple : si la température extérieure est inférieure à 16 degrés alors il faut démarrer le chauffage.
En informatique, un test s'appelle aussi une structure conditionnelle.
Test Si ... alors ...âïž
Voici un exemple de script utilisant un test :
a = 3
b = 5
if a < b:
print("a est le plus petit")
Le test commence par un if
, suivi dâune condition, puis dâun :
 puis, à la ligne suivante, commence(nt) une ou des instructions.
Ici : si (if en anglais) la condition (ici a < b) est vraie, alors exĂ©cuter le bloc dâinstructions qui suit (ici une seule instruction, Ă savoir afficher le texte "a est le plus petit").
Ă retenir
La syntaxe générale est :
début du programme
if
condition:
bloc dâinstructions Ă exĂ©cuter si le test est rĂ©ussi
suite du programme
graph LR
A[début]-->C{si condition}
C-->|vraie| D[bloc instructions dans test]
C-->|fausse| E[suite]
D-->E
Remarquez :
- leÂ
:
indispensable Ă la fin de la ligne duif
 ; - que le bloc dâinstructions Ă exĂ©cuter est dĂ©fini par l'indentation ;
- que le bloc dâinstructions soit exĂ©cutĂ© ou pas, le dĂ©roulement du programme continue aprĂšs le test (suite du programme) ;
- le mot alors nâexiste pas en Python (dans certains langages, il se traduit par then) ;
- la condition est en fait un booléen.
Exercice 1
- Exécutez ce script :
a = 3
b = 5
if a < b:
print("a est le plus petit")
print("autrement dit b est le plus grand")
- Modifiez le script ainsi :
a = 5
b = 1
if a < b:
print("a est le plus petit")
print("autrement dit b est le plus grand")
et observez la différence.
Les conditionsâïž
Conditions dâĂ©galitĂ©âïž
a == b
est vrai quand la valeur de a
est Ă©gale Ă celle de b
;
a != b
est vrai quand la valeur de a
est différente de celle de b
.
Attention
Il faut bien faire attention Ă distinguer l'affectation a = b
et le test d'égalité a == b
.
ĂgalitĂ© des flottants
Le test d'égalité == est bien adapté pour un test entre deux entiers ou entre deux chaßnes de caractÚres.
Mais, du fait de la représentation des nombres en machine, il est mal adapté à la comparaison de deux flottants.
Exécutez le code ci-dessous pour vous en convaincre :
Conditions de comparaisonâïž
Les comparaisons se font à l'aide d'un des quatre opérateurs : >
ou <
ou >=
ou <=
(par exemple : if moyenne > 10:
).
Exercice 2
Comparez des chaĂźnes de caractĂšres Ă l'aide de < par exemple.
Comment sont classées les chaßnes de caractÚres ?
Conditions dâappartenanceâïž
Il est possible de tester si une valeur est dans un ensemble ou si une lettre est dans une chaßne de caractÚres avec l'opérateur in
(dans) :
print(5 in {3, 5, 7, 9})bksl-nlprint(4 in {3, 5, 7, 9})bksl-nlprint("a" in "abc")bksl-nlprint("'d' est dans 'abc' :", "d" in "abc")bksl-nlbksl-nlbksl-nlbksl-nl
A
Z
Il existe aussi l'opérateur not in
(pas dans).
On peut mĂȘme tester si un mot est dans un autre : print("SI" in "NSI")
.
Test Si ... alors ... sinon...âïž
En voici un exemple :
lettre = "u"
if lettre in "aeiouy":
print("Câest une voyelle")
else:
print("Ce nâest pas une voyelle")
- si la condition est vraie (si
lettre
fait partie de "aeiouy") alors le premier bloc dâinstruction est exĂ©cutĂ©e ; - sinon (ELSE en anglais), câest-Ă -dire si la condition est fausse (si
lettre
ne fait pas partie de "aeiouy") alors câest lâautre bloc dâinstructions qui est exĂ©cutĂ© et le premier bloc est ignorĂ©.
Le couple if
et else
agit comme un aiguillage.
Ă retenir
La syntaxe générale est :
début du programme
if
condition:
bloc dâinstructions 1 Ă exĂ©cuter si la condition est vĂ©rifiĂ©e
else:
bloc dâinstructions 2 Ă exĂ©cuter si la condition n'est pas vĂ©rifiĂ©e
suite du programme
graph LR
A[début]-->C{si condition}
C-->|vraie| D[bloc instructions 1]
C-->|fausse| E[bloc instructions 2]
D-->F[suite]
E-->F
Exercice 3
Sans utiliser l'Ă©diteur, indiquez la valeur de la variable s
à la fin de ce script :
e = 4
f = 2
if f != e:
f = f - e + 1
s = e + f + 5
else:
s = 2 + e + f
Exercices
- Exercice 4 : le code PIN de Marc.
- Exercice 5 : pair ou impair ?
- Exercice 6 : tarifs de photocopies.
- Exercice 7 : le maximum.
Test Si ... alors ... sinonsi ...âïž
Parfois, pour déterminer dans quel cas on se trouve, il faut effectuer plusieurs tests.
Exercice 8
Prenez le temps de lire le script ci-dessous qui doit nous dire quel sera notre mention au bac.
Exécutez-le plusieurs fois en changeant la valeur de ma_note
dans la premiĂšre ligne et observez.
Explications
Ce script ne fonctionne pas comme prĂ©vu. Normalement, il ne devrait y avoir qu'un message d'affichĂ©. C'est parce que les tests sont tous indĂ©pendants. MĂȘme si le premier test est rĂ©ussi, les autres tests sont Ă©galement effectuĂ©s et potentiellement validĂ©s (si ma note est supĂ©rieure Ă 16 alors elle est aussi supĂ©rieure Ă 14 et Ă 12), alors qu'ils ne devraient l'ĂȘtre que si les prĂ©cĂ©dents ont Ă©chouĂ©s. Il faut donc imbriquer les tests.
Exercice 9
Modifiez maintenant le programme ainsi (pas de copier-coller svp) puis testez son bon fonctionnement :
ma_note = 13
if ma_note >= 16:
print("Mention TB")
else:
if ma_note >= 14:
print("Mention B")
else:
if ma_note >= 12:
print("Mention AB")
else:
print("Pas de mention")
Mais... s'il y a 20 cas possibles ??
Si la note est supĂ©rieure ou Ă©gale Ă 16 alors le programme affiche "Mention TB", sinon il envisage le cas oĂč la note est infĂ©rieure Ă 16, ce qui se sĂ©pare en plusieurs casâŠ
Ce script fonctionne bien mais "Ă cause" du systĂšme d'indentation, sa lecture n'est pas si simple.
C'est pourquoi il existe une syntaxe permettant de simplifier la rédaction des études de cas, en utilisant le mot clé elif
(contraction de else if).
Ă retenir
Ce script
if condition1:
bloc dâinstructions 1
else:
if condition2:
bloc dâinstructions 2
else:
bloc dâinstructions 3
# suite du programme
peut aussi sâĂ©crire ainsi :
if condition1:
bloc dâinstructions 1
elif condition2:
bloc dâinstructions 2
else:
bloc dâinstructions 3
# suite du programme
graph LR
A[début]-->B{si condition1}
B-->|vraie| C[bloc instructions 1]
B-->|fausse| D{si condition2}
D-->|vraie| E[bloc instructions 2]
D-->|fausse| F[bloc instructions 3]
C-->G[suite]
E-->G
F-->G
Exercice 10
Modifiez le programme ainsi puis testez son bon fonctionnement :
ma_note = 13
if ma_note >= 16:
print("Mention TB")
elif ma_note >= 14:
print("Mention B")
elif ma_note >= 12:
print("Mention AB")
else:
print("Pas de mention")
Exercice 11
Exercice 12
Ăcrivez un programme dans lequel la machine demande Ă un utilisateur son Ăąge et dit si lâutilisateur est un enfant (moins de 12 ans) ou un adolescent (entre 12 et 18 ans) ou un adulte (Ă partir de 18 ans).
Exercice 13
Le professeur Zarb met des notes sur 72 points, qu'il convertit ensuite en pourcentage de réussite puis il les transforme en appréciations suivant ce tableau :
Note N | Appréciation |
---|---|
N ≥ 80 % | A |
80 % > N ≥ 60 % | B |
60 % > N ≥ 50 % | C |
50 % > N ≥ 40 % | D |
N < 40 % | E |
Ăcrivez une fonction conv
qui s'occupe de la conversion en apprĂ©ciation d'une note N entrĂ©e par lâutilisateur sous forme de points. Voici un exemple d'utilisation de cette fonction :
>>> conv(39)
'C'
Ă retenir
- les trois mots clés pour effectuer des tests sont :
if
,else
etelif
; - les conditions sont des booléens ;
- n'oubliez pas les
:
et l'indentation pour définir des blocs.