Exercices Projets guidés E-commerce #13 : Assemblage final
🎉

Bravo!

Avancé 🧠 Fondamentaux 30 XP 0 personnes ont réussi

E-commerce #13 : Assemblage final

C'est le moment d'assembler toutes les pieces ! On crée une fonction qui orchestre tout le processus de commande.

La fonction recoit un client, un dictionnaire d'items et un coupon optionnel. Elle calcule le sous-total, applique le coupon si present, et retourne un resume de la commande.

Les items sont un dict {nom_produit: (prix, quantite)}. Le sous-total est la somme de prix * quantite pour chaque item.

Crée une fonction traiter_commande(client, panier_items, coupon=None) qui retourne un dictionnaire avec :
- 'client' : le nom du client
- 'sous_total' : Decimal (somme brute)
- 'total' : Decimal (apres reduction si coupon)
- 'reduction' : Decimal (sous_total - total)
- 'statut' : 'confirmee'

Exemple :
résultat = traiter_commande(
'Alice',
{'Livre': (Decimal('30'), 2), 'Stylo': (Decimal('5'), 3)},
coupon=Coupon('PROMO10', 'pourcentage', 10, 5)
)
résultat['sous_total'] # Decimal('75')
résultat['total'] # Decimal('67.5')
résultat['reduction'] # Decimal('7.5')

Tests (2/4)

Sans coupon
from decimal import Decimal
r = traiter_commande('Alice', {'Livre': (Decimal('30'), 2)})
assert r['sous_total'] == Decimal('60')
assert r['total'] == Decimal('60')
assert r['statut'] == 'confirmee'
Avec coupon pourcentage
from decimal import Decimal
c = Coupon('P10', 'pourcentage', 10, 5)
r = traiter_commande('Bob', {'Stylo': (Decimal('10'), 5)}, coupon=c)
assert r['total'] == Decimal('45')
assert r['reduction'] == Decimal('5')

+ 0 tests cachés

Indices (3 disponibles)

solution.py