Aller au contenu principal

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.

ExpressionValeurType / Erreur
i1 * i1100int
i1 * d3.3333...float
i1 + d10.3333...float
i1 / 0ErreurZeroDivisionError
i2 % 31int
i3 % 1000int
i4 - 100.00.0float
i1 / 33.3333...float, division réelle
i1 // 33int, division entière, tronque la partie décimale

Numéro 2​

Rappel des variables: x = 5, y = 10.

ExpressionValeur
(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).

ExpressionValeurType / Erreur
nb1 + 4 % nb1 * 3 - 611int
nb1 % 2 % 2 / 20.5float
nb1 % 2 % 2 / 2.00.5float
(nb2 / 2.5) == 1.0Truebool
test or (nb2 == (nb1 / 2))Truebool
nb1 / 22.5float
nb1 / 2.52.0float
nb1 + texte-TypeError: impossible d'additionner un int et un str
(nb1 * 3 % 3) == 3Falsebool
1 / (nb1 + nb2)0.1333...float
1 / (nb1 + 2)0.1428...float
(nb1 / nb2) != (nb1 / 2)Truebool
(nb1 > 2) and (nb1 < 5)Falsebool
test or (nb1 == 5) and (nb2 > 2)Truebool
nb1 / code1.6666...float
nb2 - test2.5float
nb1 / 51.0float

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:

  • P et T sont des noms d'une seule lettre, pas clairs
  • Tcarré contient un accent
  • imc_Valeur mélange snake_case et camelCase, et le nom devrait être plus clair (ex. imc)
  • Resultat commence par une majuscule (notation Pascal) et sa ligne (Resultat = imc_Valeur) est inutile, imc_Valeur aurait 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, y sont des noms d'une seule lettre, pas clairs
  • Pointes et Chaque commencent par une majuscule (notation Pascal), et Chaque n'explique pas ce qu'il représente (nombre de pointes par personne)
  • Aucune variable n'a de type déclaré
  • result = y est 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)