SNT / Programmation Python / Séance 3

Les instructions conditionnelles

Introduction

Une instruction conditionnelle, ou instruction de test, permet de faire des choix en fonction de la valeur d’une condition. On parle souvent d’une instruction si-alors, ou if-else en anglais.

Une condition est une instruction qui est soit vraie, soit fausse. On dit qu’il s’agit d’un booléen.

Par exemple, si une variable a vaut 5 et qu’une variable b vaut 10 alors la condition a < b est une condition qui est vraie, tandis que les conditions a > b et a == b sont fausses.

On peut vérifier rapidement cela dans une console Python. Attention, le test d'égalité entre deux variables se fait avec un double égal == (car le simple = permet d'affecter une valeur à une variable).

On peut utiliser de telles conditions pour écrire des instructions conditionnelles. Voici un exemple simple.

Exemple

illustration

On souhaite connaître le vainqueur d’un match de football connaissant le score des deux équipes A et B . À la fin de l’algorithme suivant , la variable vainqueur contient la réponse à la question :

si scoreA > scoreB alors
    vainqueur ← "équipe A"     (la flèche ← signifie "prend la valeur")
sinon si scoreA < scoreB alors
    vainqueur ← "équipe B"
sinon
    vainqueur ← "Match nul"

Dans cet exemple, il y a deux conditions scoreA > scoreB et scoreA < scoreB et chacune est soit vraie, soit fausse. On voit bien qu’un choix est effectué (pour la variable vainqueur) selon la valeur de ces conditions.

La syntaxe en Python

Pour écrire des instructions conditionnelles en Python, il faut utiliser la syntaxe suivante :

if condition1:
	bloc_instructions_1
elif condition2:
	bloc_instructions_2
else:
	bloc_instructions_3

Les mots-clés if, elif (contraction de else if) et else sont les traductions respectives de “si”, “sinon si” et “sinon”.

Remarques importantes

Exemple : Ainsi, on peut écrire une fonction Python qui traduit l'algorithme précédent sur le vainqueur d'un match entre deux équipes. Cette fonction, que l'on choisit d'appeler gagnant :

Voici le code de cette fonction :

def gagnant(scoreA, scoreB):
    if scoreA > scoreB:         # si scoreA > scoreB
    	vainqueur = "équipe A"
    elif scoreA < scoreB:      # sinon si scoreA < scoreB
    	vainqueur = "équipe B"
    else:                       # sinon
    	vainqueur = "Match nul"
    return vainqueur

A faire vous-même n°1

  1. Écrivez avec l'éditeur Basthon (fenêtre de gauche), la fonction gagnant donnée juste avant (ne faites pas de copier-coller, c'est pour apprendre à écrire sans faire d'erreurs justement !).
  2. Exécutez le programme puis, dans la console (fenêtre de droite), faites l’appel gagnant(4, 1) et appuyez sur Entrée. Quelle est la valeur renvoyée ?
  3. L’équipe A a marqué 2 buts et l’équipe B en a marqué 3. Quel appel à la fonction faut-il faire pour connaitre le vainqueur de ce match ?
  4. Proposez un appel à la fonction qui renvoie la chaîne de caractères "Match nul". Testez-le !
  5. Faites une capture d’écran du programme et des différents appels.

Les tests possibles

Inégalités et égalités

Jusqu’ici nous avons testé uniquement des inégalités strictes (< ou >). Il est bien sûr également possible de tester des inégalités larges (≤ ou ≥) et aussi des égalités (ou l’absence d’égalité). Le tableau suivant résume quelques-unes des possibilités supplémentaires.

Test Syntaxe Python
a = b a == b
a ≠ b a != b
a ≤ b a <= b
a ≥ b a >= b
a < b < c a < b < c
a ≤ b ≤ c a <= b <= c
a < b ≤ c a < b <= c

Important : vous remarquerez que pour tester l’égalité de deux variables on doit utiliser un double égal : ==. C’est une source d’erreur très fréquente, donc prêtez-y attention ! 😉

A faire vous-même n°2

illustration

Pour s’inscrire sur certains réseaux sociaux, il faut avoir au moins 13 ans. On veut écrire une fonction qui indique si un utilisateur peut s’y inscrire en fonction de son âge.

La fonction age_requis a pour paramètre l’age d’un utilisateur et renvoie True (= Vrai) s’il peut s’inscrire sur le réseau social en question, et False (= Faux) si ce n’est pas le cas.

Voici le code incomplet de la fonction age_requis.

def age_requis(age):
    if age >= ???:
        reponse = True
    else:
        reponse = ???
    return ???
  1. Remplacez les ??? par les bonnes instructions pour que la fonction age_requis soit correcte.
  2. Attention : il faut bien veiller à écrire True et False avec une première lettre majuscule en Python.

  3. Exécutez le programme puis testez la fonction avec un appel renvoyant la valeur True et un appel renvoyant la valeur False.
  4. Faites une capture d’écran du programme et des appels.

A faire vous-même n°3

Crédits : Cet exercice est grandement inspiré du travail proposé par Franck Chevrier sur son site python-lycee.com. Activité d'origine : https://www.python-lycee.com/parcours-apprentissage-pl3

illustration

Les applications de fitness permettent de calculer l’Indice de Masse Corporelle (IMC) de l’utilisateur. Celui-ci se calcule avec la formule :
$$\text{IMC} = \dfrac{\text{masse}}{\text{taille}^2}$$ où la masse est exprimée en kg et la taille en mètre.

La fonction imc suivante permet de calculer et renvoyer l'IMC d'une personne.

def imc(masse, taille):
	indice = masse / (taille ** 2)
	return indice
  1. Testez la fonction imc pour les 3 personnes présentées (il faut faire les bons appels dans la console).
  2. 3 individus avec leurs tailles et masses
  3. Faites une capture d’écran du programme et des tests de la question précédente..
  4. On considère que l'IMC d'un individu est dans la norme s'il est compris entre 18,5 et 25. On veut écrire une fonction diagnostic qui permet de renvoyer un message indiquant si un individu possède un IMC dans la norme ou non.
    Remettez dans l'ordre les instructions de cette fonction et cliquez sur le bouton pour vérifier. Attention, les indentations doivent être respectées !
  5. Une fois le code bien ordonné, copiez le code de la fonction diagnostic dans basthon (en dessous du code de la fonction imc). Testez ensuite cette fonction pour les 3 personnages.
  6. Adaptez la fonction Python diagnostic pour obtenir une analyse plus précise, en tenant compte de la grille de lecture ci-dessous.
  7. diagnostic selon l'imc

    Aide : Inspirez-vous de la fonction gagnant et regardez dans le tableau précédent, la bonne syntaxe pour écrire des inégalités.

  8. Testez la nouvelle fonction diagnostic pour les 3 personnages précédents.
  9. Faites une capture d’écran du programme et des tests de la question précédente..

A faire vous-même n°4

illustration

On veut écrire une fonction Python mention_bac qui prend en paramètre la moyenne moy d’un élève au baccalauréat et qui renvoie selon les cas une chaîne de caractères parmi "Vous n’avez pas votre bac", "Vous avez votre bac sans mention" ou "Vous avez votre bac avec mention !".

Rappel : avec une moyenne :

  1. Écrivez la fonction mention_bac.
  2. Aide : Inspirez-vous de la fonction gagnant et regardez dans le tableau précédent, la bonne syntaxe pour écrire des inégalités.

  3. Testez la fonction dans chaque cas de figure pour vérifier qu’elle est correcte.
  4. Faites une capture d’écran du programme et des tests..
  5. (BONUS à faire si tous les exercice sont terminés) : améliorez la fonction pour qu’elle prenne en compte les différentes mentions possibles. Faites une capture d’écran du programme et des appels.

A faire vous-même n°5

illustration

On rappelle que la couleur d'un pixel est codé par ses 3 composantes RVB (Rouge, Vert, Bleu). Chaque composante est un nombre entier compris entre 0 et 255. Par exemple, un pixel vert (pur) à des composantes $R=0$, $V=255$ et $B=0$.

On peut représenter un pixel en Python par la donnée des 3 composantes. Par exemple, on peut définir un pixel vert et un pixel rouge par les deux instructions suivantes :

pix1 = (0, 255, 0)
pix2 = (255, 0, 0)
  1. Écrivez et exécutez ces deux instructions dans la console pour créer les deux pixels (comme sur la capture d'écran ci-dessous).
  2. capture d'écran de la console
  3. Écrivez dans la console une instruction permettant de créer un pixel pix3 qui est bleu (pur).
  4. Analysez et recopiez dans l'éditeur Basthon (partie de gauche) la fonction Python est_rouge suivante.
  5. def est_rouge(pixel):
        if pixel == (255, 0, 0):  # vous remarquerez qu'il faut un double égal pour tester l'égalité
            reponse = True
        else:
            reponse = False
        return reponse
    
  6. Exécutez le code de cette fonction puis, dans la console, écrivez et exécutez l'instruction est_rouge(pix1) pour observer le résultat.
  7. Testez la fonction est_rouge sur les pixels pix2 et pix3. Quel est le rôle de cette fonction ?
  8. Créez une nouvelle fonction est_bleu qui permet de tester si le pixel donné en paramètre est bleu (pur) ou non.
  9. Testez cette nouvelle fonction avec les pixels pix1, pix2 et pix3.
  10. Faites une capture d’écran du programme et des tests de la question précédente..

Combiner plusieurs conditions

Parfois il est nécessaire de combiner plusieurs conditions dans un test.

Exemple : à la faculté, pour valider son semestre il est parfois nécessaire d’obtenir au moins la moyenne (soit 10/20) dans toutes les matières. De manière simplifiée, on suppose ici qu’il n’y a que trois matières (A, B et C). Ainsi, à la fin de l’algorithme suivant, la variable resultat vaut True si le semestre est validé et False sinon.

si noteA >= 10 et noteB >= 10 et noteC >= 10 alors
    valide = True
sinon
    valide = False

Il est nécessaire que les trois conditions noteA >= 10, noteB >= 10 et noteC >= 10 soient vraies pour que le trimestre soit validé.

En Python, on utilise le mot-clé and pour traduire le “et” et le mot-clé or pour traduire le “ou”.

Condition Syntaxe Python
condition1 et condition2 condition1 and condition2
condition1 ou condition2 condition1 or condition2

On peut combiner autant de conditions que l'on souhaite dans un test.

A faire vous-même n°6

illustration
  1. On veut écrire une fonction semestre_valide qui possède les trois notes en paramètres et qui renvoie True si le semestre est validé et False sinon.
    Mettez dans la zone jaune et dans le bon ordre les lignes de code de la fonction. Il faut bien respecter les indentations. Attention, certaines instructions sont fausses et donc inutiles, elles sont à laisser dans la partie sur fond gris. Cliquez ensuite sur le bouton pour vérifier.
  2. Une fois le code bien ordonné, copiez le code de la fonction semestre_valide dans l'éditeur Basthon et testez ensuite cette fonction en veillant à tester les différents cas de figure.
  3. Faites une capture d’écran du programme et des tests de la question précédente..

A faire vous-même n°7

Crédits : cet exercice est proposé par Franck Chevrier sur son site python-lycee.com à l'adresse https://www.python-lycee.com/parcours-apprentissage-pl3

illustration

Un site de vente en ligne propose tous les ans des réductions au moment des fêtes de Noël. Si on achète 3 articles qui coûtent chacun moins de 10 €, alors on bénéficie d'une remise totale de 40 % sur ce lot.

  1. Écrivez une fonction Python remise qui possède trois prix en paramètres et qui renvoie True si la remise s'applique et False sinon.
  2. Écrivez à la suite, la fonction Python facture ci-dessous. Testez cette fonction pour des articles coûtant 5€, 8€ et 12€, puis pour des articles coûtant 5€, 6,50€ et 8€.
  3. def facture(p1, p2, p3):
    	prix = p1 + p2 + p3
    	if remise(p1, p2, p3):
    		prix = prix * 0.6
    	return prix
    
  4. Faites une capture d’écran du programme et des tests de la question précédente..