Corrigé - Atelier 4 - Lecture au clavier
Essayez de faire l'atelier avant de consulter ce corrigé.
Compréhension
Numéro 1
5 - chat
5 chat 3.14 FIN
3.14
Numéro 2
Alex|
07.00
+7
Écriture
Numéro 3
celsius: float
fahrenheit: float
celsius = float(input("Entrez une température en Celsius: "))
fahrenheit = celsius * 9 / 5 + 32
print(f"Température en Fahrenheit: {fahrenheit}")
Numéro 4
longueur: int
largeur: int
aire: int
forme: str
longueur = int(input("Veuillez entrer une longueur: "))
largeur = int(input("Veuillez entrer une largeur: "))
aire = longueur * largeur
if longueur == largeur:
forme = "carré"
else:
forme = "rectangle"
print(f"C'est un {forme}")
print(f"Aire de {aire}")
Numéro 5
TAUX_TPS: float = 0.05
TAUX_TVQ: float = 0.09975
nbProduits: int
prixUnitaire: float
sousTotal: float
tps: float
tvq: float
total: float
nbProduits = int(input("Veuillez entrer un nombre de produits: "))
prixUnitaire = float(input("Veuillez entrer un prix unitaire: "))
sousTotal = nbProduits * prixUnitaire
tps = sousTotal * TAUX_TPS
tvq = sousTotal * TAUX_TVQ
total = sousTotal + tps + tvq
print()
print(f"Sous-total: {sousTotal:.2f}")
print(f"TPS: {tps:.2f}")
print(f"TVQ: {tvq:.2f}")
print(f"Total: {total:.2f}")
Numéro 6
note1: int
note2: int
note3: int
note4: int
note5: int
moyenne: float
note1 = int(input("Veuillez entrer la note #1: "))
note2 = int(input("Veuillez entrer la note #2: "))
note3 = int(input("Veuillez entrer la note #3: "))
note4 = int(input("Veuillez entrer la note #4: "))
note5 = int(input("Veuillez entrer la note #5: "))
moyenne = (note1 + note2 + note3 + note4 + note5) / 5
print()
print(f"La moyenne est de: {moyenne:.2f}%")
Numéro 7
nb1: int
nb2: int
nb4: float
somme: int
difference: int
produit: int
quotientEntier: float
quotientReel: float
divEntiereEntier: int
divEntiereReel: float
resteEntier: int
resteReel: float
egal: bool
different: bool
plusGrand: bool
plusGrandEgal: bool
nb1 = int(input("Veuillez saisir nb1, un entier: "))
nb2 = int(input("Veuillez saisir nb2, un entier: "))
nb4 = float(input("Veuillez saisir nb4, un réel: "))
somme = nb1 + nb2
difference = nb1 - nb2
produit = nb1 * nb2
quotientEntier = nb1 / nb2
quotientReel = nb1 / nb4
divEntiereEntier = nb1 // nb2
divEntiereReel = nb1 // nb4
resteEntier = nb1 % nb2
resteReel = nb1 % nb4
egal = nb2 == nb4
different = nb2 != nb4
plusGrand = nb1 > nb2
plusGrandEgal = nb1 >= nb4
print()
print(f"La valeur de nb1 est {nb1}")
print(f"La valeur de nb2 est {nb2}")
print(f"La valeur de nb4 est {nb4}")
print("---------------------------------")
print(f"{nb1} + {nb2} = {somme}")
print(f"{nb1} - {nb2} = {difference}")
print(f"{nb1} * {nb2} = {produit}")
print(f"{nb1} / {nb2} = {quotientEntier}")
print(f"{nb1} / {nb4} = {quotientReel}")
print(f"{nb1} // {nb2} = {divEntiereEntier}")
print(f"{nb1} // {nb4} = {divEntiereReel}")
print(f"{nb1} % {nb2} = {resteEntier}")
print(f"{nb1} % {nb4} = {resteReel}")
print("---------------------------------")
print(f"nb2 == nb4 : {nb2} == {nb4} : {egal}")
print(f"nb2 != nb4 : {nb2} != {nb4} : {different}")
print(f"nb1 > nb2 : {nb1} > {nb2} : {plusGrand}")
print(f"nb1 >= nb4 : {nb1} >= {nb4} : {plusGrandEgal}")
print("---------------------------------")
Une chaîne multiligne (délimitée par """ au lieu d'un seul guillemet) peut contenir des retours à la ligne directement dans son texte. Combinée à un f-string, ça permet de remplacer tous les print par un seul:
print(f"""
La valeur de nb1 est {nb1}
La valeur de nb2 est {nb2}
La valeur de nb4 est {nb4}
---------------------------------
{nb1} + {nb2} = {somme}
{nb1} - {nb2} = {difference}
{nb1} * {nb2} = {produit}
{nb1} / {nb2} = {quotientEntier}
{nb1} / {nb4} = {quotientReel}
{nb1} // {nb2} = {divEntiereEntier}
{nb1} // {nb4} = {divEntiereReel}
{nb1} % {nb2} = {resteEntier}
{nb1} % {nb4} = {resteReel}
---------------------------------
nb2 == nb4 : {nb2} == {nb4} : {egal}
nb2 != nb4 : {nb2} != {nb4} : {different}
nb1 > nb2 : {nb1} > {nb2} : {plusGrand}
nb1 >= nb4 : {nb1} >= {nb4} : {plusGrandEgal}
---------------------------------""")
Numéro 8
nombre: int
signe: str
parite: str
nombre = int(input("Veuillez entrer un nombre: "))
if nombre > 0:
signe = "positif"
elif nombre < 0:
signe = "négatif"
else:
signe = "nul"
if nombre % 2 == 0:
parite = "pair"
else:
parite = "impair"
print(f"Le nombre {nombre} est {signe} et {parite}")
En donnant une valeur par défaut à signe et parite, on peut retirer les else puisqu'ils ne changent que dans certains cas:
nombre: int
signe: str = "nul"
parite: str = "pair"
nombre = int(input("Veuillez entrer un nombre: "))
if nombre > 0:
signe = "positif"
elif nombre < 0:
signe = "négatif"
if nombre % 2 != 0:
parite = "impair"
print(f"Le nombre {nombre} est {signe} et {parite}")
Cette version fonctionne, mais elle réduit la clarté: pour savoir ce qui arrive quand nombre est nul ou pair, il faut remonter à la déclaration de la variable au lieu de le voir directement dans le if. Préférez la première version.
Numéro 9
nombre1: int
nombre2: int
petit: int
grand: int
nombre1 = int(input("Veuillez saisir le nombre 1: "))
nombre2 = int(input("Veuillez saisir le nombre 2: "))
if nombre1 < nombre2:
petit = nombre1
grand = nombre2
else:
petit = nombre2
grand = nombre1
print(petit, grand)
Numéro 10
choix: int
fahrenheit: float
celsius: float
resultat: str
print("Voulez-vous convertir:")
print("1: du Fahrenheit au Celsius")
print("2: du Celsius au Fahrenheit")
choix = int(input("Veuillez saisir 1 ou 2: "))
if choix == 1:
fahrenheit = float(input("Entrez une température en Fahrenheit: "))
celsius = (fahrenheit - 32) * 5 / 9
resultat = f"Température en Celsius: {celsius:.2f}"
else:
celsius = float(input("Entrez une température en Celsius: "))
fahrenheit = celsius * 9 / 5 + 32
resultat = f"Température en Fahrenheit: {fahrenheit:.2f}"
print(resultat)
Numéro 11
operation: str
nombre1: float
nombre2: float
resultat: str
operation = input("Veuillez choisir une opération (+, -, *, /): ")
nombre1 = float(input("Veuillez saisir le nombre 1: "))
nombre2 = float(input("Veuillez saisir le nombre 2: "))
if operation == "+":
resultat = f"{nombre1:g} + {nombre2:g} = {nombre1 + nombre2:g}"
elif operation == "-":
resultat = f"{nombre1:g} - {nombre2:g} = {nombre1 - nombre2:g}"
elif operation == "*":
resultat = f"{nombre1:g} * {nombre2:g} = {nombre1 * nombre2:g}"
elif operation == "/":
if nombre2 == 0:
resultat = "Impossible de diviser par zéro"
else:
resultat = f"{nombre1:g} / {nombre2:g} = {nombre1 / nombre2:g}"
else:
resultat = "Opération non-valide"
print(resultat)
Une autre version qui garde seulement le résultat numérique et l'erreur dans le if, puis construit le message final une seule fois:
operation: str
nombre1: float
nombre2: float
resultat: float
erreur: str
operation = input("Veuillez choisir une opération (+, -, *, /): ")
nombre1 = float(input("Veuillez saisir le nombre 1: "))
nombre2 = float(input("Veuillez saisir le nombre 2: "))
erreur = ""
if operation == "+":
resultat = nombre1 + nombre2
elif operation == "-":
resultat = nombre1 - nombre2
elif operation == "*":
resultat = nombre1 * nombre2
elif operation == "/" and nombre2 != 0:
resultat = nombre1 / nombre2
elif operation == "/":
erreur = "Impossible de diviser par zéro"
else:
erreur = "Opération non-valide"
if erreur == "":
print(f"{nombre1:g} {operation} {nombre2:g} = {resultat:g}")
else:
print(erreur)
Numéro 12
Version directe, un if imbriqué par combinaison source/destination (9 combinaisons en tout):
uniteSource: int
temperatureSource: float
uniteDestination: int
resultat: float
print("Les unités disponibles sont:")
print("1 - Kelvin")
print("2 - Celsius")
print("3 - Fahrenheit")
uniteSource = int(input("Veuillez choisir l'unité source (1, 2 ou 3): "))
temperatureSource = float(input("Veuillez saisir la température source: "))
uniteDestination = int(input("Veuillez choisir l'unité de destination (1, 2 ou 3): "))
if uniteSource == 1:
if uniteDestination == 1:
resultat = temperatureSource
elif uniteDestination == 2:
resultat = temperatureSource - 273.15
else:
resultat = (temperatureSource - 273.15) * 9 / 5 + 32
elif uniteSource == 2:
if uniteDestination == 1:
resultat = temperatureSource + 273.15
elif uniteDestination == 2:
resultat = temperatureSource
else:
resultat = temperatureSource * 9 / 5 + 32
else:
if uniteDestination == 1:
resultat = (temperatureSource - 32) * 5 / 9 + 273.15
elif uniteDestination == 2:
resultat = (temperatureSource - 32) * 5 / 9
else:
resultat = temperatureSource
print(f"{resultat:.2f}")
Le raccourci de la version suivante: au lieu d'écrire une formule pour chacune des 9 combinaisons, on convertit toujours la température source vers le Celsius d'abord, peu importe l'unité de départ. On peut ensuite convertir ce Celsius vers l'unité de destination, peu importe laquelle. Ça réduit le nombre de formules à retenir de 9 à 6 (3 pour entrer dans le Celsius, 3 pour en sortir), au prix d'une variable intermédiaire (celsius) qui n'existait pas dans l'énoncé.
uniteSource: int
temperatureSource: float
uniteDestination: int
celsius: float
resultat: float
print("Les unités disponibles sont:")
print("1 - Kelvin")
print("2 - Celsius")
print("3 - Fahrenheit")
uniteSource = int(input("Veuillez choisir l'unité source (1, 2 ou 3): "))
temperatureSource = float(input("Veuillez saisir la température source: "))
uniteDestination = int(input("Veuillez choisir l'unité de destination (1, 2 ou 3): "))
if uniteSource == 1:
celsius = temperatureSource - 273.15
elif uniteSource == 2:
celsius = temperatureSource
else:
celsius = (temperatureSource - 32) * 5 / 9
if uniteDestination == 1:
resultat = celsius + 273.15
elif uniteDestination == 2:
resultat = celsius
else:
resultat = celsius * 9 / 5 + 32
print(f"{resultat:.2f}")
Analyse
Numéro 13
anneeNaissance devrait être un int, input sans conversion retourne toujours un str. Il manque une conversion avec int():
anneeNaissance: int
age: int
anneeNaissance = int(input("Entrez votre année de naissance: "))
age = 2026 - anneeNaissance
print(age)
Numéro 14
Le code ne plante pas, mais ne répond pas à la demande: on voulait un message de bienvenue, pas une étiquette « Nom: »:
prenom: str
nom: str
prenom = input("Prénom: ")
nom = input("Nom: ")
print(f"Bienvenue {prenom} {nom}")
Numéro 15
Le code ne plante pas et ne contient pas d'erreur de norme, mais le format .0f arrondit la taxe à l'entier le plus proche, donc un prix de 10$ affiche une taxe de 0$ au lieu de 0.50$. Il faut garder au moins 2 décimales:
prix: float
tps: float
prix = float(input("Prix: "))
tps = prix * 0.05
print(f"Taxe: {tps:.2f}$")