Corrigé - Atelier 3 - If
Essayez de faire l'atelier avant de consulter ce corrigé.
Compréhension
Numéro 1
Quelques valeurs de age et les lignes affichées:
age | Président | Permis | Catégorie | |
|---|---|---|---|---|
| 12 | trop jeune | trop jeune | pas de permis | enfant |
| 13 | (rien) | trop jeune | pas de permis | adolescent |
| 15 | (rien) | trop jeune | pas de permis | adolescent |
| 17 | (rien) | trop jeune | avec accompagnateur | adolescent |
| 20 | (rien) | trop jeune | (rien) | adulte |
| 65 | (rien) | trop jeune | (rien) | aîné |
| 70 | (rien) | assez vieux | (rien) | aîné |
Chaque if est indépendant des autres, une valeur peut donc afficher plusieurs lignes en même temps (ex. age = 12 affiche 4 lignes).
Numéro 2
Quelques valeurs de heure:
heure | Salutation | Bureau |
|---|---|---|
| 9 | Bonjour | ouvert |
| 17 | Bon après-midi | fermé |
| 6 | Bonjour | fermé |
| 21 | Bonsoir | fermé |
Le bureau est ouvert de 9h (inclus) à 17h (exclu), donc fermé à exactement 17h.
Écriture
Numéro 3
Version avec 2 prints (le message est assemblé dans une variable, puis affiché à la fin):
nombre: int = -1
message: str
if nombre > 0:
message = "est positif"
elif nombre < 0:
message = "est négatif"
else:
message = "est égal à zéro"
print(nombre)
print(message)
Version avec 4 prints (un print par branche, comme au numéro 9 de l'Analyse, cette version fonctionne mais contient de la répétition):
nombre: int = -1
print(nombre)
if nombre > 0:
print("est positif")
elif nombre < 0:
print("est négatif")
else:
print("est égal à zéro")
Numéro 4
nombre: int = 50
jour: str
if nombre == 1:
jour = "dimanche"
elif nombre == 2:
jour = "lundi"
elif nombre == 3:
jour = "mardi"
elif nombre == 4:
jour = "mercredi"
elif nombre == 5:
jour = "jeudi"
elif nombre == 6:
jour = "vendredi"
elif nombre == 7:
jour = "samedi"
else:
jour = "-"
print(nombre)
print(jour)
Numéro 5
titre: str = "N"
prenom: str = "Fred"
nom: str = "Groleau"
salutation: str
if titre == "M" or titre == "m":
salutation = "Bonjour monsieur"
elif titre == "F" or titre == "f":
salutation = "Bonjour madame"
else:
salutation = "Bonjour"
print(salutation)
print(prenom)
print(nom)
Numéro 6
TAUX_TAXES: float = 0.14975
montant: float = 100
rabais: float
montantApresRabais: float
prixFinal: float
if montant >= 100:
rabais = montant * 0.10
elif montant >= 50:
rabais = 5
else:
rabais = 0
montantApresRabais = montant - rabais
prixFinal = montantApresRabais * (1 + TAUX_TAXES)
print(prixFinal)
Numéro 7
joueur1: str = "r"
joueur2: str = "p"
resultat: str
if joueur1 == joueur2:
resultat = "Égalité"
elif (joueur1 == "r" and joueur2 == "c") or (joueur1 == "c" and joueur2 == "p") or (joueur1 == "p" and joueur2 == "r"):
resultat = "Joueur 1 gagne"
else:
resultat = "Joueur 2 gagne"
print(resultat)
Analyse
Numéro 9
Le code fonctionne correctement, mais les lignes print("Voici votre billet:") et print(prix) sont répétées dans les deux branches. Puisqu'elles s'exécutent peu importe la valeur de etudiant, elles peuvent sortir du if:
etudiant: bool = True
prix: float = 12
if etudiant:
prix = prix - 3
print("Voici votre billet:")
print(prix)
Numéro 10
Le code contient une erreur de logique dans la condition du elif pour Atome: age > 10 and age < 9 est impossible (aucun nombre n'est à la fois plus grand que 10 et plus petit que 9), cette branche ne s'exécute donc jamais. Un jeune de 9 ou 10 ans tombe dans le else au lieu d'être catégorisé Atome. La condition devrait être age >= 9 and age <= 10.
Numéro 11
Le code ne vérifie qu'une seule des 3 conditions nécessaires pour valider un triangle. Avec a = 10, b = 3, c = 4, la condition a + b > c est vraie (13 > 4), le code affiche donc "Triangle valide", mais c'est faux puisque b + c (7) n'est pas plus grand que a (10). Il manque les 2 autres vérifications:
a: int = 10
b: int = 3
c: int = 4
if a + b > c and a + c > b and b + c > a:
print("Triangle valide")
else:
print("Triangle invalide")