Corrigé - Atelier 2 - Opérateurs et expressions
Essayez de faire l'atelier avant de consulter ce corrigé.
Numéro 1
Rappel des variables: d ≈ 0.3333 (float, la division / retourne toujours un float), i1 = 10, i2 = 100, i3 = 1000, i4 = 100.
| Expression | Valeur | Type / Erreur |
|---|---|---|
i1 * i1 | 100 | int |
i1 * d | 3.3333... | float |
i1 + d | 10.3333... | float |
i1 / 0 | Erreur | ZeroDivisionError |
i2 % 3 | 1 | int |
i3 % 100 | 0 | int |
i4 - 100.0 | 0.0 | float |
i1 / 3 | 3.3333... | float, division réelle |
i1 // 3 | 3 | int, division entière, tronque la partie décimale |
Numéro 2
Rappel des variables: x = 5, y = 10.
| Expression | Valeur |
|---|---|
(x > 0) and (y > 0) | True |
(x > y) and (y == 10) | False |
(x == 0) or (y == 0) | False |
(x == 0) or (y == 10) | True |
(x > 0) or (y > 0) | True |
not(x > 0) | False |
not not(y != 0) | True |
not(x >= 0 and x <= 10) | False |
((x % 10 == 5) or (y % 10 == 0)) and (x + y > 100) | False |
(x % 10 == 5) or (y % 10 == 0) and (x + y > 100) | True |
Numéro 3
Rappel des variables: nb1 = 5 (int), nb2 = 2.5 (float), nb3 (annoté int, mais jamais assigné), test = False (bool), texte = "AB" (str), code = 3 (int).
| Expression | Valeur | Type / Erreur |
|---|---|---|
nb1 + 4 % nb1 * 3 - 6 | 11 | int |
nb1 % 2 % 2 / 2 | 0.5 | float |
nb1 % 2 % 2 / 2.0 | 0.5 | float |
(nb2 / 2.5) == 1.0 | True | bool |
test or (nb2 == (nb1 / 2)) | True | bool |
nb1 / 2 | 2.5 | float |
nb1 / 2.5 | 2.0 | float |
nb1 + texte | - | TypeError: impossible d'additionner un int et un str |
(nb1 * 3 % 3) == 3 | False | bool |
1 / (nb1 + nb2) | 0.1333... | float |
1 / (nb1 + 2) | 0.1428... | float |
(nb1 / nb2) != (nb1 / 2) | True | bool |
(nb1 > 2) and (nb1 < 5) | False | bool |
test or (nb1 == 5) and (nb2 > 2) | True | bool |
nb1 / code | 1.6666... | float |
nb2 - test | 2.5 | float |
nb1 / 5 | 1.0 | float |
Numéro 4
Problème 1
largeur: int = 3
longueur: int = 7
aire: int
aire = largeur * longueur
print(aire)
Problème 2
degF: int = 72
degC: float
degC = (degF - 32) * 5 / 9
print(degC)
Problème 3
anneeActuelle: int = 2024
anneeNaissance: int = 1990
age: int
age = anneeActuelle - anneeNaissance
print(age)
Problème 4
PI: float = 3.1416
rayon: int = 5
circonference: float
circonference = 2 * PI * rayon
print(circonference)
Problème 5
note1: int = 85
note2: int = 62
note3: int = 78
moyenne: float
moyenne = (note1 + note2 + note3) / 3
print(moyenne)
Problème 6
annee: int = 2024
bissextile: bool
bissextile = (annee % 4 == 0 and annee % 100 != 0) or (annee % 400 == 0)
print(bissextile)
Problème 7
TPS: float = 0.05
TVQ: float = 0.09975
quantite: int = 3
prix: float = 18.99
sousTotal: float
total: float
sousTotal = quantite * prix
total = sousTotal + sousTotal * TPS + sousTotal * TVQ
# OU total = sousTotal * (1 + TPS + TVQ)
print(sousTotal)
print(total)
Problème 8
TPS: float = 0.05
TVQ: float = 0.09975
quantite: int = 3
prix: float = 18.99
total: float
total = quantite * prix * (1 + TPS + TVQ)
print(total)
Problème 9
heures: int = 4
minutes: int = 32
secondes: int = 49
secondesTotal: int
secondesTotal = heures * 3600 + minutes * 60 + secondes
print(secondesTotal)
Problème 10
Il y a plusieurs bonnes façons d'arriver au résultat.
Solution 1 - avec une variable intermédiaire reste
secondesTotal: int = 17823
heures: int
reste: int
minutes: int
secondes: int
heures = secondesTotal // 3600
reste = secondesTotal % 3600
minutes = reste // 60
secondes = reste % 60
print(heures, minutes, secondes)
Solution 2 - sans variable intermédiaire
secondesTotal: int = 17823
heures: int
minutes: int
secondes: int
heures = secondesTotal // 3600
minutes = (secondesTotal % 3600) // 60
secondes = secondesTotal % 60
print(heures, minutes, secondes)
Solution 3 - en réduisant reste au fur et à mesure
secondesTotal: int = 17823
reste: int
heures: int
minutes: int
secondes: int
reste = secondesTotal
heures = reste // 3600
reste = reste % 3600
minutes = reste // 60
secondes = reste % 60
print(heures, minutes, secondes)
Numéro 5
Problème 1
Le calcul est bon (68.98), les variables sont typées et les noms sont clairs. Un détail à noter: tauxTaxes est une valeur qui ne change jamais, tout comme TPS, TVQ et PI vus plus tôt. C'est donc une constante et elle devrait être écrite en majuscules: TAUX_TAXES.
TAUX_TAXES: float = 0.14975
prixOriginal: float = 80.0
pourcentageRabais: float = 0.25
montantRabais: float
prixApresRabais: float
prixFinal: float
montantRabais = prixOriginal * pourcentageRabais
prixApresRabais = prixOriginal - montantRabais
prixFinal = prixApresRabais * (1 + TAUX_TAXES)
print(prixFinal)
Problème 2 - Problèmes de normes
Le calcul est bon (22.86), mais les normes ne sont pas respectées:
PetTsont des noms d'une seule lettre, pas clairsTcarrécontient un accentimc_Valeurmélange snake_case et camelCase, et le nom devrait être plus clair (ex.imc)Resultatcommence par une majuscule (notation Pascal) et sa ligne (Resultat = imc_Valeur) est inutile,imc_Valeuraurait pu être directement retourné- Aucune variable n'a de type déclaré
Version corrigée:
poidsKg: float = 70
tailleM: float = 1.75
tailleCarree: float
imc: float
tailleCarree = tailleM * tailleM
imc = poidsKg / tailleCarree
print(imc)
Problème 3 - Erreur de calcul
Les normes sont bonnes (noms clairs en camelCase, types déclarés), mais le résultat est faux: 324000000.0 au lieu de 25.0.
Le bug est à la ligne vitesseMs = distanceM * tempsS: il faut diviser par le temps, pas multiplier. Une distance divisée par un temps donne une vitesse. Ici, la multiplication donne un nombre complètement absurde (des centaines de millions de m/s, plus vite que la lumière!).
Version corrigée:
vitesseKmh: float = 90.0
distanceM: float
tempsS: float
vitesseMs: float
distanceM = vitesseKmh * 1000
tempsS = 60 * 60
vitesseMs = distanceM / tempsS
print(vitesseMs)
Problème 4 - Complètement erroné
Normes ET calcul sont fautifs.
Normes:
p,x,ysont des noms d'une seule lettre, pas clairsPointesetChaquecommencent par une majuscule (notation Pascal), etChaquen'explique pas ce qu'il représente (nombre de pointes par personne)- Aucune variable n'a de type déclaré
result = yest une ligne inutile
Calcul: le résultat (2.875) est faux, la bonne réponse est 7.5. Le bug est à la ligne x = p + Chaque: il faut multiplier le nombre de personnes par le nombre de pointes par personne pour obtenir le total de pointes, pas additionner.
Version corrigée:
nbPersonnes: int = 20
pointesParPersonne: int = 3
pointesParPizza: int = 8
pointesTotales: int
nbPizzas: float
pointesTotales = nbPersonnes * pointesParPersonne
nbPizzas = pointesTotales / pointesParPizza
print(nbPizzas)