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 :

un code qui demande de changer une fonction


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 208
    Par défaut un code qui demande de changer une fonction
    un exercice me rend vraiment folle, le problème je ne sais pas comment m'y prendre pour le résoudre,je veux des conseils et plus d'explication svp.

    le code est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    def pilote(fichier, dex) : 
          flux = open(fichier, 'r') 
          for n, ligne in enumerate(flux) : 
                  dex = indexe(dex, ligne.split(), n + 1) 
          flux.close() 
          prd(dex) 
          return dex


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    def indexe(dex, mots, ligne) : 
          for mot in mots : 
                  mot = nettoie(mot) 
                  if mot.lower() in stoplist : pass 
                  else : dex = ajoute(dex, mot, ligne) 
          return dex 
     
    def ajoute(dex, mot, ligne) : 
          if mot in dex : 
                  if ligne in dex[mot] : pass 
                  else : dex[mot].append(ligne) 
          else : dex[mot] = [ligne] 
          return dex
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ponctuation = '(,.")'                                                                                                                                                                                  
     
    def nettoie(mot) :                                                                                                                                                                                     
         if mot[-1] in ponctuation : mot = mot[:-1]                                                                                                                                                         
         if mot[0] in ponctuation : mot = mot[1:]                                                                                                                                                           
         return mot

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    def prd(d) :  
          for c in sorted(d) : 
                  print '\t', c, ':', d[c] 
     
     
     
    stoplist = 'ce de du en le la mais on ou par pas pour qui un une'.split()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    flux = open('stop.list', 'w')                                                
    flux.write('\n'.join(stoplist))                                              
    flux.close()
    flux = open('stop.list', 'r')
    stoplist = flux.read().split()
    flux.close()
    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
     
    pilote('indexe-moi', {}) 
            alors : [8]
            attendue : [6]
            autrement : [7]
            avant : [6]
            avec : [8]
            avoir : [5]
            bien : [1, 5]
            bon : [9]
            bouts : [4]
            c'est : [1, 2, 3]
            certitude : [5]
            chaque : [4, 8]
            coder : [3]
            contexte : [8]
            dans : [6]
            dit : [7]
            expression : [4, 6]
            fonctionnement : [9]
            frustration : [3]
            garantit : [9]
            global : [9]
            grosse : [3]
            instruction : [7, 8]
            large : [7]
            mal : [2]
            marche : [2]
            petits : [4]
            plaisir : [1]
            plus : [6]
            programme : [1, 2, 7]
            progressivement : [4, 9]
            qu'elle : [5]
            retourne : [5]
            s'en : [6]
            servir : [6]
            solution : [3]
            testant : [4]
            teste : [8]
            tourne : [1]
            tout : [2]
            valeur : [5]
            voulu : [8]
            vraiment : [2]
    {'certitude': [5], 'progressivement': [4, 9], 'global': [9], 'grosse': [3], 
    'plaisir': [1], 'retourne': [5], 'coder': [3], 'avec': [8], 'alors': [8], "c'est": [1, 2, 3], 
    'attendue': [6], 'bien': [1, 5], 'chaque': [4, 8], 'valeur': [5], 'frustration': [3], "s'en": [6], 
    'autrement': [7], 'plus': [6], 'avoir': [5], 'testant': [4], 'tourne': [1], 'bouts': [4], 'vraiment': [2], 'petits': [4], 
    'teste': [8], 'garantit': [9], 'mal': [2], 'marche': [2], 'expression': [4, 6], 'instruction': [7, 8], 'dans': [6], 'solution': [3], 
    'large': [7], 'fonctionnement': [9], 'tout': [2], 'voulu': [8], 'bon': [9], 'dit': [7], 'avant': [6], 'servir': [6], "qu'elle": [5], 
    'contexte': [8], 'programme': [1, 2, 7]}
    le fichier qui s'appelle indexe-moi enregistrer sous gedit est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Un programme qui tourne bien, c'est un plaisir, mais un 
    programme qui marche mal ou pas du tout, c'est vraiment 
    une "grosse" frustration. La solution c'est de le coder par 
    petits bouts, en testant progressivement chaque expression 
    pour avoir la certitude qu'elle retourne bien la valeur 
    attendue, avant de s'en servir dans une expression plus 
    large, autrement dit une "instruction" du programme. On 
    teste alors chaque instruction avec le contexte voulu, ce 
    qui, progressivement, garantit le bon fonctionnement global.

    et la question de l'exercice est :

    la fonction prd() est très commode pour afficher les données, mais ce n'est pas comme ça qu'un typographe professionnel présenterait l'index d'un ouvrage " : le lecteur n'a que faire des “[]” " ;
    modifier cette fonction pour que la liste de lignes soit présentée sous la forme " : programme : 1-2, 7 " ; quand il y a 2 numéros consécutifs ou plus, par exemple, 1, 2, 3, 5
    , la liste est présentée sous la forme 1-3, 5 " : coder cette présentation


    je sais que je dois donner au moins une proposition mais j'ai aucune,je suis bloqué :s

    merci

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Il faut jouer avec le formatage en énumérant les chiffres triés préalablement.

    Exemple:
    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
     
    for key in sorted(d):
        value = d[key]
        if len(value) == 1:
            num = value[0]
        else:
            value = sorted(value)
            num = "%s" % value[0]
            sep = ", "
            for idx, c in enumerate(value[1:]):
                if c == value[idx] + 1:
                    sep = "-%s, " % c
                else:
                    num = num + sep + str(c)
                    sep = ", "
            if sep != ", ":
                num = num + sep
     
        print "\t%s: %s" %(key, num)

  3. #3
    Membre très actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 208
    Par défaut
    j'ai rien compris :s

    apparemment il y a une fameuse liste que nous devons passer à la fonction

    et un nombre variable d'entiers (entier = le numéro de page) :

    Ce que je veux c'est :

    - D'une part, virer les crochets (c'est pour ça qu'on doit retourner impérativement une str).

    - Trouver les pages qui se suivent, et n'afficher que la première page de cette suite, suivie d'un tiret, puis la dernière page de cette suite (ce que j'appele bornes de gauche et bornes de droite. Le tout avec un tiret = intervalle).

    Le principal traitement de cette fonction donc, ça va être d'itérer sur cette liste immonde qu'on veut changer, et de repérer quelles pages se suivent, et quelles pages ne sont suivies / ne suivent aucune autre page (pages seules donc).

  4. #4
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    C'est exactement ce que j'avais compris.

    Teste ceci:
    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
     
    # -*- coding: utf-8 -*-
     
    d = {'certitude': [5], 'progressivement': [4, 9], 'global': [9], 'grosse': [3], 
    'plaisir': [1], 'retourne': [5], 'coder': [3], 'avec': [8], 'alors': [8], "c'est": [1, 2, 3], 
    'attendue': [6], 'bien': [1, 5], 'chaque': [4, 8], 'valeur': [5], 'frustration': [3], "s'en": [6], 
    'autrement': [7], 'plus': [6], 'avoir': [5], 'testant': [4], 'tourne': [1], 'bouts': [4], 'vraiment': [2], 'petits': [4], 
    'teste': [8], 'garantit': [9], 'mal': [2], 'marche': [2], 'expression': [4, 6], 'instruction': [7, 8], 'dans': [6], 'solution': [3], 
    'large': [7], 'fonctionnement': [9], 'tout': [2], 'voulu': [8], 'bon': [9], 'dit': [7], 'avant': [6], 'servir': [6], "qu'elle": [5], 
    'contexte': [8], 'programme': [1, 2, 3, 4, 5, 7, 8, 9]}
     
    for key in sorted(d):
        # 
        value = d[key]
        if len(value) == 1:
            #
            num = value[0]
        else:
            #
            value = sorted(value)
            num = "%s" % value[0]
            sep = ", "
            #
            for idx, c in enumerate(value[1:]):
                if c == value[idx] + 1:
                    #
                    sep = "-%s, " % c
                else:
                    #
                    num = num + sep + str(c)
                    sep = ", "
     
            if sep != ", ":
                #
                num = num + sep
     
        print "\t%s: %s" %(key, num)
    Ensuite, mets un commentaire après chaque # que j'ai ajouté au code pour montrer que tu as compris.

  5. #5
    Membre très actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 208
    Par défaut
    le but de l'exercice c'est : d'avoir exemple pour exemple : programme[1,2,3,7,11,12,13,15] une chaine de programme = "1-3,7,11-13,15"

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Citation Envoyé par l1informatique Voir le message
    le but de l'exercice c'est : d'avoir exemple pour exemple : programme[1,2,3,7,11,12,13,15] une chaine de programme = "1-3,7,11-13,15"
    Fastoche:

    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
    >>> from operator import itemgetter
    >>> from itertools import groupby
    >>>
    >>> def g_intervals(data):
    ...     for k, g in groupby(enumerate(data), lambda (i,x): i-x ):
    ...         range = map(itemgetter(1), g )
    ...         if len(range) > 1:
    ...             yield '%d-%d' % (range[0], range[-1])
    ...         else:
    ...             yield '%d' % range[0]
    ...
    >>> data = [1,2,3,7,11,12,13,15]
    >>> ranges = list(g_intervals(data))
    >>> print ', '.join(ranges)
    1-3, 7, 11-13, 15
    >>>
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Changer une fonction qui utilise une liste par un tableau!
    Par sara21 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 03/05/2007, 13h18
  2. un module qui ne contient pas une fonction qu'il contient :?
    Par duplo dans le forum Général Python
    Réponses: 12
    Dernier message: 15/08/2006, 19h30
  3. [C#] MessageBox qui demande de saisir une valeur
    Par Radium133 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 18/01/2006, 10h25
  4. [C#]Comment executer du code qui se trouve dans une string ?
    Par freddyboy dans le forum Windows Forms
    Réponses: 4
    Dernier message: 28/02/2005, 16h31

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