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 :

Aide pour une gestion d'un fichier d'adresse


Sujet :

Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 5
    Points : 4
    Points
    4
    Par défaut Aide pour une gestion d'un fichier d'adresse
    Bonjour. Voila, je suis étudiant en informatique et je suis débutant dans la programmation. Alors mon prof m'as donné un exercice ou je doit faire un fichier d'adresse pour un club de sport. J'ai réussi a faire le programme pour encoder les membres du clubs et tout mais je dois pouvoir lister les membres en les filtrant par la première lettre du nom de famille, par le sexe ou par le code postal et c'est la que j'ai un soucis. Pourriez vous m'aider ? Voici mon programme.

    Et en prime je dois pouvoir accéder directement à un membre en encodant son et son prénom en gérant le fait qu'on puisse avoir deux membres avec le même nom et le même prénom
    Fichiers attachés Fichiers attachés

  2. #2
    Membre expérimenté
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Points : 1 742
    Points
    1 742
    Par défaut
    Salut le python scolaire,
    Je ne vais pas faire le trie a ta place mais te guider vers une primitive python qui peut t'aider:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list
    Mais je ne vais pas te laisser sans explications:
    sorted : sorted(iterable, cmp=None, key=None, reverse=False) -> liste
    triée
    Renvoie une liste d’éléments triés en fonction des éléments de l’objet itérable fourni.
    sorted() utilise une fonction de comparaison à laquelle il passe les éléments deux à
    deux de l’itérable :
    • Si cmp est fourni, la fonction est utilisée pour comparer les éléments deux à deux
    dans l’algorithme de tri. cmp(element1, element2) doit renvoyer -1, 0 ou 1.
    • Si key est fourni, elle pointe sur une fonction qui sera utilisée au moment des
    appels aux éléments dans la fonction de comparaison : chaque élément sera trans-
    formé par key(element) avant la comparaison.
    Lorsque key n’est pas fourni, ce sont les éléments qui sont directement passés à la
    fonction de comparaison. Enfin, lorsque cmp n’est pas fourni, sorted() utilise une
    fonction de comparaison générique.
    reverse
    permet d’inverser le résultat obtenu.
    Combinaisons possibles pour sorted
    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
     
    def cmp(elt1, elt2):
      if elt1 > elt2:
        res = -1
      elif elt1 < elt2:
        res = 1
      else:
        res = 0
     
      print('cmp(%s, %s) = %s'%(elt1, elt2, res))
      return res
     
    def key(elt):
      res = -ord(elt)
      print("key('%s') = %s"%(elt, res))
      return res
     
    sorted(['c', 'a', 'b'], cmp=cmp, key=key)
    key('c') = -99
    key('a') = -97
    key('b') = -98
    cmp(-97, -99) = -1
    cmp(-98, -97) = 1
    cmp(-98, -99) = -1
    cmp(-98, -97) = 1
    ['a', 'b', 'c']
    Sinon la primitive:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    filter(function or None, sequence) -> list, tuple, or string
    Mais je ne vais pas te laisser sans explications:
    filter : filter(fonction ou None, séquence) -> list, tuple, ou string
    Renvoie une nouvelle séquence qui contient tous les éléments de la séquence fournie
    qui répondent au critère suivant :
    fonction(element) == True.
    Si None est fourni à la place d’une fonction, la nouvelle séquence ne conserve que les
    éléments qui sont True.
    renvoie une séquence du même type pour les types liste, tuple et string et une
    liste dans tous les autres cas.
    filter
    Filtrage

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def no_spc(element):
      return element != ' '
     
    res = filter(no_spc, "Nous nous sentions de plus en plus à l'étroit")
    print(res)
    Nousnoussentionsdeplusenplusàl'étroit
    Je t'ai donner les outils de filtrage (primitives) a toi de jouer...!
    Si tu comprend pas quelque chose demande des explications.

    Si tu veux continuer le python voici un bon ouvrage pour apprendre: http://www.svc-robotics.com/.../57/P...hon_ed2_v1.pdf

    Bon court de python a toi.
    Pour faire tes armes:
    Use du présent pour construire ton futur sinon use de ce que tu as appris auparavant.
    Et sois toujours bien armé avant de te lancer.
    Le hasard ne sourit qu'aux gens préparés...
    Site: Website programmation international (www.open-source-projects.net)
    Site: Website imagerie 3D (www.3dreaming-imaging.net)
    Testez aux moins pendant une semaine l'éditeur avec terminaux intégrées it-edit Vous l'adopterai sûrement !
    FUN is HARD WORK !!!

  3. #3
    Membre expérimenté
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Points : 1 742
    Points
    1 742
    Par défaut
    Excuse moi le python scolaire,
    j'ai mal jauger ton niveau, mon post précédent n'as pas du t'aider, mais j'ai vue que tu avais résolu ton script: Bravo.
    Mais il semble que tu te soit tromper ladans ton premier script
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    liFichierM = fichier.readline()       # Lit chaque ligne du fichier de membres
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #Tu a oublier le 's' de readlines() qui retourne toutes les lignes dans un tableau itérable
    que j'ai recontruit en un tableau de sous tableaux afin de traiter les données avec des itérateurs de base, plus facile.

    J'ai juste changer un peu la fonction listerMembre() et comme tu a réussi ton script je te montre ma version (fait en 5minutes) qui ne marche que si l'utilisateur entre une donnée valide et j'ai remarquer que tu avais omis cette possibilité:
    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
     
    def listerMembre():
       "Fonction qui lit la ligne"
     
       fichier = open('Membres','r')
     
       while 1:
           liFichierM = fichier.readlines()       # Lit chaque ligne du fichier de membres #tu as oublier le 's' de readlines() qui lit toutes les lignes
           Donnees=[]
           for values in liFichierM :
             Donnees.append(values.split('#'))
     
           if choixFiltre == '':
               break
     
     
     
           if choixFiltre == "1" :                          # Si l'on choisit de filtrer sur la 1ère lettre du nom de famille
               lettre = raw_input("\n"+"Première lettre du nom de famille : ")
     
               if lettre == '':
                   break
     
               for values in Donnees :
                 if values[0][0] == lettre:         
                  print ' '.join(values)
     
     
           if choixFiltre == "2" :
               sexe = raw_input("\n"+"Sexe : ")
     
               if sexe == '':
                   break
     
               elif sexe == 'M' or sexe == 'F':
                 for values in Donnees :
                   if values[-2] == sexe :
                     print ' '.join(values)
     
     
     
           if choixFiltre == "3" :
               codeP = raw_input("\n"+"Code postal : ")
     
               if codeP == '':
                   break
               for values in Donnees :
                 if values[-4] == codeP :
                    print ' '.join(values)
     
       fichier.close()
    Bon cours de python a toi.
    Pour faire tes armes:
    Use du présent pour construire ton futur sinon use de ce que tu as appris auparavant.
    Et sois toujours bien armé avant de te lancer.
    Le hasard ne sourit qu'aux gens préparés...
    Site: Website programmation international (www.open-source-projects.net)
    Site: Website imagerie 3D (www.3dreaming-imaging.net)
    Testez aux moins pendant une semaine l'éditeur avec terminaux intégrées it-edit Vous l'adopterai sûrement !
    FUN is HARD WORK !!!

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 25
    Points : 34
    Points
    34
    Par défaut
    bonjour,

    voici une autre façon de faire.

    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
     
    #_*_ coding:utf-8 _*_
     
    def encodeMembre():
        "Fonction pour encoder les infomations du nouveau membre"
     
        print "(Enter pour quitter)"
     
        nom = raw_input("Nom : ")
        if nom == "":
            return []
     
        else:
            prenom = raw_input("Prénom : ")
            rue = raw_input("Rue : ")
            numero = raw_input("Numéro : ")
            codePostal = raw_input("Code postal : ")
            dateNais = raw_input("Date de naissance : ")
            sexe = raw_input("Sexe (M ou F) : ")
     
            if sexe!="M" and sexe!="F":
                print "M ou F s.v.p !"
     
            return [nom,prenom,rue,numero,codePostal,dateNais,sexe]
     
    def enregistreMembre(liste):
        "Fonction qui enregistre les informations du nouveau membre"
     
        fichier = open('Membres.txt','a')
        i = 0
     
        while i<len(liste):
            fichier.write(liste[i]+"#")
            i += 1
     
        fichier.write("\n")
        fichier.close()
     
    def listerMembre(n):
        l_id = [0,0,-1,4]
        id = int(n)
        liste = False
     
        l_critere = ['','lettre : ','sexe : ','code postal : ']
        chx = raw_input(l_critere[id])
     
        fichier = open("Membres.txt","r")
        while 1:
            line = fichier.readline()[:-2]
            if line:
                if id == 3:
                    line = line.split("#")
                    liste = True
                if line[l_id[id]] == chx:
                    if  liste:
                        print line
                    else:
                        print line.split("#")
            else:
                break
        fichier.close()
     
     
     
    # Programme ----------------------------------------------------
     
    while 1:
     
        print "\n"+"Gestion du club de boxe"
        print "***********************"
        print "Que désirez-vous ?\n\
        1 - Ajouter un membre\n\
        2 - Lister les membres\n\
        3 - Quitter\n"
     
        choix = raw_input("Votre choix : ")
     
        if choix == "1":
            nomf = open('Membres','a')
            lNouvMembre = encodeMembre()
     
            if lNouvMembre == []:
                break
            else:
                enregistreMembre(lNouvMembre)
     
        elif choix == "2":
            print "Que désirez-vous ?\n\
            Filtrer sur :\n\
            1 - Sur la première lettre du nom de famille\n\
            2 - Sur le sexe\n\
            3 - Sur le code postal\n"
     
            choixFiltre = raw_input("Votre choix : ")
     
            if choixFiltre in ['1','2','3']:
                listerMembre(choixFiltre)
            else:
                print'mauvais choix' 
     
        elif choix == "3":
            print "Au revoir !"
            break
     
        else:
            print "1, 2 ou 3 s.v.p !"
    ça vaut ce que ça vaut ça n'est qu'une idée.

Discussions similaires

  1. [AC-2007] Aide pour une gestion de carburant
    Par h1karu dans le forum Modélisation
    Réponses: 39
    Dernier message: 05/05/2012, 13h19
  2. Besoin d'aide pour une gestion d'un multi fork avec chien degarde.
    Par Baradhur dans le forum Threads & Processus
    Réponses: 11
    Dernier message: 21/01/2011, 09h28
  3. Réponses: 12
    Dernier message: 09/11/2010, 10h15
  4. Réponses: 1
    Dernier message: 26/02/2010, 11h02
  5. Réponses: 15
    Dernier message: 26/03/2006, 12h10

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