Gestion des commandes clients - Système de e-commerce
On modélise des commandes passées par des clients. Les données sont représentées par un dictionnaire :
commandes = {
"Amina": [("clavier", 1, 180), ("souris", 2, 60)],
"Youssef": [("ecran", 1, 1200), ("cable_hdmi", 3, 40)],
"Sara": [("souris", 1, 60), ("webcam", 1, 250), ("clavier", 1, 180)],
"Hamza": []
}
Chaque tuple (produit, quantite, prix_unitaire) représente une ligne de commande.
On dispose aussi d'un stock :
stock = {
"clavier": 5,
"souris": 12,
"ecran": 2,
"cable_hdmi": 20,
"webcam": 3,
"micro": 4
}
Écrire une fonction produits_client(commandes, nom) qui retourne la liste des produits commandés par nom (sans quantités ni prix).
Exemple
produits_client(commandes, "Sara")
["souris", "webcam", "clavier"]
def produits_client(commandes, nom):
if nom not in commandes:
return []
produits = []
for produit, qte, prix in commandes[nom]:
produits.append(produit)
return produits
Écrire une fonction montant_client(commandes, nom) qui calcule le montant total dépensé par nom.
Exemple
montant_client(commandes, "Amina")
300
def montant_client(commandes, nom):
if nom not in commandes:
return 0
total = 0
for produit, qte, prix in commandes[nom]:
total += qte * prix
return total
Écrire une fonction nombre_lignes_total(commandes) qui retourne le nombre total de lignes de commande (tous clients confondus).
Exemple
nombre_lignes_total(commandes)
7
def nombre_lignes_total(commandes):
total = 0
for nom, lignes in commandes.items():
total += len(lignes)
return total
Écrire une fonction client_plus_gros_panier(commandes) qui retourne le client ayant dépensé le plus. En cas d'égalité, retourner le nom lexicographiquement plus petit.
Exemple
client_plus_gros_panier(commandes)
"Youssef"
def client_plus_gros_panier(commandes):
max_montant = -1
meilleur_client = None
for client in commandes:
montant = montant_client(commandes, client)
if montant > max_montant:
max_montant = montant
meilleur_client = client
elif montant == max_montant:
if meilleur_client is None or client < meilleur_client:
meilleur_client = client
return meilleur_client
Écrire une fonction ajouter_ligne(commandes, nom, produit, qte, prix) qui ajoute une ligne de commande au client nom. Si le client n'existe pas, on le crée avec une liste contenant cette ligne.
def ajouter_ligne(commandes, nom, produit, qte, prix):
if nom not in commandes:
commandes[nom] = []
commandes[nom].append((produit, qte, prix))
# Modification en place, pas de return
Écrire une fonction supprimer_produit(commandes, nom, produit) qui supprime toutes les lignes de commande de nom correspondant à produit.
def supprimer_produit(commandes, nom, produit):
if nom not in commandes:
return
# Garder seulement les lignes qui ne correspondent pas au produit
commandes[nom] = [(p, q, pri) for p, q, pri in commandes[nom] if p != produit]
# Si la liste devient vide, on peut choisir de garder le client avec une liste vide
# Modification en place, pas de return
Écrire une fonction prix_min_client(commandes, nom) qui retourne le plus petit prix unitaire dans les commandes de nom. (Si le client n'a rien commandé, retourner None.)
Exemple
prix_min_client(commandes, "Youssef")
40
def prix_min_client(commandes, nom):
if nom not in commandes or not commandes[nom]:
return None
min_prix = float('inf')
for produit, qte, prix in commandes[nom]:
if prix < min_prix:
min_prix = prix
return min_prix
On appelle "client régulier" un client qui a commandé le plus grand nombre de lignes. Écrire client_regulier(commandes) (égalité → plus petit nom).
Exemple
client_regulier(commandes)
"Sara"
def client_regulier(commandes):
max_lignes = -1
meilleur_client = None
for client, lignes in commandes.items():
nb_lignes = len(lignes)
if nb_lignes > max_lignes:
max_lignes = nb_lignes
meilleur_client = client
elif nb_lignes == max_lignes:
if meilleur_client is None or client < meilleur_client:
meilleur_client = client
return meilleur_client
Écrire une fonction stock_total(stock) qui retourne la quantité totale en stock (somme des valeurs).
Exemple
stock_total(stock)
46
def stock_total(stock):
total = 0
for quantite in stock.values():
total += quantite
return total
Écrire une fonction produit_max_stock(stock) qui retourne le produit ayant la plus grande quantité en stock. En cas d'égalité, retourner le nom lexicographiquement plus petit.
Exemple
produit_max_stock(stock)
"cable_hdmi"
def produit_max_stock(stock):
max_qte = -1
meilleur_produit = None
for produit, quantite in stock.items():
if quantite > max_qte:
max_qte = quantite
meilleur_produit = produit
elif quantite == max_qte:
if meilleur_produit is None or produit < meilleur_produit:
meilleur_produit = produit
return meilleur_produit
Discussion (0)
Soyez le premier à laisser un commentaire !
Laisser un commentaire
Votre commentaire sera visible après modération.