Corrigé - Atelier 3 - Match
Essayez de faire l'atelier avant de consulter ce corrigé.
Compréhension
Numéro 1
Quelques valeurs de choix:
choix | Résultat |
|---|---|
| 1 | Démarrer |
| 3 | Quitter |
| 5 | Invalide |
Numéro 2
Quelques valeurs de jour:
jour | Résultat |
|---|---|
| 1 | Fin de semaine |
| 4 | Jour de semaine |
| 7 | Fin de semaine |
| 0 | Invalide |
Écriture
Numéro 3
nombre: int
jour: str
nombre = int(input("Entrez un chiffre entre 1 et 7: "))
match nombre:
case 1:
jour = "dimanche"
case 2:
jour = "lundi"
case 3:
jour = "mardi"
case 4:
jour = "mercredi"
case 5:
jour = "jeudi"
case 6:
jour = "vendredi"
case 7:
jour = "samedi"
case _:
jour = "-"
print(jour)
Numéro 4
titre: str
prenom: str
nom: str
salutation: str
titre = input("Entrez le titre désiré (M,m,F,f,N,n): ")
prenom = input("Entrez le prénom: ")
nom = input("Entrez le nom: ")
match titre:
case "M" | "m":
salutation = "Bonjour monsieur"
case "F" | "f":
salutation = "Bonjour madame"
case _:
salutation = "Bonjour"
print(f"{salutation} {prenom} {nom}")
Numéro 5
Version avec if:
mois: int
saison: str
mois = int(input("Entrez un nombre entre 1 et 12 représentant un mois (1 = janvier): "))
if mois == 12 or mois == 1 or mois == 2:
saison = "Hiver"
elif mois == 3 or mois == 4 or mois == 5:
saison = "Printemps"
elif mois == 6 or mois == 7 or mois == 8:
saison = "Été"
elif mois == 9 or mois == 10 or mois == 11:
saison = "Automne"
else:
saison = "Invalide"
print(saison)
Version avec match:
mois: int
saison: str
mois = int(input("Entrez un nombre entre 1 et 12 représentant un mois (1 = janvier): "))
match mois:
case 12 | 1 | 2:
saison = "Hiver"
case 3 | 4 | 5:
saison = "Printemps"
case 6 | 7 | 8:
saison = "Été"
case 9 | 10 | 11:
saison = "Automne"
case _:
saison = "Invalide"
print(saison)
Le match est plus simple ici, mais attention, le raccourcis avec le | ne fonctionne qu'en Python. Dans les autres langages ça prend 12 case, il faudra prioriser le if.
Numéro 6
Version avec if:
jour: int
mois: int
joursDansMois: int
jour = int(input("Entrez un jour: "))
mois = int(input("Entrez un mois (1 = janvier): "))
if mois == 1 or mois == 3 or mois == 5 or mois == 7 or mois == 8 or mois == 10 or mois == 12:
joursDansMois = 31
elif mois == 4 or mois == 6 or mois == 9 or mois == 11:
joursDansMois = 30
elif mois == 2:
joursDansMois = 28
else:
joursDansMois = 0
if jour >= 1 and jour <= joursDansMois:
print("Date valide")
else:
print("Date invalide")
Le case de 31 jours est le plus long, on peut simplifier le code en plaçant ce cas dans le else:
jour: int
mois: int
joursDansMois: int
jour = int(input("Entrez un jour: "))
mois = int(input("Entrez un mois (1 = janvier): "))
if mois == 4 or mois == 6 or mois == 9 or mois == 11:
joursDansMois = 30
elif mois == 2:
joursDansMois = 28
else:
joursDansMois = 31
if mois >= 1 and mois <= 12 and jour >= 1 and jour <= joursDansMois:
print("Date valide")
else:
print("Date invalide")
Version avec match:
jour: int
mois: int
joursDansMois: int
jour = int(input("Entrez un jour: "))
mois = int(input("Entrez un mois (1 = janvier): "))
match mois:
case 1 | 3 | 5 | 7 | 8 | 10 | 12:
joursDansMois = 31
case 4 | 6 | 9 | 11:
joursDansMois = 30
case 2:
joursDansMois = 28
case _:
joursDansMois = 0
if jour >= 1 and jour <= joursDansMois:
print("Date valide")
else:
print("Date invalide")
Le match est beaucoup plus simple ici, surtout si on met le "31 jours" dans le else comme dans l'exemple précédent.
Analyse
Numéro 8
Le code ne s'exécute pas, Python refuse de le lancer (SyntaxError). Il est interdit de mettre seulement le nom d'une variable dans un case (ex. case seuil_excellent:), sauf si on utilise un garde: Python comprend seuil_excellent comme un nouveau nom qui capture n'importe quelle valeur, pas comme une comparaison à la variable existante.
De plus, les noms seuil_excellent et seuil_bien ne respectent pas les normes de nommage du département: les variables doivent utiliser la casse de chameau (camelCase, ex. seuilExcellent), pas la notation serpent (snake_case, avec trait de soulignement).
note: int = 65
seuil_excellent: int = 90
seuil_bien: int = 70
match note:
case note if note >= seuil_excellent:
print("Excellent")
case note if note >= seuil_bien:
print("Bien")
case _:
print("Échec")
Numéro 9
Le code fonctionne correctement, mais il répète la même action pour 2 cartes différentes. Puisque ♠ et ♣ donnent toutes les 2 "Noir" et que ♥ et ♦ donnent toutes les 2 "Rouge", ces cas peuvent être regroupés avec |:
carte: str = "♥"
match carte:
case "♠" | "♣":
print("Noir")
case "♥" | "♦":
print("Rouge")
case _:
print("Invalide")