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 :

Changer une chaîne ou un caractère par un autre dans une chaîne de caractère selon le nombre d'occurence


Sujet :

Python

  1. #1
    Membre très actif
    Femme Profil pro
    étudiante chercheuse
    Inscrit en
    Septembre 2013
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante chercheuse
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2013
    Messages : 274
    Par défaut Changer une chaîne ou un caractère par un autre dans une chaîne de caractère selon le nombre d'occurence
    bonsoir,
    j'ai l'énoncé suivant :
    Énoncé
    Écrire une fonction trans(text, replaceA, replaceB), qui reçoit trois paramètres:
    text : une chaîne de caractères
    replaceA : un couple (oldA, newA)oldA est un caractère et newA un texte
    replaceB : un couple (oldB, newB)oldB est un caractère et newB un texte
    et qui renvoie le résultat de la transformation suivante : chaque occurrence du symbole oldA dans la chaîne text est remplacée par la chaîne newA, et simultanément chaque occurrence du symbole oldB est remplacée par la chaîne newB.
    Pour simplifier, vous pouvez supposer que oldA est différent de oldB.
    Exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> print(trans('ABBAB', ('A','AB'), ('B','BA')))
    >>> 'ABBABAABBA'
    j'ai codé ces lignes :
    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
    def isprefixe(texte,mot,i):
        """Vérifie si mot a une occurrence dans texte en position i"""
        B = True
        j = 0
        while (j < len(mot)) and B:
            if texte[i + j] != mot[j]:
                B = False
            j += 1
        return B
     
    def cherche_occurrences(texte, mot):
        """Donne la liste de toutes les occurrences de mot dans texte"""
        occ = []  # liste des occurrences
        for i in range(len(texte) - len(mot) + 1):
            if isprefixe(texte, mot, i):
                occ.append(i)
        return occ
     
     
    replaceA=("","")
    replaceB=("","")
    def trans(text, replaceA, replaceB):
        print(text)
        """Donne la liste de toutes les occurrences de mot dans texte"""
        occ1=cherche_occurrences(text,replaceA[0])
        occ2 =cherche_occurrences(text,replaceB[0])
        # liste des occurrences
        if(replaceA[0]!=replaceB[0]):
            print(occ1)
            for i in range(len(occ1)- 1):
                text = replaceA[1] + text[occ1[i]+1:]
                for j in range(len(occ2)-1):
                    text = replaceB[1] + text[occ2[j]+1:]
        return text
     
     
    print(trans('chicane', ('c', 'KH'), ('i', 'ii')))
    mais le résultat qu'il donne pour trans('chicane', ('c', 'KH'), ('i', 'ii'))) est le suivant : KHhicane alors que la résultat attendu est : KHhiiKHane.

  2. #2
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 081
    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 081
    Par défaut
    Mouais ça se fait en 5 lignes... Essayes d'apprendre les dictionnaires en python et leur création via des tuples.

  3. #3
    Membre très actif
    Femme Profil pro
    étudiante chercheuse
    Inscrit en
    Septembre 2013
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante chercheuse
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2013
    Messages : 274
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    Mouais ça se fait en 5 lignes... Essayes d'apprendre les dictionnaires en python et leur création via des tuples.
    bonsoir,
    oui je sent que "i do it in the hard way", bon ça peut prendre de temps et beaucoup de manipulation pour que je puisse l'apprendre .
    bref tu peut me guider un peut avec mon code , par exemple pourquoi il remplace juste la première caractère....

  4. #4
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 081
    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 081
    Par défaut
    Bonjour,

    Le problème ici est plus d'ordre algorithmique... L'algorithme naïf est assez enfantin, ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    resultat vaut chaine vide
    Pour chaque caractere dans chaine
        Si caractere vaut 1er élément de replaceA
            Alors concaténer résultat à 2ème élément de replaceA
        Si caractere vaut 1er élément de replaceB
            Alors concaténer résultat à 2ème élément de replaceB
        Sinon concatener resultat à caractere
    retourner resultat
    Je ne vois pas de subtilité dans cet exercice, en tout cas, comme il est présenté, rien ne démontre de difficulté.

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 762
    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 762
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    Mouais ça se fait en 5 lignes... Essayes d'apprendre les dictionnaires en python et leur création via des tuples.
    3 lignes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def trans(s, a, b):
        dd = dict((a, b))
        return ''.join(dd.get(e, e) for e in s)
     
    print(trans('ABBAB', ('A','AB'), ('B','BA')))
    print(trans('chicane', ('c', 'KH'), ('i', 'ii')))

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Membre très actif

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Billets dans le blog
    1
    Par défaut
    2 lignes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def trans(s, a, b):
        return s.translate(s.maketrans(dict((a, b))))
    Et encore plus moche le une ligne...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    trans = lambda s, a, b: s.translate(s.maketrans(dict((a, b))))
    Je n'ai aucun mérite, le nom de la fonction m'a tout de suite fait penser à str.translate

  7. #7
    Membre très actif
    Femme Profil pro
    étudiante chercheuse
    Inscrit en
    Septembre 2013
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante chercheuse
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2013
    Messages : 274
    Par défaut
    salut,
    voilà ça ce voit vous maîtriser bien python , moi j'apprend peu à peu , en tout cas merci à vous

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/01/2016, 23h34
  2. [AC-2010] Remplacer caractères par d'autres dans une chaîne
    Par Invité dans le forum VBA Access
    Réponses: 2
    Dernier message: 26/05/2011, 11h03
  3. Réponses: 4
    Dernier message: 09/09/2009, 10h59
  4. Remplacer un mot entier par un autre dans une chaîne de caractères
    Par clemini dans le forum Requêtes et SQL.
    Réponses: 11
    Dernier message: 19/02/2009, 14h39
  5. Réponses: 6
    Dernier message: 20/02/2006, 22h13

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