IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Gestion d'un fichier - Carnet d'adresses BASIQUE


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 64
    Par défaut Gestion d'un fichier - Carnet d'adresses BASIQUE
    Bonjour à tous,

    Me revoilà encore avec un petit programme à réaliser et je bloques à nouveau.

    Je dois réaliser un genre de carnet d'adresses assez basique avec lequel je peux faire les choses suivantes :

    - ajouter un nouveau membre (nom, prénom, adresse, etc...)
    - lister les membres enregistrés => afficher tous les membres, filtrer sur la première lettre du nom de famille, filtrer sur le sexe et filtrer sur le code postal.
    - accéder directement à un membre en entrant son nom et son prénom

    J'ai biensur déjà travaillé un peu dessu mais j'ai quelques soucis..

    Voilà mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
    # -*- coding: utf-8 -*-
     
    # Fonctions :
     
    def ajoutMembre():
        while 1:
            nom = raw_input("Entrez vôtre nom : ")
            prenom = raw_input("Entrez vôtre prénom : ")
            sexe = raw_input("Entrez vôtre sexe (M ou F) : ")
            dateNaissance = raw_input("Entrez vôtre date de naissance (JJ/MM/AAAA) : ")
            adresseN = raw_input("Entrez vôtre adresse et n° : ")
            codePostal = raw_input("Entrez vôtre code postal : ")
            localite = raw_input("Entrez vôtre locatitée : ")
            nGSM = raw_input("Entrez vôtre n° de GSM : ")
            if nom =="":
                print "Membre ajouté avec succès !"
                break
            else:
                return [nom, prenom, sexe, dateNaissance, adresseN, codePostal, localite, nGSM]
        oFichier.close()
     
    def enregistrerMembre(liste):
        i = 0
        while i < len(liste):
            oFichier.write(liste[i] + "#")
            i = i + 1
        oFichier.write("\n")
     
    # Programme principal :
     
    print "Bienvenue au Club de Sport"
     
    while 1:
        print " Que désirez-vous ? : \n\
        1 - Ajouter un membre.\n\
        2 - Modifier un membre.\n\
        3 - Afficher un membre.\n\
        4 - Quitter.\n "
        choix=raw_input("Vôtre choix ? : ")
     
        if choix=="1":
            nomFichier = raw_input('Nommez le fichier des membres : ')
            oFichier = open(nomFichier, 'a')
            while 1:
                listeMembres = ajoutMembre()
                if listeMembres == []:
                    break
                enregistrerMembre(listeMembres)
            oFichier.close()
     
        elif choix=="2":
            modifMembre(membres)
     
        elif choix=="3":
            afficheMembre(membres)
     
        elif choix=="4":
            print "Au revoir !"
            break
     
        else:
            print "1, 2, 3 ou 4 uniquement s.v.p !!"
    Un grand merci à tous auparavant =D

  2. #2
    Membre éclairé
    Profil pro
    maçon
    Inscrit en
    Novembre 2004
    Messages
    286
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : maçon

    Informations forums :
    Inscription : Novembre 2004
    Messages : 286
    Par défaut
    bonjour,
    Votre question est plus que vague.
    Où avez vous un problème ?
    Dans la recherche , dans l'accès. ?
    Un piste ,peut être ,pour la recherche lire le fichier de manière sequentielle,
    utiliser les regex (module re) afin d'analyser ce que vous cherchez.
    Plus malin peut être lors de la lecture du fichier stocké les infos dans un dictionnaire afin de rendre les recherches plus aisée
    exemple de dico pour chaque enregistrement de votre fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    DicoCarnet = {}
    #ligne 1
    DicoCarnet['Nom']='Machine'
    DicoCarnet['Prenom']='Bidule'
    DicoCarnet['Age']=24
    #Ligne 2
    DicoCarnet['Nom']='Truc'
    DicoCarnet['Prenom']='Chose'
    DicoCarnet['Age']=42
    Pensez aussi a faire une classe "Membre" le code sera plus facile à gérer

    voilà
    bonne soirée

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 64
    Par défaut
    C'est bien beau tout ça mais je ne connais pas encore les classes et ce que vous avez essayé de m'expliquer.. Le problème semble venir de la fonction enregistrerMembre mais je ne suis pas sûr..

    Merci tout de même.

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par tonykart13 Voir le message
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    def ajoutMembre():
        while 1:
            nom = raw_input("Entrez vôtre nom : ")
            prenom = raw_input("Entrez vôtre prénom : ")
            sexe = raw_input("Entrez vôtre sexe (M ou F) : ")
            dateNaissance = raw_input("Entrez vôtre date de naissance (JJ/MM/AAAA) : ")
            adresseN = raw_input("Entrez vôtre adresse et n° : ")
            codePostal = raw_input("Entrez vôtre code postal : ")
            localite = raw_input("Entrez vôtre locatitée : ")
            nGSM = raw_input("Entrez vôtre n° de GSM : ")
            if nom =="":
                print "Membre ajouté avec succès !"
                break
            else:
                return [nom, prenom, sexe, dateNaissance, adresseN, codePostal, localite, nGSM]
        oFichier.close()
    # ajoutMembre()
    Salut

    Je pige que dalle à cette fonction. Si le nom est vide, alors il a été ajouté avec succès ? Et tu quittes la fonction sans rien renvoyer ?? (il va être content l'appelant !!!) Et tu fermes le fichier (dont la variable n'est pas connue de la fonction soit dit en passant !!!) ???
    Bref avant de coder, il faut commencer par établir un schéma directeur du travail qui sera accompli par chaque fonction...

    PS: Pas d'accent à "votre"... => http://ameliorersonfrancais.com/gram...ne/votre-votre

    Citation Envoyé par tonykart13 Voir le message
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    i = 0
    while i < len(liste):
        oFichier.write(liste[i] + "#")
        i = i + 1
    oFichier.write("\n")
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for i in xrange(len(liste)):
        oFichier.write(liste[i] + "#")
    oFichier.write("\n")

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for l in liste: oFichier.write(l + "#")
    oFichier.write("\n")

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    oFichier.write("#".join(liste) + "\n")
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 64
    Par défaut
    Merci pour la réponse.

    Voilà donc en fait je précises un peu le problème que je rencontres..

    Quand je rentres les données d'un membres, donc nom, prénom, adresse, etc... et que ensuite je laisses quelque chose vide il devrait quitter mais il ne le fait pas...

    Il m'affiche cette erreur : TypeError: 'NoneType' object is not iterable

    PS: quelqu'un a essayé mon code pour voir ce que je veux dire ? c'est bien beau d'expliquer mais si vous ne comprenez pas ce que je veux dire vous ne saurez pas m'aider..

    Merci !

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par tonykart13 Voir le message
    Merci pour la réponse.

    Voilà donc en fait je précises un peu le problème que je rencontres..

    Quand je rentres les données d'un membres, donc nom, prénom, adresse, etc... et que ensuite je laisses quelque chose vide il devrait quitter mais il ne le fait pas...

    Il m'affiche cette erreur : TypeError: 'NoneType' object is not iterable
    Code Python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    listeMembres = ajoutMembre()
    if listeMembres == []:
        break
    enregistrerMembre(listeMembres)
    Parce que la fonction ajoutMembre() dont j'ai parlé dans mon précédent message ne renvoie rien donc la variable listeMembres contient "None" et tu t'en serais aperçu tout seul si tu avais inséré ne serait-ce qu'un simple "print" à l'endroit où se produit l'erreur !!!

    Citation Envoyé par tonykart13 Voir le message
    Le problème semble venir de la fonction enregistrerMembre mais je ne suis pas sûr..
    Ce n'est pas parce que l'erreur se produit dans une fonction X que c'est la fonction X la responsable (surtout quand la fonction X travaille à partir de données arrivant de l'extérieur...)

    Citation Envoyé par tonykart13 Voir le message
    PS: quelqu'un a essayé mon code pour voir ce que je veux dire ? c'est bien beau d'expliquer mais si vous ne comprenez pas ce que je veux dire vous ne saurez pas m'aider..
    Ouais t'as raison, on est des grosses billes en Python et on est incapables de lire un code de 40 lignes et de voir ce qu'il fait...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 64
    Par défaut
    Voilà.. Mon programme fonctionne en partie

    Je sais maintenant ajouter un membre et il est bien enregistré dans le fichier de la manière suivante :

    Nom#Prénom#Sexe#Date de naissance#Adresse#Code postal#Localité#Téléphone#

    Maintenant j'aimerais bien créer une fonction pour pouvoir afficher un membre grâce à son nom et prénom, de pouvoirs les afficher par code postal, etc..

    Voilà mon code fonctionnel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
     
    # -*- coding: utf-8 -*-
     
    # Fonctions :
     
    def ajouterMembre():
        while 1:
            nom = raw_input("Entrez vôtre nom : ")
            if nom == "":
                "Membre ajouté avec succès !"
                return []
            prenom = raw_input("Entrez vôtre prénom : ")
            sexe = raw_input("Entrez vôtre sexe (M ou F) : ")
            dateNaissance = raw_input("Entrez vôtre date de naissance (JJ/MM/AAAA) : ")
            adresseN = raw_input("Entrez vôtre adresse et n° : ")
            codePostal = raw_input("Entrez vôtre code postal : ")
            localite = raw_input("Entrez vôtre locatitée : ")
            nGSM = raw_input("Entrez vôtre n° de GSM : ")
     
            ajout=raw_input("Pour ajouter le membre appuyer sur ENTER.")
            if ajout == "":
                return [nom, prenom, sexe, dateNaissance, adresseN, codePostal, localite, nGSM]
            break
     
     
    def enregistrerMembre(liste):
        n = 0
        while n < len(liste):
            oFichier.write(liste[n] + "#")
            n = n + 1
        oFichier.write("\n")
     
    # Programme principal :
     
    print "Bienvenue au Club de Sport"
     
    while 1:
        print " Que désirez-vous ? : \n\
        1 - Ajouter un membre.\n\
        2 - Modifier un membre.\n\
        3 - Afficher un membre.\n\
        4 - Quitter.\n "
        choix=raw_input("Vôtre choix ? : ")
     
        if choix=="1":
            nomFichier = raw_input('Nom du fichier destinataire : ')
            oFichier = open(nomFichier, 'a')
            while 1:
                listeMembres = ajouterMembre()
                if listeMembres == []:
                    break
                enregistrerMembre(listeMembres)
            oFichier.close()
     
        elif choix=="2":
            modifMembre(membres)
     
        elif choix=="3":
            afficheMembre(membres)
     
        elif choix=="4":
            print "Au revoir !"
            break
     
        else:
            print "1, 2, 3 ou 4 uniquement s.v.p !!"

  8. #8
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par tonykart13 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    # -*- coding: utf-8 -*-
    
    # Fonctions :
    
    def ajouterMembre():
        while 1:
            nom = raw_input("Entrez vôtre nom : ")
            if nom == "":
                "Membre ajouté avec succès !"
                return []
            prenom = raw_input("Entrez vôtre prénom : ")
            sexe = raw_input("Entrez vôtre sexe (M ou F) : ")
            dateNaissance = raw_input("Entrez vôtre date de naissance (JJ/MM/AAAA) : ")
            adresseN = raw_input("Entrez vôtre adresse et n° : ")
            codePostal = raw_input("Entrez vôtre code postal : ")
            localite = raw_input("Entrez vôtre locatitée : ")
            nGSM = raw_input("Entrez vôtre n° de GSM : ")
            
            ajout=raw_input("Pour ajouter le membre appuyer sur ENTER.")
            if ajout == "":
                return [nom, prenom, sexe, dateNaissance, adresseN, codePostal, localite, nGSM]
            break
                
    
    # Programme principal :
    
    print "Bienvenue au Club de Sport"
    
    while 1:
        print " Que désirez-vous ? : \n\
        1 - Ajouter un membre.\n\
        2 - Modifier un membre.\n\
        3 - Afficher un membre.\n\
        4 - Quitter.\n "
        choix=raw_input("Vôtre choix ? : ")
    
        if choix=="1":
            nomFichier = raw_input('Nom du fichier destinataire : ')
            oFichier = open(nomFichier, 'a')
            while 1:
                listeMembres = ajouterMembre()
                if listeMembres == []:
                    break
                enregistrerMembre(listeMembres)
            oFichier.close()
    
        elif choix=="2":
            modifMembre(membres)
    
        elif choix=="3":
            afficheMembre(membres)
    
        elif choix=="4":
            print "Au revoir !"
            break
    
        else:
            print "1, 2, 3 ou 4 uniquement s.v.p !!"
    T'es quand-même compliqué dans ta tête. Tu as une variable qui contient "None" quand la fonction "AjouterMembre" revient à vide et au lieu d'aller au plus simple et de tester "None", ben non tu forces la fonction à renvoyer une liste vide pour tester la liste vide.

    Citation Envoyé par tonykart13 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ajout=raw_input("Pour ajouter le membre appuyer sur ENTER.")
    if ajout == "":
            return [nom, prenom, sexe, dateNaissance, adresseN, codePostal, localite, nGSM]
    break
    Et que se passe t-il si on tape "toto" à cet endroit du code ???


    Citation Envoyé par tonykart13 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    n = 0
    while n < len(liste):
    	oFichier.write(liste[n] + "#")
    	n = n + 1
    oFichier.write("\n")
    Ouais, je me demande bien pourquoi je me suis enquiquiné à te montrer diverses solutions de plus en plus simples pour remplacer cette boucle. Si tu n'as pas envie de réfléchir à ce qu'on te montre, c'est pas la peine de venir sur un forum !!!

    Citation Envoyé par tonykart13 Voir le message
    Maintenant j'aimerais bien créer une fonction pour pouvoir afficher un membre grâce à son nom et prénom, de pouvoirs les afficher par code postal, etc..
    Ben tu ouvres le fichier, tu le lis, tu en extrais les infos et quand l'info X (nom, prenom, cp) correspond à l'info X demandée tu affiches la ligne

    Et grâce à *args et **kwargs tu peux écrire une fonction générique qui détectera toute seule l'info X que tu lui demandes
    Exemple
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    def cherche(
    		*args,				# Liste arguments
    		**kwargs):			# Association arguments
     
    	for (pos, elem) in enumerate(("nom", "prenom", "sexe", "naissance", "adresse", "cp", "localite", "telephone")):
    		if elem in kwargs.keys(): break
    	# for
     
    	# Ici, pos contient la position de l'élément demandé (0 pour le nom, 1 pour le prénom, etc) et kwargs["elem"] contient l'élément demandé - A partir de là, rechercher l'élément demandé dans la ligne devient trivial...
    # cherche()
     
    # Exemple d'utilisation: rechercher le nom "toto"
    cherche(nom="toto")
     
    # Exemple d'utilisation: rechercher le prénom "titi"
    cherche(prenom="titi")
     
    # Exemple d'utilisation: rechercher l'âge 18
    cherche(age="18")
    ...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 64
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Je pige que dalle à cette fonction. Si le nom est vide, alors il a été ajouté avec succès ? Et tu quittes la fonction sans rien renvoyer ?? (il va être content l'appelant !!!) Et tu fermes le fichier (dont la variable n'est pas connue de la fonction soit dit en passant !!!) ???
    En fait je peux rentrer les données de plusieurs membres à la fois.. A chaque fois je rentre le nom, le prénom, le sexe, la date de naissance, l'adresse, le code postal, la localité et le numéro du même membre. Ensuite ou alors je recommences avec le nom d'un autre membre ou alors j'appuies sur entrer sans entrer quoi que ce soit et le programme sort de la boucle...

    Cette fonction là elle fonctionne... c'est la fonction qui écrit ma liste retournée auparavant dans le fichier avec des diez entre les différentes valeurs qui ne fonctionne pas convenablement...

    Merci.

Discussions similaires

  1. Gestion du carnet d'adresses
    Par ALT dans le forum Thunderbird
    Réponses: 0
    Dernier message: 11/02/2010, 16h27
  2. Réponses: 3
    Dernier message: 20/05/2009, 09h12
  3. Gestion d'un carnet d'adresse
    Par Mut dans le forum Schéma
    Réponses: 6
    Dernier message: 21/11/2007, 15h23
  4. Réponses: 2
    Dernier message: 19/08/2007, 11h58
  5. Réponses: 7
    Dernier message: 06/11/2005, 10h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo