SNT Python 3

Identification

Infoforall

5 - Instruction conditionnelle


Aujourd'hui, nous allons voir les instructions conditionnelles.

Instruction conditionnelle  avec Scratch
Les instructions conditionnelles avec Scratch

Nous allons voir comment faire comprendre cela à l'interpréteur Python.

IDE Python proposé : Thonny

Documents de cours : pdf ou odt.

Feuille d'exercices : pdf ou odt.

1 - Découverte pas à pas

✔ Intro A (Mise en place)° Réaliser les actions suivantes :

  • Ouvrir Thonny. Réduire la fenêtre de Thonny et de votre navigateur Web pour que chaque fenêtre occupe la moitié de l'écran.
  • Ouvrir votre dossier/répertoire personnel. Créer dans le dossier SNT un nouveau sous-dossier qu'on nommera python05.
  • Sur Windows : vérifier via le menu affichage de votre explorateur de dossiers que vous avez bien coché la case "Afficher les extensions".

✔ Intro B° Ce programme utilise un if, c'est à dire un bloc d'instructions qui ne sera réalisée que si la condition proposée est évaluée à True. Sauvegarder et lancer le PROGRAMME en utilisant la flèche verte dans Thonny.

1 2 3 4 5 6 7
note = int( input() ) commentaire = "" if note > 10: commentaire = "Bien !" print("Fin")

Questions-réponses

  1. Que trouve-t-on à la fin de la ligne du if ?
  2. Le caractère :

  3. Fournir les numéros des lignes rencontrées par l'intepréteur avec une note de 18 puis une note de 5.
  4. Note de 18 : L1 - L2 - L4(True) - L5 - L7 - fin

    Note de 05 : L1 - L2 - L4(False) - L7 - fin

  5. Lorsque note vaut 18, que vaut commentaire après exécution total du programme ?
  6. Puisqu'on réalise la ligne 5, on obtient "Bien".

  7. Lorsque note vaut 5, que vaut commentaire après exécution total du programme ?
  8. Puisqu'on ne réalise pas la ligne 5, on garde l'affectation de base de la ligne 2 : "", un string vide.

✔ Intro C° Ce nouveau programme utilise, en plus de if, un bloc else sans condition qui s'exécute uniquement aucune condition n'a pu être validé. Il s'agit du bloc d'actions par défaut. Sauvegarder et lancer le PROGRAMME en utilisant la flèche verte dans Thonny.

1 2 3 4 5 6 7 8 9
note = int( input() ) commentaire = "" if note > 10: commentaire = "Bien !" else: commentaire = "Bof" print("Fin")

Questions-réponses

  1. Que trouve-t-on à la fin de la ligne du else ?
  2. Le caractère :

  3. Fournir les numéros des lignes rencontrées par l'intepréteur avec une note de 18 puis une note de 5.
  4. Note de 18 : L1 - L2 - L4(True) - L5 - L9 - fin

    Note de 05 : L1 - L2 - L4(False) - L6 - L7 - L9 - fin

  5. Lorsque note vaut 18, que vaut commentaire après exécution total du programme ?
  6. Puisqu'on réalise la ligne 5, on obtient "Bien".

  7. Lorsque note vaut 5, que vaut commentaire après exécution total du programme ?
  8. Puisqu'on réalise la ligne 7, on obtient "Bof".

  9. Pour quelles notes va-t-on activer le bloc else ?
  10. Le premier bloc s'active pour les notes strictement supérieures à 10 (11 et plus donc). Le bloc par défaut va donc être activé pour les notes INFERIEURES ou EGALES à 10.

✔ Intro D° Ce nouveau programme utilise, en plus de if, des blocs elif avec condition : on va effectuer le premier bloc dont la condition est validée puis on sort de l'instruction conditionnelle. Répondre aux questions.

1 2 3 4 5 6 7 8 9 10 11 12 13
note = int( input() ) commentaire = "" if note > 10: commentaire = "Bien !" elif note < 3: commentaire = "Vraiment pas bien" elif note < 6: commentaire = "Pas bien" else: commentaire = "Bof" print("Fin")

Questions-réponses

  1. Que trouve-t-on à la fin de la ligne du else ?
  2. Le caractère :

  3. Fournir les numéros des lignes rencontrées par l'intepréteur avec une note de 18, 8, 5 et 2.
  4. Note de 18 : L1 - L2 - L4(True) - L5 - L13 - fin

    Note de 08 : L1 - L2 - L4(False) - L6(False) - L8(False) - L10 - L11 - L13 - fin

    Note de 05 : L1 - L2 - L4(False) - L6(False) - L8(True) - L9 - L13 - fin

    Note de 02 : L1 - L2 - L4(False) - L6(True) - L7 - L13 - fin

Bilan

if se traduit par SI ... et permet de savoir qu'on commence un nouveau bloc d'instructions conditionnelles.

elif se traduit par SINON, SI et permet de fournir une nouvelle condition au cas où celles du dessous ne soient pas validées.

else se traduit par DANS TOUS LES AUTRES CAS : ce bloc s'active uniquement si aucune condition n'a pu être validée.

On retiendra bien qu'un SEUL BLOC sera activé puis on sort immédiatment des blocs conditionnelles pour continuer le programme.

Si vous êtes en TP, passez directement à la partie 2 suivante, sans lire les trois bilans ci-dessous : ils seront analysés oralement à la fin du TP.

1.1 Instruction conditionnelle

Idée générale

Une instruction conditionnelle permet d'exécuter un bloc d'instructions uniquement si la condition évaluée est vraie (True en Python).

Ci-dessous, un exemple où on change l'appréciation si la note est bonne (if en anglais)

1 2 3 4 5 6
fatigue = "En forme !" appreciation = "Moyen" note = 20 if note > 15: appreciation = "Très bien" fatigue = "Grosse fatigue"
Signification des lignes en français
  • L3 : note référence 20.
  • L4 : si la note est strictement supérieure à 15
  • (L5 tabulée, appartient au if) : alors appreciation référence "Très bien".
  • L6 (pas tabulée, n'appartient pas au if) : fatigue passe à "Grosse fatigue" (sans condition car pas de tabulation).
Importance de la tabulation

La tabulation (4 espaces) permet de signaler à l'intepréteur Python le début et la fin du bloc de la condition. La ligne 6 n'appartient donc pas au bloc : elle sera exécutée que la condition soit vraie ou fausse.

On peut rendre le code plus clair pour un débutant en utilisant des lignes vides :

1 2 3 4 5 6 7 8
fatigue = "En forme !" appreciation = "Moyen" note = 20 if note > 15: appreciation = "Très bien" fatigue = "Grosse fatigue"
Déroulé pour note = 20

L1 - L2 - L3 - L4 (avec condition vraie) - L5 - L6 - fin

1 2 3 4 5 6
fatigue = "En forme !" appreciation = "Moyen" note = 20 if note > 15: # Vrai pour une note de 20 appreciation = "Très bien" # donc on effectue cette ligne fatigue = "Grosse fatigue"
Déroulé pour note = 10

L1-L2-L3-L4 (avec condition fausse) - L6 - fin

1 2 3 4 5 6
fatigue = "En forme !" appreciation = "Moyen" note = 14 if note > 15: # Faux pour une note de 14 appreciation = "Très bien" # donc on n'effectue pas cette ligne fatigue = "Grosse fatigue"
1.2 Instruction conditionnelle : structure générale

Quelque soit le langage, on retrouve toujours une structure qui ressemble à ceci :

1 2 3 4 5 6 7 8 9 10 11 12 13 14
# BLOC A (un seul, obligatoire) SI une expression booléenne A est vraie Instruction A1 Instruction A2 # BLOC B (0 ou + : optionnel) SINON SI une expression booléenne B est vraie Instruction B1 Instruction B2 # BLOC C (0 ou 1 : optionnel unique) SINON (dans tous les autres cas) Instruction C1 Instruction C2

Nombre de blocs

  • Un unique bloc SI et il doit toujours être en première position
  • 0, 1, 2 ou autant de blocs SINON SI que vous voulez
  • 0 ou 1 bloc SINON et il doit toujours être en dernière position : c'est le bloc par défaut. Si aucun autre n'a été activé, on prend celui-ci.
1.3 Instruction conditionnelle : un seul bloc exécuté

A SAVOIR IMPERATIVEMENT

L'interpréteur Python n'exécute que l'un des blocs A, B ou C d'une structure if-elif-else.

Il exécute les instructions du bloc de la première expression évaluée à True puis quitte la structure même si les autres expressions sont vraies également.

Un exemple de déroulement
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
Instructions Avant 1 Instructions Avant 2 # BLOC A (un seul, obligatoire) if note > 11: Instruction A1 Instruction A2 Instruction A3 # BLOC B (0 ou + : optionnel) elif note < 9: Instruction B1 Instruction B2 Instruction B3 # BLOC C (0 ou 1 : optionnel unique) else: Instruction C1 Instruction C2 Instructions Après 1 Instructions Après 2

Exemple avec note valant 15.

C'est le bloc A qui va s'activer car note > 11 est évaluée à True.

Il exécute L1-L2-L5-L6-L7-L8-L21-L22.

Exemple avec note valant 5.

C'est le bloc B qui va s'activer car le bloc A ne sera pas activé et note < 9 est évaluée à True.

Il exécute L1-L2-L5-L11-L12-L13-L14-L21-L22.

Exemple avec note valant 9.

C'est le bloc C qui va s'activer car le bloc A ne sera pas activé, le bloc B non plus (9 n'est pas strictement inférieur à 9) et le else ne possède jamais de condition : si on y arrive, on le déclenche toujours.

Il exécute L1-L2-L5--L11-L17-L8-L19-L21-L22.

2 - Exercices

⚙ 01° Compléter le programme suivant pour qu'il puisse traduire au moins les couleurs "rouge", "vert", "bleu" et "noir".

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
print("Donner une couleur dont vous voulez la traduction en anglais : ") mot = input() traduction = "?" if mot == "bleu": traduction = "blue" elif ...: ... ... ... ... ... print("Mot en français :") print(mot) print("Traduction proposée en anglais :") print(traduction)

...CORRECTION...

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
print("Donner une couleur dont vous voulez la traduction en anglais : ") mot = input() traduction = "?" if mot == "bleu": traduction = "blue" elif mot == "rouge": traduction = "red" elif mot == "vert": traduction = "green" elif mot == "noir": traduction = "black" print("Mot en français :") print(mot) print("Traduction proposée en anglais :") print(traduction)

⚙ 02-A° On peut demander à Python de tirer des nombres au hasard avec la fonction randint(), comme "random integer". Cette fonction fait partie du module nommée random.

valeur = random(1, 6) va générer un nombre aléatoire allant de 1 (compris) à 6 (compris).

Utiliser plusieurs fois ce programme qui tire un nombre au hasard et affiche le résultat obtenu.

1 2 3 4 5
from random import randint valeur = randint(1, 6) print(valeur)

Questions

  1. Dans quelle variable stocke-on le nombre aléatoire ? Donner son nom et la ligne sur laquelle l'affectation est faite.
  2. Sur quelle ligne demande-t-on d'afficher ce nombre ?

...CORRECTION...

  1. L'affectation se fait sur la ligne 3 : il s'agit de la variable valeur.
  2. L'affichage est demandé sur la ligne 5 : on utilise print().

⚙ 02-B° Compléter les ... du programme de façon à ce qu'il fonctionne ainsi :

  • Ligne 3 : on tire un nombre au hasard et
  • Ligne 6 : le joueur doit deviner sa valeur.
  • Ligne 8-9-10-11 : On affichera le message "Bravo !" s'il trouve le bon nombre, "Perdu" sinon et
  • Ligne 14 : on affichera la valeur qu'il fallait trouver.

Pour l'instant, on a droit à un seul essai. Ce jeu sera amélioré lorsque nous verrons la boucle TANT QUE.

1 2 3 4 5 6 7 8 9 10 11 12 13 14
from random import randint valeur = randint(1, 6) print("Quelle valeur proposez-vous entre 1 et 6 ?") reponse = int(input()) if ... == ...: print("Bravo !") else: print("Perdu !") print("Le nombre mystère était") print(...)

...CORRECTION...

1 2 3 4 5 6 7 8 9 10 11 12 13 14
from random import randint valeur = randint(1, 6) print("Quelle valeur proposez-vous entre 1 et 6 ?") reponse = int(input()) if reponse == valeur: print("Bravo !") else: print("Perdu !") print("Le nombre mystère était") print(valeur)

⚙ 03° Compléter les ... du programme pour qu'il simule ce jeu de dés :

  • Phase 1 : on lance 3 dés a b c et on voit leurs résultats;
  • Phase 2 : le joueur peut éventuellement en relancer un;
  • Phase 3 : on compte les points en faisant la somme des trois dés.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
from random import randint # PHASE 1 : on tire et affiche les dés de1 = randint(1, 6) # Nombre au hasard entre 1 et 6 de2 = randint(1, 6) # Nombre au hasard entre 1 et 6 de3 = randint(1, 6) # Nombre au hasard entre 1 et 6 print("Vos trois tirages sont :") print(de1) print(de2) print(de3) # PHASE 2 : on relance print("Quel dé voulez-vous relancer ? Répondre a, b, c (ou x pour ne rien relancer)") choix = input() if choix == 'a': de1 = randint(1, 6) # Nombre au hasard entre 1 et 6 elif ...: ... # Nombre au hasard entre 1 et 6 elif ...: ... # Nombre au hasard entre 1 et 6 if ... != 'x': print("Après relance, vos trois tirages sont désormais:") print(de1) print(de2) print(de3) # PHASE 3 : on affiche les points total = ... print("Vous avez marqué :") print(total)

...CORRECTION...

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
from random import randint # PHASE 1 : on tire et affiche les dés de1 = randint(1, 6) # Nombre au hasard entre 1 et 6 de2 = randint(1, 6) # Nombre au hasard entre 1 et 6 de3 = randint(1, 6) # Nombre au hasard entre 1 et 6 print("Vos trois tirages sont :") print(de1) print(de2) print(de3) # PHASE 2 : on relance print("Quel dé voulez-vous relancer ? Répondre a, b, c (ou x pour ne rien relancer)") choix = input() if choix == 'a': de1 = randint(1, 6) # Nombre au hasard entre 1 et 6 elif choix == 'b': de2 = randint(1, 6) # Nombre au hasard entre 1 et 6 elif choix == 'c': de3 = randint(1, 6) # Nombre au hasard entre 1 et 6 if choix != 'x': print("Après relance, vos trois tirages sont désormais:") print(de1) print(de2) print(de3) # PHASE 3 : on affiche les points total = de1 + de2 + de3 print("Vous avez marqué :") print(total)

⚙ 04° Compléter les ... de ce programme pour qu'il renvoie le nom du vainqueur d'une élection : celle ou celui qui a le plus de votes. En cas d'égalité (peu probable), on prendra le premier arrivé dans l'ordre chronologique du programme. Les votes sont tirés au hasard entre 100 et 10000000 l'aide des lignes 4, 7 et 10.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
from random import randint nom_1 = "Alice" votes_1 = randint(100, 10000000) # Nombre au hasard nom_2 = "Bob" votes_2 = randint(100, 10000000) # Nombre au hasard nom_3 = "Charlie" votes_3 = randint(100, 10000000) # Nombre au hasard elu = "" # Plusieurs lignes à compléter à partir d'ici if ... >= ...: # Si 1 a plus de votes que 2 if ... >= ...: # Si 1 a plus de votes que 3 elu = nom_1 else: # Ici, 3 a plus que 1 qui a plus que 2 elu = nom_3 elif ...: elu = nom_2 else: ... print("Vous pensez que le vainqueur est : " + elu) print("-------------") print("Les nombres de votes étaient :") print(nom_1) print(votes_1) print(nom_2) print(votes_2) print(nom_3) print(votes_3)

...CORRECTION...

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
from random import randint nom_1 = "Alice" votes_1 = randint(100, 10000000) # Nombre au hasard nom_2 = "Bob" votes_2 = randint(100, 10000000) # Nombre au hasard nom_3 = "Charlie" votes_3 = randint(100, 10000000) # Nombre au hasard elu = "" # Plusieurs lignes à compléter à partir d'ici if votes_1 >= votes_2: # Si 1 a plus de votes que 2 if votes_1 >= votes_3: # Si 1 a plus de votes que 3 elu = nom_1 else: # Ici, 3 a plus que 1 qui a plus que 2 elu = nom_3 elif votes_2 >= votes_3: elu = nom_2 else: elu = nom_3 print("Vous pensez que le plus vainqueur est : " + elu) print("-------------") print("Les trois nombres de votes étaient :") print(nom_1) print(votes_1) print(nom_2) print(votes_2) print(nom_3) print(votes_3)

3 - Py-rates

✎ 05° Connectez-vous sur le site py-rates.org. Choisissez votre langue en haut à droite, et rentrez votre numéro de session qui vous permettra de continuer.

Il vous reste à fournir les codes permettant de passer les niveaux 4 et 5.

Activité publiée le 15 12 2022
Dernière modification : 15 12 2022
Auteur : ows. h.