Aller au contenu principal

Corrigé - Atelier 3 - Match

Essayez de faire l'atelier avant de consulter ce corrigé.

Compréhension​

Numéro 1​

Quelques valeurs de choix:

choixRésultat
1Démarrer
3Quitter
5Invalide

Numéro 2​

Quelques valeurs de jour:

jourRésultat
1Fin de semaine
4Jour de semaine
7Fin de semaine
0Invalide

É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")