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

  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 851
    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 851
    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 851
    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 851
    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 851
    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 851
    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