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

  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
    290
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : maçon

    Informations forums :
    Inscription : Novembre 2004
    Messages : 290
    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 861
    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 861
    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 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.

  7. #7
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 861
    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 861
    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]

  8. #8
    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 !!"

  9. #9
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 861
    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 861
    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]

  10. #10
    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
    Bonjour

    Alors j'ai pas mal travaillé sur mon programme, j'ai notamment tenu compte de tes astuces Sve@r et voilà à quoi je suis arrivé.

    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
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
     
    # -*- coding: utf-8 -*-
     
    # Fonctions :
     
    def ajouterMembre():
        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 : ")
     
        return [nom, prenom, sexe, dateNaissance, adresseN, codePostal, localite, nGSM]
     
    def enregistrerMembre(liste):
        n = 0
        while n < len(liste):
            oFichier.write(liste[n] + "#")
            n = n + 1
        oFichier.write("\n")
     
    def afficherMembre():
        openFichier = open('membres', 'r')
        while 1:
            lectureFichier = openFichier.readline()
            if lectureFichier == "":
                break
            listeFichier = lectureFichier.split("#")
     
            i=0
            while i < len(listeFichier):
                print listeFichier[i],
                i += 1
        openFichier.close()
     
    def existenceFichier() :
        'fonction qui vérfifie si un fichier existe'
        try:
            openFichier = open('membres','r')
            openFichier.close()
            return 1
        except:
            return 0
     
    def filtrerSexe() :
        print "Fonction pas encore active !"
     
    def filtrerCodePostal() :
        print "Fonction pas encore active !"
     
    # Programme principal :
     
    print "Bienvenue au Club de Sport"
     
    while 1:
        print "\nQue désirez-vous ? : \n\
        1 - Ajouter un membre.\n\
        2 - Lister les membres.\n\
        3 - Quitter.\n "
        choix=raw_input("Vôtre choix ? : ")
     
        if choix=="1":
            oFichier = open('membres', 'a')
            encore = "N"
            while encore == "N" :
                listeMembres = ajouterMembre()
                enregistrerMembre(listeMembres)
                print "Pour entrer un nouveau membre entrez 'N' sinon appuyez sur 'ENTER'."
                encore = raw_input("Encoder un nouveau membre ? ")
            oFichier.close()
     
        elif choix=="2":
            print "\nQue désirez-vous ? : \n\
            1 - Lister tous les membres.\n\
            2 - Filtrer sur le sexe.\n\
            3 - Filtrer sur le code postal.\n\
            4 - Quitter."
            choix2=raw_input("Vôtre choix ? : ")
     
            if choix2=="1":
                if existenceFichier():
                    afficherMembre()
     
                else :
                    print "Aucun membre n'est trouvable !"
     
            elif choix2=="2":
                filtrerSexe()
     
            elif choix2=="3":
                filtrerCodePostal()
     
            elif choix2=="4":
                break
     
            else :
                print "Uniquement 1, 2, 3 ou 4 s.v.p !"
     
        elif choix=="3":
            print "Au revoir !"
            break
     
        else:
            print "Uniquement 1, 2 ou 3 s.v.p !"
    Comme vous pouvez voir j'ai fais deux fonctions filtrerSexe et filtrerCodePostal que j'aimerais complèter..

    Le problème c'est que je ne sais pas par où commencer..

    Quelqu'un pour me donner un petit coup de pouce ?

    Merci

    EDIT : j'aimerais pouvoir filtrer une fois sur le code postal entré par l'utilisateur et une fois sur le sexe rentré par l'utilisateur..

  11. #11
    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
    Personne pour me donner un coup de pouce ? Je ne vois pas trop comment m'y prendre pour filtrer mes membres... Merci d'avance..

  12. #12
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 861
    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 861
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par tonykart13 Voir le message
    Personne pour me donner un coup de pouce ? Je ne vois pas trop comment m'y prendre pour filtrer mes membres... Merci d'avance..
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    def filtrer(*args, **kwargs):
    	find=raw_input("Entrez le %s recherché (Enter pour annuler]:" % kwargs.keys()[0])
    	if find == "": return
     
    	pos=[i for (i, x) in enumerate(("nom", "prenom", "sexe", "naissance", "adresse", "cp", "localite", "telephone")) if x in kwargs.keys()][0]
    	fp=open('membres', 'r')
    	for line in fp:
    		items=line.split('#')
    		if items[pos] == find: print ", ".join(items)
    	# for
    	fp.close()
    # filtrer()
     
    ...
            print "\nQue désirez-vous ? : \n\
            1 - Lister tous les membres.\n\
            2 - Filtrer sur le sexe.\n\
            3 - Filtrer sur le code postal.\n\
            4 - Quitter."
            choix2=raw_input("Vôtre choix ? : ")
     
            if choix2=="1":
                if existenceFichier():
                    afficherMembre()
     
                else :
                    print "Aucun membre n'est trouvable !"
     
            elif choix2=="2":
                filtrer(sexe=None)
     
            elif choix2=="3":
                filtrer(cp=None)
     
            elif choix2=="4":
                break
     
            else :
                print "Uniquement 1, 2, 3 ou 4 s.v.p !"
     
    ...
    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]

  13. #13
    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 Sve@r en attendant j'avais réussis à résoudre mon problème.. Je n'ai jamais vu *args et **kwargs donc je ne vais pas les utiliser...

    Voilà comment j'ai résolus mon problème :

    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
     
    def filtrerSexe(ch) :
        "recherche dans ch la portion de chaîne contenant le sexe"
        parts = ch.split("#")
        return parts[2]
        print "Indiquez 'M' pour afficher les membres masculins et 'F' pour afficher les membres féminins."
        sexe = raw_input("Sexe : ")
        oFichier = open('membres', 'r')
        while 1:
            ligne = oFichier.readline()
            listeFichier = ligne.split("#")
            if ligne == "":
                break
            if filtrerSexe(ligne) == sexe:
                i = 0
                while i < len(listeFichier):
                    print listeFichier[i],
                    i += 1
            else :
                print "Aucun membre n'est de sexe", sexe
                break
        oFichier.close()
    Le soucis c'est que mon programme m'affiche uniquement le premier membre qui a le sexe demandé et ensuite il m'affiche ce qu'il fait mis sous else...

    Voilà pour mieux comprendre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Indiquez 'M' pour afficher les membres masculins et 'F' pour afficher les membres féminins.
    Sexe : M
    Ollig Gilles M 19/04/1994 Drève de Maison Bois 1 4860 Pepinster 0493170871 
    Aucun membre n'est de sexe M
    J'ai réussis à le faire mais avec une toute petite fonction et le reste dans le programme principal.. Mais ce serais mieux que tout soit dans une fonction et qu'il suffit de l'appeller dans le menu principal...

    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
     
    # -*- coding: cp1252 -*-
     
    def filtrerCodePostal(ch) :
        "recherche dans ch la portion de chaîne contenant le code postal"
        parts = ch.split("#")
        return parts[5]
     
    print "\nQue désirez-vous ? : \n\
    1 - Lister tous les membres.\n\
    2 - Filtrer sur le sexe.\n\
    3 - Filtrer sur le code postal.\n\
    4 - Filtrer sur la première lettre du nom.\n\
    5 - Afficher un membre en indiquant son nom et prénom.\n\
    6 - Quitter."
    choix2=raw_input("Vôtre choix ? : ")
     
    if choix2=="3" :
        print "Indiquez un code postal pour afficher tous les membres qui y résident."
        codePostal = raw_input("Code postal : ")
        oFichier = open('membres', 'r')
        while 1:
            ligne = oFichier.readline()
            liste2Fichier = ligne.split("#")
            if ligne == "":
                break
            if filtrerCodePostal(ligne) == codePostal:
                i = 0
                while i < len(liste2Fichier):
                    print liste2Fichier[i],
                    i += 1
            else :
                print "Aucun membre n'habite au", codePostal
                break
        oFichier.close()
    Merci de l'aide Sve@r !!! =)

  14. #14
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 861
    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 861
    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
    def filtrerSexe(ch) :
    ...
            if filtrerSexe(ligne) == sexe:
                i = 0
                while i < len(listeFichier):
                    print listeFichier[i],
                    i += 1
            else :
                print "Aucun membre n'est de sexe", sexe
                break

    Le soucis c'est que mon programme m'affiche uniquement le premier membre qui a le sexe demandé et ensuite il m'affiche ce qu'il fait mis sous else...
    Ben évidemment !!! A chaque ligne il regarde si le sexe de la ligne correspond au retour de la fonction filtrerSexe(). Si c'est bon alors il affiche la ligne sinon il affiche "aucun membre n'est du sexe ..." et sort de la boucle. Total, à la première ligne qui ne correspond pas, ben la boucle est finie (même s'il y a encore 500 lignes à traiter)
    Développer ça demande quand-même une certaine part de logique...

    Citation Envoyé par tonykart13 Voir le message
    Merci de l'aide Sve@r !!! =)
    Ptain mais tu as quand-même vu comment je faisais quoi !!! Même si tu n'as pas vu args et kwargs (ça permet simplement de créer une fonction pouvant recevoir n'importe quelle variable => on veut lui passer une variable "a" on appelle fct(a=truc) => on veut lui passer une variable "b" on appelle fct(b=chose) => kwargs est alors un dictionnaire contenant comme clef la variable (a ou b) et comme valeur la valeur passée (truc ou chose)) tu vois quand-même le principe non ? Je lis chaque ligne du fichier et si l'élément n° X de la ligne (X dépendant du type demandé) correspond à l'élément saisi alors j'affiche la ligne. Tu veux faire une fonction "filtrerSexe()" ben tu reprends ma fonction mais tu n'as plus besoin de pos puisque tu sais déjà que le sexe est en 3° position => te suffit de regarder, pour chaque ligne, si le mot[2] est égal au sexe demandé et basta !!!
    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]

  15. #15
    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
    Tu dois t'arracher les cheveux avec un type comme moi mdr...

    Bonne nouvelle j'ai réussis mdr

    Un dernier petit problème :

    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
     
    def filtrerLettreNom(lettre) :
     
        findLettre=raw_input("Entrez la première lettre du nom du membre à trouver : ")
     
        if findLettre=="":
            return
     
        oFichier=open('membres', 'r')
     
        for line in oFichier:
            elems=line.split('#')
     
            if elems[0][0] == findLettre:
                print ", ".join(elems)
     
            else :
                print "Aucun nom ne commence par", findLettre,"."
     
        oFichier.close()
    La fonction m'affiche bien les membres dont le nom commence par la lettre demandée mais il m'affiche aussi une erreur...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Traceback (most recent call last):
      File "L:\CarnetAdresses.py", line 166, in <module>
        elif choix2=="3" :
      File "L:\CarnetAdresses.py", line 92, in filtrerLettreNom
    IndexError: string index out of range
    Cela signifie ?

    Après je n'ennuies plus personne !

  16. #16
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 861
    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 861
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par tonykart13 Voir le message
    Tu dois t'arracher les cheveux avec un type comme moi mdr...

    Bonne nouvelle j'ai réussis mdr

    Un dernier petit problème :

    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
     
    def filtrerLettreNom(lettre) :
     
        findLettre=raw_input("Entrez la première lettre du nom du membre à trouver : ")
     
        if findLettre=="":
            return
     
        oFichier=open('membres', 'r')
     
        for line in oFichier:
            elems=line.split('#')
     
            if elems[0][0] == findLettre:
                print ", ".join(elems)
     
            else :
                print "Aucun nom ne commence par", findLettre,"."
     
        oFichier.close()
    La fonction m'affiche bien les membres dont le nom commence par la lettre demandée mais il m'affiche aussi une erreur...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Traceback (most recent call last):
      File "L:\CarnetAdresses.py", line 166, in <module>
        elif choix2=="3" :
      File "L:\CarnetAdresses.py", line 92, in filtrerLettreNom
    IndexError: string index out of range
    Cela signifie ?
    Cela signifie que l'indice que tu demandes dans un certain tableau dépasse les limites du tableau. Par exemple si a=["toto", "titi", "tata"] alors tu peux taper dans a[0], a[1], a[2] mais si tu demandes a[3] tu auras un index out of range.

    A un moment donné, ton tableau elems est probablement un tableau vide donc comparer elems[0] (et à fortiori elems[0][0]) fait planter...

    PS: tu as encore fait la même erreur. Tu affiches "aucun nom ne commence par ..." pour chaque ligne dont le nom ne commence pas par la lettre !!!
    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]

  17. #17
    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

    J'ai remarqué mon erreur qui affiche à toutes les lignes que "aucun nom ne commence par ..." je l'ai résolu..

  18. #18
    Nouveau candidat au Club
    Homme Profil pro
    Retraité informaticien
    Inscrit en
    Novembre 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité informaticien
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3
    Par défaut
    Bonjour,
    Je suis désolé de m’immiscer dans cette discussion de développeurs, alors que je ne le suis pas, mais c'est un monde que j'ai côtoyé professionnellement...

    C'est juste pour une question à l'initiateur de ce post:
    Ce post s'est arrêté depuis un an, as-tu terminé ton appli ?

    En effet, je cherche (et je ne trouve vraiment pas dans les différents "market") une appli androïd de carnet d'adresses élargi, pour faire simple, ce serait "contacts" mais avec un nombre de champs variable (de l'ordre de la quinzaine) afin de retrouver un vrai carnet d'adresse complet (pour chaque entrée 4 champs tel, 2 adresses postales, des champs libres etc).
    Mon modèle PC est le carnet d'adresse de Thunderbird qui permet tout cela!
    Je viens de trouver un extension Mozilla, qui permet d'exporter/synchroniser ce carnet sous forme de Vcard (c'est beaucoup plus intéressant que .csv car les noms des champs sont référencés dans l'export).

    Voilà donc ce que je recherche: un carnet d'adresse complet construit à partir d'un import Vcard.

    Si ton appli n'est pas loin de cet objectif, je suis prêt à faire le cobaye et te soutenir dans cette démarche, j'ai déjà fait du debugging informatique mais je ne connais ni Java ni les internes Androïd (j'étais spécialiste en bases de données relationnelles)
    Amicalement
    Georges
    PS: J'ai un Galxy S3 sous Jelly Bean

  19. #19
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 295
    Par défaut
    Une vcard selon wikipedia est un simple fichier lisible par n'importe quel éditeur.

    Il y a rien de difficile en python permettant de parser un fichier "texte".

    Même un débutant, en un mois de temps est capable de le faire.

    Le plus difficile reste la partie graphique, mais pour ça, une fois terminé version non graphique, on pourra t'aider.

    Si tu as lu tout le post, tu te rendras compte que Sve@r est plus près de la vérité que le "posteur d'origine".

    Mais j'avoue que c'est un exercice intéressant, avec comme problématique, "importer les informations à partir d'une vcard."

    L'objectif étant de parser un fichier texte...

  20. #20
    Nouveau candidat au Club
    Homme Profil pro
    Retraité informaticien
    Inscrit en
    Novembre 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité informaticien
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3
    Par défaut
    Bonsoir,
    C'est vrai que ça me démange, il faut que je regarde à quoi ressemble python, comme retraité je ne suis pas dans le coup pour Java et le graphique, mais le cœur du traitement pourquoi pas?
    Je connais assez bien l’interpréteur REXX (du à mes origines IBM) qui permet de faire papa/maman sur un système, tu connais ?
    Mais Python est-ce multiplateforme (Win et/ou Linux)

    Merci de tes conseils
    Georges

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