Conditions#
Jusqu’ici, Python exécutait toutes les instructions dans l’ordre. Une condition lui permet maintenant de choisir un chemin selon la situation rencontrée.
Dès la seconde
Un premier choix#
L’expression x > 0 est évaluée comme vraie ou fausse. Lorsque le test est vrai, le bloc indenté est exécuté. S’il est faux, ce bloc est ignoré.
Avec un nombre négatif, puis avec 0, il faut prévoir avant chaque exécution si un message va apparaître.
Traiter les autres cas#
else signifie « dans tous les autres cas ».
Trois essais sont particulièrement instructifs : une valeur positive, une valeur négative et 0. Un seul des deux blocs est exécuté à chaque fois.
Avec elif, on peut distinguer plusieurs situations.
Python teste les cas dans l’ordre et s’arrête au premier qui convient.
Les comparaisons#
==égal à
!=différent de
<strictement inférieur à
>strictement supérieur à
<=inférieur ou égal à
>=supérieur ou égal à
Attention à ne pas confondre = et == : le premier affecte une valeur à une variable ; le second compare deux valeurs.
Une comparaison à corriger#
Ce programme cherche à afficher un message lorsque age vaut 16, mais il ne peut pas s’exécuter.
Comment chercher ?
SyntaxError signale que Python ne comprend pas l’écriture de la ligne 3. Il faut identifier si cette ligne cherche à donner une valeur à age ou à comparer sa valeur avec 16, puis choisir l’opérateur correspondant.
Pair ou impair#
L’opérateur % calcule le reste d’une division euclidienne. Par exemple, 7 % 2 vaut 1 et 8 % 2 vaut 0. Un entier est donc pair lorsque n % 2 == 0.
Le cas de 0 et celui d’un entier négatif méritent d’être testés.
Combiner plusieurs conditions#
and demande que les deux conditions soient vraies. or demande qu’au moins l’une des deux
soit vraie. Enfin, not inverse un booléen : not x >= 10 est vrai lorsque x >= 10 est
faux. L’écriture x < 10 est plus directe dans cet exemple, mais not devient utile pour
nier une condition plus complexe.
Que se passe-t-il précisément pour 0 et pour 10 ? Les bornes appartiennent-elles aux intervalles décrits par les messages ?
Une fonction définie par cas#
On considère :
Sans reprendre le code ligne par ligne, décris en une phrase la méthode utilisée par cette
fonction. Le calcul de f(0) permet ensuite de vérifier que la valeur frontière est traitée par
le bon cas.
Tester et valider une fonction#
Un test compare le résultat obtenu à un résultat attendu, calculé à l’avance. L’instruction
assert interrompt le programme et affiche AssertionError lorsque la condition qui la suit
est fausse. Si tous les tests réussissent, elle ne produit aucun affichage.
Les trois valeurs ont des rôles différents : un cas positif ordinaire, la valeur frontière 0 et un cas négatif qui emprunte l’autre branche. Pour construire des tests utiles :
commencer par un exemple dont le résultat a été obtenu à la main ;
essayer les valeurs frontières et les cas particuliers suggérés par l’énoncé ;
chercher un contre-exemple, c’est-à-dire une valeur qui pourrait mettre en défaut la méthode ;
si un test échoue, réduire l’exemple autant que possible avant de suivre les variables pas à pas.
Quelques tests réussis ne démontrent pas qu’un programme fonctionne dans tous les cas. En revanche, un seul contre-exemple suffit à montrer qu’il faut corriger l’algorithme ou sa traduction en Python.
Exercices#
Exercice 1
Écrire une fonction est_multiple_de_3(n) qui renvoie un booléen, puis l’utiliser pour tester
un entier et afficher un message adapté.
Exercice 2
Créer une fonction maximum(a, b) qui renvoie le plus grand des deux nombres. Elle doit aussi fonctionner quand les deux nombres sont égaux.
Exercice 3
Créer la fonction définie par :
Exercice 4
Écrire une fonction est_multiple(a, b) qui renvoie True lorsque l’entier naturel a
est un multiple de l’entier naturel non nul b, et False sinon.
Exercice 5
Écrire une fonction plus_grand_multiple(a, b) qui renvoie le plus grand multiple de
l’entier naturel non nul a inférieur ou égal à l’entier naturel b.
Dans le parcours