Partage
  • Partager sur Facebook
  • Partager sur Twitter

Fonction supprimer

    19 janvier 2015 à 22:12:06

    Bonsoir,

    j'ai un souci pour créer une fonction supprimer.

    je n'arrive pas à supprimer un dico dans une liste.

    si vous pouvez m'aider Ca serait sympa.

    merci par avance.

    • Partager sur Facebook
    • Partager sur Twitter
      19 janvier 2015 à 22:13:14

      # Creation des fonctions 
      import os
      import pickle
      import sys
      
      Monfichier = "dvdtheque.txt"
      liste=[]
      
      
           
      # Fonction -ajout- : permet d'ajouter un DVD
      def ajout(Monfichier,liste): 
          
          liste=charger(Monfichier,liste)
          liste=charger(Monfichier,liste) # rappel de la ligne car pas de retour lors de la 1ere creation d'un DVD     
      
          print (" -Ajout un DVD- ")
          nom = input ("Nom du film : ") 
          genre = input ("Genre du film : ") 
          annee = input ("Annee de sortie du film : ") 
          realisateur = input ("Realisateur du film : ") 
          film = {"nom": nom, "genre":genre, "annee":annee, "realisateur":realisateur}
          print ("") 
      
          liste.append(film)
          creer(Monfichier,liste)
      
      
      # Fonction -choixrech-: choix de la recherche du DVD
      def choixrech(Monfichier,liste):
          
          liste=charger(Monfichier,liste)
          
          print("Rechercher un DVD par nom-------------------------------tapez 1")
          print("Rechercher un DVD par genre-----------------------------tapez 2")
          print("Rechercher un DVD par année-----------------------------tapez 3")
          print("Rechercher un DVD par realisateur-----------------------tapez 4")
          choixrech = int (input("  -Votre choix- : "))
          
          #recherche par nom : permet de rechercher un DVD en fonction de son NOM
          if choixrech == 1:
              valeur = input("    Quel nom de DVD vous cherchez ?   ")
              nbresult = 0
              for i in range(0,len(liste)):
                  film = liste[i]
                  if film["nom"]== valeur:
                      print (liste[i])
                  
                      nbresult = nbresult +1
                      
                      
                      
              if nbresult==0:
                  print(" NOM de DVD inconnu! ")
                  choixonrech()
              else :
                  choixonrech()
              
          #recherche par genre
          elif choixrech == 2:
              valeur = input("    Quel genre de DVD vous cherchez?   ")
              nbresult = 0
              for i in range(0,len(liste)):
                  film = liste[i]
                  if film["genre"]==valeur:       
                      print (liste[i])
                      nbresult = nbresult +1
                     
      
              if nbresult==0:
                  print(" Genre de DVD inconnu! ")
                  choixonrech()
              else :
                  choixonrech()
                  
          #recherche par année
          elif choixrech == 3:
              valeur = input("    Quand est sortie votre DVD?   ")
              nbresult = 0
              for i in range(0,len(liste)):
                  film = liste[i]
                  if film["annee"]==valeur:       
                      print (liste[i])
                      nbresult = nbresult +1
                      
      
              if nbresult==0:
                  print(" Annee de sortie du DVD inconnu! ")
                  choixonrech()
              else :
                  choixonrech()
                 
          #recherche par realisateur
          elif choixrech == 4:
              valeur = input("    Quel réalisateur à fait le film?   ")
              nbresult = 0
              for i in range(0,len(liste)):
                  film = liste[i]
                  if film["realisateur"]==valeur:       
                      print (liste[i])
                      nbresult = nbresult +1
                      
      
              if nbresult==0:
                  print(" Realisateur inconnu! ")
                  choixonrech()
              else :
                  choixonrech()
                 
           #erreur de frappe
          else :
              print("   veuillez entrer un choix valide!    ")
              choixonrech()
              
          
      
      # Fonction -afficher- : permet d'afficher la liste de DVD
      def afficher(file): 
          print("liste de DVD")
          file=open (Monfichier, "rb")
          liste=pickle.load(file)
          print(liste)
          file.close()
      
      #fonction -supprimer- : permet de supprimer un DVD de la liste
      def supprimer(Monfichier,liste):
          
          liste=charger(Monfichier,liste)
          valeur = input("    Quel DVD vous voulez supprimer ?   ")
      
          for i in range(0,len(liste)):
              if liste[i]["nom"]== valeur:
                  print (liste[i])
                  liste.pop(i)
                  print ("Le DVD est supprimé")
          else :
                  choixon()
      
          
      # Fonction -menu- : définit le menu
      def menu():  
      
          print("************************************************")
          print("*                    MENU                      *")
          print("*           Que voulez-vous faire ?            *")
          print("************************************************")
          
          print("Ajouter un DVD---------------------------tapez 1")
          print("Rechercher un DVD------------------------tapez 2")
          print("Voir la liste des DVD--------------------tapez 3")
          print("Supprimer DVD----------------------------tapez 4")
          print("Quitter----------------------------------tapez 5")
      
          choix() 
          
      
        
        
      # Fonction -choix- : choix dans le menu
      def choix(): 
          choix = int (input("  -Votre choix- : "))
          
      
          #Ajout d'un DVD
          if choix == 1:
              ajout(Monfichier,liste) 
              choixon()
      
          #Rechercher un DVD
          elif choix == 2:
              choixrech(Monfichier,liste)
              choixonrech()
              
          #Liste des DVD
          elif choix == 3:
              print (afficher(Monfichier))
              choixon()
              
          #Supprimer un DVD
          elif choix == 4:
              supprimer(Monfichier,liste) 
              choixon()
              
          #Quitter le programme
          elif choix == 5:
              print(" Aurevoir et a la prochaine! ")
              sys.exit()
      
          #erreur de frappe
          else :
              print("   veuillez entrer un choix valide!    ")
              choixon()
              
              
      
        
      # Fonction -choixon- : donne la possibilité de relancer le menu ou de le quitter
      def choixon(): 
          choixon = input("retourner au menu ? (o/n) : ") 
          if choixon =="o": 
              menu() 
          else: 
              print ("  Aurevoir et à la prochaine! ")
              
      # Fonction -choixonrech- : donne la possibilité de relancer le menu rechercher ou de revenir au menu du programme
      def choixonrech(): 
          choixonrech = input("retourner au menu rechercher? (o/n) : ") 
          if choixonrech =="o": 
              choixrech(Monfichier,liste) 
          elif choixonrech =="n":
              menu()
          else: 
              menu()
      
      # Demarage du programme 
      
      
      film = None
      nom = None
      genre = None
      annee = None
      realisateur = None
      
      def charger (file,liste):
          try :
              fiche = open (file, "rb")
              liste=pickle.load(fiche)
              fiche.close()
              return liste
              
          except :
              creer (file,liste)
              
      def creer (file,liste):
              fiche = open (file, "wb")
              pickle.dump(liste,fiche)
              fiche.close()
      
      
      print("************************************************")
      print("*                 DVD THEQUE                   *")
      print("************************************************")
      
        
      menu()
      • Partager sur Facebook
      • Partager sur Twitter
        20 janvier 2015 à 7:17:57

        Salut

        J'ai pas regardé ton code sachant qu'il s'agit juste d'une suppression basique.

        >>> liste = [int(), str(), str(), dict(), list()]
        >>> liste
        [0, '', '', {}, []]
        >>> help(list.pop)
        Help on method_descriptor:
        
        pop(...)
            L.pop([index]) -> item -- remove and return item at index (default last).
            Raises IndexError if list is empty or index is out of range.
        
        >>> liste.pop(3)
        {}
        >>> liste
        [0, '', '', []]

        J'espère que c'est bon. :)

        • Partager sur Facebook
        • Partager sur Twitter
          20 janvier 2015 à 10:56:31

              for i in range(0,len(liste)): 
                  if liste[i]["nom"]== valeur: 
                      print (liste[i]) 
                      liste.pop(i) 
                      print ("Le DVD est supprimé") 
              else : 
                      choixon() 
           

          -
          Edité par Oliv29Breton 20 janvier 2015 à 10:57:00

          • Partager sur Facebook
          • Partager sur Twitter
            20 janvier 2015 à 10:57:09

            Bonjour,

            Merci pour les infos mais désolé de vous embeter encore, je ne trouve pas mon erreur dans le code ci-desssus.

            Je veux supprimer entièrement mon dico de la liste mais cela ne fonctionne pas.

            • Partager sur Facebook
            • Partager sur Twitter
              20 janvier 2015 à 11:39:05

              Voici un petit exemple:

              def supprimer(liste):
                  valeur = input("Quel DVD vous voulez supprimer ?")
                  liste[:] = [dvd for dvd in liste if dvd['nom'] != valeur]
                  print ("Le DVD est supprimé")
              
              
              liste = [   {'nom': 'abc', 'titre': 'titre1'},
                          {'nom': 'def', 'titre': 'titre2'},
                          {'nom': 'ghi', 'titre': 'titre3'}]
              
              supprimer(liste)
              print(liste)
              
              • Partager sur Facebook
              • Partager sur Twitter
                20 janvier 2015 à 11:57:59

                Merci encore pour la réponse.

                Je viens de tester mais malheureusement le dico est bien supprimé mais cela ne le garde pas en mémoire.

                Lorsque que j'affiche ma liste de dvd mon dico revient.

                Si vous pouvez me donner l'astuce :-) 

                • Partager sur Facebook
                • Partager sur Twitter
                  20 janvier 2015 à 12:07:02

                  Dans mon exemple?? Tu veux dire quoi par

                  le dico est bien supprimé mais cela ne le garde pas en mémoire.

                  • Partager sur Facebook
                  • Partager sur Twitter
                    20 janvier 2015 à 12:15:34

                    Quand j'affiche ma liste de DVD j'ai bien mes 4 DVD qui apparaissent comme ci-dessous :

                    [{'realisateur': 'eza', 'annee': '2à10', 'genre': 'action', 'nom': 'speed'}, {'realisateur': 'poi', 'annee': '2000', 'genre': 'dessin', 'nom': 'tintin'}, {'realisateur': 'tre', 'annee': '2012', 'genre': 'action', 'nom': 'speed 2'}, {'realisateur': 'eza', 'annee': '2010', 'genre': 'action', 'nom': 'speed 3'}]

                    Maintenant quand je lance la fonction supprimer et que je demande de supprimer le dico avec comme non de DVD "tintin" (dans cette exemple) cela fonctionne bien comme ci-dessous : (plus que 3 Dico)

                    [{'realisateur': 'eza', 'annee': '2à10', 'genre': 'action', 'nom': 'speed'}, {'realisateur': 'tre', 'annee': '2012', 'genre': 'action', 'nom': 'speed 2'}, {'realisateur': 'eza', 'annee': '2010', 'genre': 'action', 'nom': 'speed 3'}]

                    Par contre quand je relance la fonction afficher les 4 dico sont toujours présent et "tintin" réapparait :

                    [{'realisateur': 'eza', 'annee': '2à10', 'genre': 'action', 'nom': 'speed'}, {'realisateur': 'poi', 'annee': '2000', 'genre': 'dessin', 'nom': 'tintin'}, {'realisateur': 'tre', 'annee': '2012', 'genre': 'action', 'nom': 'speed 2'}, {'realisateur': 'eza', 'annee': '2010', 'genre': 'action', 'nom': 'speed 3'}]

                    • Partager sur Facebook
                    • Partager sur Twitter
                      20 janvier 2015 à 12:24:39

                      C'est parce que ta fonction afficher affiche le contenu du fichier dvdtheque.txt. La fonction supprimer ne fait que la suppression dans la variable liste.

                      Tu vas devoir repenser ton programme. Soit tu sauvegardes de suite dans le fichier après suppression. Soit tu ouvres le fichier une seule fois, fais toutes les opérations en mémoire (afficher, ajouter, supprimer, ...) et tu sauvegarde en quittant.

                      • Partager sur Facebook
                      • Partager sur Twitter
                        20 janvier 2015 à 13:13:08

                        Aurais tu un exemple de fonction save ?

                        • Partager sur Facebook
                        • Partager sur Twitter
                          20 janvier 2015 à 14:41:01

                          Ca me permet de créer un fichier txt si celui la n'est pas créer.
                          • Partager sur Facebook
                          • Partager sur Twitter
                            20 janvier 2015 à 15:20:04

                            Pas tout à fait. Ca permet d'ouvrir un fichier en écriture et de sérialiser le contenu de ta liste avec le module pickle. Que le fichier existe ou pas ne change rien (et donc permet de sauvegarder ta liste dans ce fichier...)

                            -
                            Edité par Dan737 20 janvier 2015 à 15:20:42

                            • Partager sur Facebook
                            • Partager sur Twitter
                              20 janvier 2015 à 15:33:28

                              Vous me conseillez quoi pour m'en sortir au mieux ?
                              • Partager sur Facebook
                              • Partager sur Twitter
                                20 janvier 2015 à 16:09:58

                                Moi je pense qu'il est préférable de d'abord charger les données du fichier s'il existe avant de montrer quoi que ce soit à l'utilisateur. Ensuite on entre dans une boucle infinie dans laquelle on propose le menu principal. Selon l'option choisie par l'utilisateur, on appelle la fonction ad-hoc (ajouter, afficher, supprimer, etc). Quand l'utilisateur demande de quitter on sauvegarde notre travail dans le fichier.

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  23 janvier 2015 à 8:20:44

                                  Bonjour,

                                  C'est bon mon programme fonctionne par contre j'ai améliorer la mise en page. Pouvez vous me dire ce que je dois écrire pour remettre chaque Dico à la ligne car le /n ne fonctionne pas ou je le mets peut etre pas au bon endroit.

                                  [{'annee': '2000', 'nom': 'tintin', 'realisateur': 'tre', 'genre': 'dessin'}, {'annee': 'tre', 'nom': 'tre', 'realisateur': 'tre', 'genre': 'tre'}, {'annee': '2013', 'nom': 'speed', 'realisateur': 'eza', 'genre': 'action'}]

                                  Meric pour votre aide.

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    23 janvier 2015 à 9:37:28

                                    Tu souhaites que chaque dico soit afficher sur une ligne séparée ? Dans ce cas là une simple boucle for fait l'affaire. Par la suite tu pourrais t'intéresser à la gestion des erreurs et des exceptions, je pense notamment à ta fonction choix, si par exemple l'utilisation ne donne pas un nombre.
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      23 janvier 2015 à 11:38:30

                                      Je viens de faire un for mais voilà ce que ca m'affiche pour mes 2 dico :

                                      None,None,None,None

                                      None,None,None,None

                                      Voici mon prog :

                                      def afficher(file): 
                                          print("liste de DVD")
                                          file=open (Monfichier, "rb")
                                          liste=pickle.load(file)
                                          for l in liste:
                                              l=nom,genre,annee,realisateur
                                              print("{0},{1},{2},{3}".format(nom,genre,annee,realisateur))
                                          file.close()
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        23 janvier 2015 à 11:50:20

                                        Salut

                                        Tu n'as pas oublier par hasard le Unpickler ?

                                        pkl = pickle.Unpickler(fichier)
                                        donnees = pkl.load()



                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          23 janvier 2015 à 12:03:56

                                          Je ne vois pas pourquoi je devrais rajouter Unpickel et surtout ou.

                                          Mon programme fonctionne mais j'aimerai juste mettre mes Dico à la ligne. Désolé je ne suis pas encore au top niveau programmation.

                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            23 janvier 2015 à 12:16:05

                                            Ben faut croire que moi non plus apparemment vu que j'étais sûr qu'il fallait Unpickler :D

                                            Je vais pas continuer je crois, car soit toi et d'autres personnes vous faites tous la même faute, soit mon cerveau fonctionne pas bien aujourd'hui et je vois des fautes là où y en a pas. Désolé ^^

                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              23 janvier 2015 à 12:56:04

                                              Je suis super surpris, peut être que c'est dû à python 3 mais pour moi ce code devrait te donner une erreur, car tes variables nom, genre, realisateur et années ne sont pas définies. Si tu fais ce code, qu'est ce que ça te donne ?

                                              for l in liste:
                                                  print("{0},{1},{2},{3}".format(l["nom"], l["genre"], l["annee"], l["realisateur"]))
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                              Anonyme
                                                23 janvier 2015 à 13:43:45

                                                def load_list(filename):
                                                    with open(filename, 'rb') as file:
                                                        return pickle.load(file)
                                                
                                                def save_list(filename, ls):
                                                    with open(filename, 'wb') as file:
                                                        return pickle.dump(ls, file)
                                                
                                                def print_list(ls):
                                                    for d in ls:
                                                        print('{nom}, {genre}, {realisateur}, {annee}'.format(**d))
                                                
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  23 janvier 2015 à 14:23:12

                                                  Voici ce que ca donne. Il me faut mettre maintenant une tabulation est ca sera bon.

                                                  Après il y a écrit NONE à la fin comment peut-on faire pour le supprimer ?

                                                  Nom : tre, Genre : tre, Annee : tre, Realisateur : tre

                                                  Nom : speed, Genre : action, Annee : 2013, Realisateur : eza

                                                  None

                                                  • Partager sur Facebook
                                                  • Partager sur Twitter

                                                  Fonction supprimer

                                                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                  • Editeur
                                                  • Markdown