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 :

suppression chaine de caractere consecutive


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 8
    Par défaut suppression chaine de caractere consecutive
    bonjour à tous

    nouvel exercice (apres celui la j'arrete pour aujourd'hui parce que je vais devenir :mad2

    Donner une définition de la fonction enleve_si qui, étant donné une chaîne de caractères s,
    un caractère car et un entier strictement positif n, renvoie la chaîne obtenue à partir de s en
    enlevant les blocs contenant n occurrences de car d’affilée : lorsque le caractère car apparaît
    exactement n fois de suite, tout ce bloc doit être supprimé. Lorsqu’il apparaît un nombre
    différent de fois d’affilée, le bloc doit être conservé.
    Par exemple :
    >>> enleve_si(’creee’,’e’, 3)
    ’cr’
    >>> enleve_si(’creee’,’e’, 2)
    ’creee’
    >>> enleve_si(’libellule’,’l’, 2)
    ’libeule’
    >>> enleve_si(’libellule’,’l’, 1)
    ’ibellue’
    >>> enleve_si(’papillon’,’p’, 1)
    ’aillon’
    >>> enleve_si(’papillon’,’l’, 2)
    ’papion’
    >>> enleve_si(’papillon’,’l’, 1)
    ’papillon’

    je commence comme d'habitude avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    def enleve_si(s : str, car : str, n : int) -> str
    la il faut que je trouve les occurences que je veux supprimer, mais il faut les supprimer uniquement si elle se trouve n fois consecutivement

    est ce qu'il faut que je fasse d'abord une fonction de supression de l'occurence en question et ensuite faire une fonction qui trouve si elles sont n fois consecutive et si oui executer la commande de suppression?
    J'ai peur qu'en faisant cela il me supprime toutes les occurence, comme dans l'exemple >>> enleve_si(’libellule’,’l’, 2) ’libeule’, si ça me supprime les autre 'l' mon programme est faux.

    merci a tous

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    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 835
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Une boucle sur i allant de 0 à len(s) - n. Si s[i:i+n] == car * n ET s[i+n] différent de car alors tu supprimes s[i:i+n]. Ou plutôt tu ne supprimes pas de suite (car cela modifiera ensuite l'adéquation entre "i" et la suite de la chaine) donc tu mémorises "i" dans un tableau d'indices.
    Et en fin de boucle, tu traites ton tableau d'indices dans l'ordre décroissant et pour chaque "i" du tableau, tu supprimes s[i:i+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]

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 8
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Bonjour
    Une boucle sur i allant de 0 à len(s) - n. Si s[i:i+n] == car * n ET s[i+n] différent de car alors tu supprimes s[i:i+n]. Ou plutôt tu ne supprimes pas de suite (car cela modifiera ensuite l'adéquation entre "i" et la suite de la chaine) donc tu mémorises "i" dans un tableau d'indices.
    Et en fin de boucle, tu traites ton tableau d'indices dans l'ordre décroissant et pour chaque "i" du tableau, tu supprimes s[i:i+n].
    bonjour
    merci pour ta reponse, je vais essayer d'interpreter ça. je debute donc on va voir ce que ca donne


    edit:

    j'ai essayer cela pour l'instant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    while i < len(s):
            if s[i:i+n] == car*n and s[i+n] != car:
    par contre comment je memorise? je prend une atre variable? du genre r = r + i ??

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    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 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par neo62950 Voir le message
    par contre comment je memorise? je prend une atre variable? du genre r = r + i ??
    Tu ne sais pas stocker une valeur (exemple "i") dans un tableau (exemple "tab")? tab.append(i).
    Et attention, "i" ne doit pas aller jusqu'à len(s) sinon s[i+n] dépasse la zone de "s". Moi j'ai pas écrit "jusqu'à len(s)"...
    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 régulier
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 8
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Tu ne sais pas stocker une valeur (exemple "i") dans un tableau (exemple "tab")? tab.append(i)Et attention, "i" ne doit pas aller jusqu'à len(s) sinon s[i+n] dépasse la zone de "s".
    non je ne sais pas, je debute, je suis au chapitre 5 du cours et nul part il est mention de tab.append

    effectivement j'ai oublier le -n

    si je suis ton raisonnement j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    while i < len(s)-n:
            if s[i:i+n] == car*n and s[i+n] != car:
                tab.append(i)
            else:
                 i=i+1
    franchement le tab.append(i) connait pas du tout. et je ne voit pas comment supprimer les differentes valeur de (i)

    le seul exemple de suppression dans mon cours c'est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    def suppression(c : str, s : str) -> str:
         r : str = ''
        d : str # Caractère courant
        for d in s:
            if d != c:
                r = r + d # ne pas supprimer, donc ajouter au résultat
     
    return r
    mais ici je ne vois pas comment cela peut m'aider

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    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 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par neo62950 Voir le message
    non je ne sais pas, je debute, je suis au chapitre 5 du cours et nul part il est mention de tab.append
    Ok. Tu n'as pas encore vu les listes. Faudra donc faire sans. Et si tu veux les voir "par anticipation" c'est ici.

    Citation Envoyé par neo62950 Voir le message
    si je suis ton raisonnement j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    while i < len(s)-n:
            if s[i:i+n] == car*n and s[i+n] != car:
                tab.append(i)
            else:
                 i=i+1
    Pas de "else", le "i" augmente dans tous les cas (tu as fini d'examiner le s[i], tu as trouvé tu n'as pas trouvé tu passes quand-même au caractère suivant). Mais de toute façon cela ne marche plus puisque tu n'as pas la connaissance permettant de mettre en oeuvre cette solution

    Pas évident évident. Je peux toutefois te proposer la solution suivante
    • tu écris une fonction "verif" qui vérifie si un caractère "c" se trouve répété n fois dans une chaine et qui renvoie la première position de cette répétition ou -1 si pas de répétition. Exemple verif("Hello lille", "l", 2) renvoie 2 mais verif("Hello", "a", 3) renvoie -1
    • tant que verif(s, c, n) différent de -1 tu supprimes les caractères de "s" placés à cette position et rebelote

    Concentre tout ton travail sur la fonction verif(), c'est elle la plus importante, elle qui est le coeur de la solution. Tant qu'elle n'est pas parfaite tu ne fais pas le reste. Et quand elle sera parfaite, le reste (supprimer les caractères) ce sera peanut.
    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]

Discussions similaires

  1. Suppression fin chaine de caracteres
    Par xavier1936 dans le forum Langage
    Réponses: 5
    Dernier message: 29/11/2011, 15h19
  2. suppression d'une sous chaine de caractere
    Par ibuto dans le forum C
    Réponses: 1
    Dernier message: 01/04/2011, 11h39
  3. [AC-2003] suppression chaine de caractere fixe
    Par fdalyon dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 19/02/2010, 17h04
  4. Réponses: 4
    Dernier message: 21/07/2006, 08h53
  5. Réponses: 3
    Dernier message: 31/01/2005, 23h18

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