Intermédiaire
🧠 Fondamentaux
20 XP
0 personnes ont réussi
E-commerce #5 : Classe Commande
Une commande représente un achat en cours de traitement. Elle a un client, des items (produit: quantite), et un statut qui evolue.
Le cycle de vie d'une commande : 1. Creee en statut 'en_attente' 2. On peut appliquer une reduction 3. Quand on confirme, le statut passe a 'confirmee' et les stocks sont deduits
Crée la classe Commande avec : - __init__(self, client, items) ou items est un dict {produit: quantite} - statut : initialement 'en_attente' - sous_total() : somme de prix * quantite - appliquer_reduction(stratégie) : applique une StratégieReduction et stocke dans self.total - confirmer() : passe le statut a 'confirmee' et deduit les stocks de chaque produit
Exemple : p = Produit('Livre', Decimal('10'), 5) c = Commande('Alice', {p: 3}) c.sous_total() # Decimal('30') c.confirmer() p.stock # 2
Tests (2/4)
Sous-total
from decimal import Decimal
p = Produit('A', Decimal('10'), 5)
c = Commande('Alice', {p: 3})
assert c.sous_total() == Decimal('30')
Statut initial
from decimal import Decimal
p = Produit('A', Decimal('10'), 5)
c = Commande('Bob', {p: 1})
assert c.statut == 'en_attente'
+ 0 tests cachés
Indices (3 disponibles)
Solution officielle
from decimal import Decimal
class Produit:
def __init__(self, nom, prix, stock):
self.nom = nom
self.prix = Decimal(str(prix))
self.stock = stock
class Commande:
def __init__(self, client, items):
self.client = client
self.items = items
self.statut = 'en_attente'
self.total = self.sous_total()
def sous_total(self):
return sum(p.prix * q for p, q in self.items.items())
def appliquer_reduction(self, stratégie):
self.total = stratégie.appliquer(self.sous_total())
def confirmer(self):
self.statut = 'confirmee'
for produit, quantite in self.items.items():
produit.stock -= quantite