Corrigé - Atelier 11 - Fonctions intégrées
Essayez de faire l'atelier avant de consulter ce corrigé.
Pratique
Numéro 1
| Expression | Valeur | Explication |
|---|---|---|
round(2.5) | 2 | arrondi bancaire (vers le pair le plus proche) |
round(0.5) | 0 | arrondi bancaire (vers le pair le plus proche) |
int(-7 / 2) | -3 | int tronque vers zéro |
-7 // 2 | -4 | // arrondit vers le bas (moins l'infini) |
math.floor(-3.5) | -4 | math.floor arrondit vers le bas (moins l'infini) |
bool("False") | True | toute chaîne non vide est truthy |
math.fmod(-7, 3) | -1.0 | math.fmod garde le signe du premier argument |
-7 % 3 | 2 | % 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)