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..