Exercice terminé
Alors pour ma part, je pense que j'ai mal compris l'exercice. Cela m'a forcé à apprendre des notions que nous n'avons pas encore vu jusqu'ici que j'ai trouvé dans la doc et en cherchant sur internet.
J'ai énormément galéré à terminer l'exo car c'était beaucoup trop dur mais quel plaisir quand j'ai vu que tout fonctionnait !
# Créer la liste de départ
liste_de_course = {}
# Fonction 1. ajouter
def ajouter_course(ajout):
if ajout in liste_de_course:
liste_de_course[ajout] += 1
print(f"+1 a été rajouté à l'élément {ajout}\n")
else:
liste_de_course[ajout] = 1
print(f"L'élément {ajout} a bien été ajouté à la liste de course. \n")
# Fonction 2. supprimer
def supprimer_course(suppr):
if suppr in liste_de_course:
if liste_de_course[suppr] == 1:
del liste_de_course[suppr]
print(f"{suppr} a bien été retiré de la liste")
elif liste_de_course[suppr] > 1:
liste_de_course[suppr] -= 1
print(f"Nous avons retiré 1 à l'élément {suppr}")
else:
print("L'élément n'est pas dans la liste")
# Fonction 3. Afficher
def afficher_liste():
for aliment, nombre in liste_de_course.items():
print(f"{aliment} x{nombre}")
# Fonction 4. Vider
def vider_liste():
liste_de_course.clear()
# Boucle d'ajout
main_menu = True
while main_menu == True:
try:
menu = int(input("Tapez le chiffre correspondant au menu : \n 1. Ajouter \n 2. Supprimer \n 3. Afficher \n 4. Vider \n 5. Quitter \n Quel est votre choix ? : "))
except ValueError:
print("\nSaisie incorrect. Veuillez choisir un chiffre entre 1 et 5. \n")
continue
if menu == 1:
ajout = input("\nQuel article souhaitez-vous ajouter ? ")
ajouter_course(ajout)
elif menu == 2:
suppr = input("\nQuel élément voulez-vous supprimer ?")
supprimer_course(suppr)
elif menu == 3:
afficher_liste()
elif menu == 4:
vider_liste()
print("\nLa liste a bien été vidée complètement.")
elif menu == 5:
exit()
else:
print("\nCe chiffre est invalide. Veuillez rentrer une valeur entre 1 et 5. \n")
continue
Salut Alan !
Utiliser un dictionnaire était effectivement une bonne idée pour gérer les quantités, bien vu !
Tu aurais pu également le faire avec une liste, mais cela aurait été plus complexe et moins intuitif.
Tu aurais dû adopter une approche légèrement différente. Par exemple, tu pourrais avoir une liste de tuples, où chaque tuple contient l'élément et sa quantité.
Quelque chose comme ça :
liste_de_course = []
# Fonction 1. ajouter
def ajouter_course(ajout):
for item in liste_de_course:
if item[0] == ajout:
index = liste_de_course.index(item)
liste_de_course[index] = (ajout, item[1] + 1)
print(f"+1 a été rajouté à l'élément {ajout}\n")
return
liste_de_course.append((ajout, 1))
print(f"L'élément {ajout} a bien été ajouté à la liste de course. \n")
# Fonction 2. supprimer
def supprimer_course(suppr):
for item in liste_de_course:
if item[0] == suppr:
index = liste_de_course.index(item)
if item[1] == 1:
del liste_de_course[index]
print(f"{suppr} a bien été retiré de la liste")
else:
liste_de_course[index] = (suppr, item[1] - 1)
print(f"Nous avons retiré 1 à l'élément {suppr}")
return
print("L'élément n'est pas dans la liste")
# Fonction 3. Afficher
def afficher_liste():
for aliment, nombre in liste_de_course:
print(f"{aliment} x{nombre}")
# Fonction 4. Vider
def vider_liste():
liste_de_course.clear()
# Boucle d'ajout
main_menu = True
while main_menu:
try:
menu = int(input("Tapez le chiffre correspondant au menu : \n 1. Ajouter \n 2. Supprimer \n 3. Afficher \n 4. Vider \n 5. Quitter \n Quel est votre choix ? : "))
except ValueError:
print("\nSaisie incorrect. Veuillez choisir un chiffre entre 1 et 5.\n")
continue
if menu == 1:
ajout = input("\nQuel article souhaitez-vous ajouter ? ")
ajouter_course(ajout)
elif menu == 2:
suppr = input("\nQuel élément voulez-vous supprimer ?")
supprimer_course(suppr)
elif menu == 3:
afficher_liste()
elif menu == 4:
vider_liste()
print("\nLa liste a bien été vidée complètement.")
elif menu == 5:
exit()
else:
print("\nCe chiffre est invalide. Veuillez rentrer une valeur entre 1 et 5. \n")
Ça fonctionnerait aussi, mais comme tu peux le voir, cela demande plus de gestion de recherche et de manipulation d'index, ce qui peut devenir fastidieux surtout avec des listes très longues.
Pour d'autres améliorations dans ton code :
-
Pour rendre ton script plus robuste, tu pourrais ajouter des vérifications sur les entrées utilisateur pour t'assurer qu'elles ne sont pas vides ou qu'elles contiennent des caractères invalides.
-
Utiliser
exit()pour quitter le programme est correct mais tu pourrais opter pourmain_menu = Falsepour sortir proprement de la boucle avant d'atteindre la fin du script.
Ton code initial est déjà très bien, surtout pour cet exercice, donc félicitations encore !
Inscris-toi
(c'est gratuit !)
Tu dois créer un compte pour participer aux discussions.
Créer un compte