Aller au contenu principal

Corrigé - Atelier 11 - Fonctions intégrées

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

Pratique​

Numéro 1​

ExpressionValeurExplication
round(2.5)2arrondi bancaire (vers le pair le plus proche)
round(0.5)0arrondi bancaire (vers le pair le plus proche)
int(-7 / 2)-3int tronque vers zéro
-7 // 2-4// arrondit vers le bas (moins l'infini)
math.floor(-3.5)-4math.floor arrondit vers le bas (moins l'infini)
bool("False")Truetoute chaîne non vide est truthy
math.fmod(-7, 3)-1.0math.fmod garde le signe du premier argument
-7 % 32% garde le signe du deuxième argument

Numéro 2​

import math

rayon: int
aire: float

rayon = int(input("Entrez le rayon du cercle: "))
aire = math.pi * rayon ** 2

print(f"L'aire est de: {aire:.2f}")

Numéro 3​

import math

combinaisons: int

combinaisons = math.comb(49, 6)

print(f"Vous avez 1 chance sur {combinaisons:,} de gagner le 6/49")

Pour le défi, le format :, utilise une virgule comme séparateur. Il faut la remplacer par une espace:

import math

combinaisons: int
affichage: str

combinaisons = math.comb(49, 6)
affichage = f"{combinaisons:,}".replace(",", " ")

print(f"Vous avez 1 chance sur {affichage} de gagner le 6/49")

Numéro 4​

texte: str

texte = input("Veuillez écrire quelque chose: ")
texte = texte.lower()
texte = texte.replace('e', 'o')
texte = texte.replace('a', '')
texte = texte.replace('r', 'rr')
texte = texte[0].upper() + texte[1:]

print(texte)

Numéro 5​

entree: str
partieNombre: str
nombre: int

entree = input("Veuillez saisir un nombre: ").strip()
partieNombre = entree.lstrip('-')

if len(partieNombre) == 0 or not partieNombre.isdigit():
print("Le nombre donné n'est pas valide")
else:
nombre = int(entree) * 2
print(f"Le nombre doublé est: {nombre}")

Numéro 6​

entree: str
partieNombre: str
nombre: int = 0

while nombre < 1 or nombre > 10:
entree = input("Entrez un nombre entre 1 et 10: ").strip()
partieNombre = entree.lstrip('-')

if len(partieNombre) == 0 or not partieNombre.isdigit():
print("Ce n'est pas un nombre entier valide")
nombre = 0
else:
nombre = int(entree)
if nombre < 1:
print("Le nombre doit être supérieur ou égal à 1")
elif nombre > 10:
print("Le nombre doit être inférieur ou égal à 10")

print(f"Vous avez entré: {nombre}")

Numéro 7​

Le bug de l'atelier 4 vient du fait que le total était calculé à partir des valeurs exactes (non arrondies) de la TPS et de la TVQ, ce qui donne 45.94$. Mais un client qui additionne les montants affichés (39.96 + 2.00 + 3.99) obtient 45.95$, un écart d'un cent avec le total affiché! Il faut arrondir la TPS et la TVQ avant de calculer le total, pour que le total affiché corresponde toujours à la somme des montants affichés:

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 = round(nbProduits * prixUnitaire, 2)
tps = round(sousTotal * 0.05, 2)
tvq = round(sousTotal * 0.09975, 2)
total = sousTotal + tps + tvq

print(f"Sous-total: {sousTotal:.2f}\nTPS: {tps:.2f}\nTVQ: {tvq:.2f}\nTotal: {total:.2f}")

Numéro 8​

import random

nombre: int
montant: float
booleen: bool
chaine: str = ""

nombre = random.randint(-10, 10)
montant = round(random.uniform(9.99, 19.99), 2)
booleen = bool(random.randint(0, 1))

for i in range(5):
chaine += chr(random.randint(65, 90))

print(f"Nombre: {nombre}\nMontant: {montant:.2f}$\nBooléen: {booleen}\nChaîne: {chaine}")

Analyse​

Numéro 9​

int(total / jours) tronque vers zéro, ce qui donne -2 au lieu de -3. Il faut utiliser la division entière //, qui arrondit vers le bas:

total: int = -18
jours: int = 7
moyenne: int

moyenne = total // jours

print("Moyenne:", moyenne)

Numéro 10​

Le code fonctionne correctement, mais la chaîne de if/elif/else peut être remplacée par max:

a: int = 15
b: int = 42
c: int = 8
plusGrand: int

plusGrand = max(a, b, c)

print("Le plus grand est:", plusGrand)

Numéro 11​

Le code fonctionne correctement, mais peut être remplacé par abs:

cible: int = 50
tentative: int = 37
ecart: int

ecart = abs(tentative - cible)

print("Écart:", ecart)