Aller au contenu

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 :

🐍 Script Python
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 du if ;
  • 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 :
🐍 Script Python
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 :
🐍 Script Python
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 :

###
a = 2 + 3.001bksl-nlb = 5.001bksl-nlprint(a == b)bksl-nlbksl-nl

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 :

🐍 Script Python
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 :

🐍 Script Python
e = 4
f = 2
if f != e:
    f = f - e + 1
    s = e + f + 5
else:
    s = 2 + e + f

Exercices

  1. Exercice 4 : le code PIN de Marc.
  2. Exercice 5 : pair ou impair ?
  3. Exercice 6 : tarifs de photocopies.
  4. 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.

###
mapy-undnote = 13bksl-nlif mapy-undnote >= 16:bksl-nl print("Mention TB")bksl-nlif mapy-undnote >= 14:bksl-nl print("Mention B")bksl-nlif mapy-undnote >= 12:bksl-nl print("Mention AB")bksl-nlelse:bksl-nl print("Pas de mention")bksl-nl

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 :

🐍 Script Python
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

🐍 Script Python
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 :

🐍 Script Python
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 :

🐍 Script Python
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 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 :

🐍 Script Python
>>> conv(39)
'C'

###
benchmark = ['conv(39)"C"', 'conv(60)"A"', 'conv(50)"B"', 'conv(30)"D"', 'conv(20)=="E"']bksl-nl 5/5
def conv()bksl-nlbksl-nldef conv(note):bksl-nl p = (note / 72) py-str 100bksl-nl if p >= 80:bksl-nl app = "A"bksl-nl elif p >= 60:# ici p est forcément inférieur à 80bksl-nl app = "B"bksl-nl elif p >= 50:# ici p est forcément inférieur à 60bksl-nl app = "C"bksl-nl elif p >= 40:# ici p est forcément inférieur à 50bksl-nl app = "D"bksl-nl else:bksl-nl app = "E"bksl-nl return appbksl-nlbksl-nl

À retenir

  • les trois mots clĂ©s pour effectuer des tests sont : if, else et elif ;
  • les conditions sont des boolĂ©ens ;
  • n'oubliez pas les : et l'indentation pour dĂ©finir des blocs.
Sources

Quelques sources : https://www.dropbox.com/sh/nxa2kq5zkgb5o6v/AABeXXa1-N73jC7DZ-kDvokOa/feuille-python-boucles-tests.pdf?dl=0 https://www.numerique-sciences-informatiques.fr/coursConstructionsElementaires.php#Exercices https://isnbreizh.fr/nsi/activity/code2D2/pythonBase/pythonTests.html