Résolue

Gestionnaire de listes en Python

# Fichiers # Python # Module json
import os
import json

class ListeCourses:
    def __init__(self, nom):
        self.nom = nom
        self.elements = []
        self.dossier_data = "data"

        # Créer le dossier data s'il n'existe pas
        if not os.path.exists(self.dossier_data):
            os.makedirs(self.dossier_data)

    def ajouter(self, element):
        """Ajoute un élément à la liste si c'est une string non vide et non existante"""
        if not isinstance(element, str):
            raise ValueError("Seules les chaînes de caractères sont acceptées")
        if not element.strip():
            raise ValueError("L'élément ne peut pas être vide")
        if element in self.elements:
            raise ValueError(f"{element} existe déjà dans la liste")
        self.elements.append(element)
        return f"{element} ajouté à {self.nom}"

    def retirer(self, element):
        """Retire un élément de la liste s'il existe"""
        if element not in self.elements:
            raise ValueError(f"{element} non trouvé dans la liste")
        self.elements.remove(element)
        return f"{element} retiré de {self.nom}"

    def afficher(self):
        """Affiche le contenu de la liste"""
        if not self.elements:
            return f"La liste {self.nom} est vide"
        return "\n".join([f"{i+1}. {item}" for i, item in enumerate(self.elements)])

    def vider(self):
        """Vide complètement la liste"""
        self.elements.clear()
        return f"Liste {self.nom} vidée"

    def sauvegarder(self):
        """Sauvegarde la liste dans un fichier JSON"""
        fichier = os.path.join(self.dossier_data, f"{self.nom.lower()}.json")
        data = {
            "nom": self.nom,
            "elements": self.elements
        }
        with open(fichier, 'w', encoding='utf-8') as f:
            json.dump(data, f, ensure_ascii=False, indent=4)
        return f"Liste {self.nom} sauvegardée dans {fichier}"

    def charger(self):
        """Charge la liste depuis le fichier JSON"""
        fichier = os.path.join(self.dossier_data, f"{self.nom.lower()}.json")
        if not os.path.exists(fichier):
            raise FileNotFoundError(f"Fichier {fichier} introuvable")

        with open(fichier, 'r', encoding='utf-8') as f:
            data = json.load(f)

        self.elements = data.get("elements", [])
        return f"Liste {self.nom} chargée depuis {fichier}"


def menu_principal():
    print("\n=== GESTIONNAIRE DE LISTES ===")
    nom_liste = input("Entrez le nom de votre liste : ").strip()
    if not nom_liste:
        print("Le nom ne peut pas être vide")
        return

    liste = ListeCourses(nom_liste)

    # Essayer de charger une liste existante
    try:
        print(liste.charger())
    except FileNotFoundError:
        print(f"Nouvelle liste '{nom_liste}' créée")

    while True:
        print("\n" + "="*30)
        print(f"LISTE : {liste.nom}")
        print("1. Ajouter un élément")
        print("2. Retirer un élément")
        print("3. Afficher la liste")
        print("4. Vider la liste")
        print("5. Sauvegarder la liste")
        print("6. Quitter")
        print("="*30)

        choix = input("Votre choix [1-6] : ").strip()

        if choix == "6":
            print("Au revoir !")
            break

        try:
            if choix == "1":
                element = input("Élément à ajouter : ").strip()
                print(liste.ajouter(element))
            elif choix == "2":
                element = input("Élément à retirer : ").strip()
                print(liste.retirer(element))
            elif choix == "3":
                print("\n" + liste.afficher())
            elif choix == "4":
                print(liste.vider())
            elif choix == "5":
                print(liste.sauvegarder())
            else:
                print("Choix invalide. Veuillez entrer un nombre entre 1 et 6")
        except Exception as e:
            print(f"Erreur : {e}")

if __name__ == "__main__":
    menu_principal()

Gabriel Trouvé

Mentor

Salut, bravo !

On pourrait :

  • Mettre en place une validation pour le nom de la liste

  • Utiliser un set :)

  • Découper la fonction qui affiche le menu (une fonction qui affiche, une qui gère les choix etc)

Gabriel

Inscris-toi

(c'est gratuit !)

Inscris-toi

Tu dois créer un compte pour participer aux discussions.

Créer un compte

Rechercher sur le site

Formulaire de contact

Inscris-toi à Docstring

Pour commencer ton apprentissage.

Tu as déjà un compte ? Connecte-toi.