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 :

Exercice d'insertion d'espaces dans une cha�ne de caract�res [Python 3.X]


Sujet :

Python

  1. #1
    Membre averti
    Homme Profil pro
    Etudiant
    Inscrit en
    Octobre 2020
    Messages
    9
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : Etudiant

    Informations forums :
    Inscription : Octobre 2020
    Messages : 9
    Par d�faut Exercice d'insertion d'espaces dans une cha�ne de caract�res
    Bonjour a tous, je suis en train de faire un code sur demande de mon professeur, l'�nonc� est le suivant :

    1. �crire une fonction (cf le prototype ou la signature ci-dessous) qui prend en param�tre une cha�ne de caract�re (sans espace) et qui ins�re un espace tous les 4 caract�res. Ne pas oublier le docstring.
    Signature : Fonction decoupeChaine(ch : String) : String
    Avec mot=�01234567891011�, print(decoupeChaine(�01234567891011�)) affiche 0123 4567 8910 11
    2. M�me question, mais il faut commencer par la fin du mot.
    Signature : Fonction decoupeChaineFin(ch : String) : String
    Avec mot=�01234567891011�, print(decoupeChaineFin(�01234567891011�)) affiche 01 2345 6789 1011


    Je suis bloqu� sur la partie deux.

    Voila mon code :
    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
    def decoupeChaineFin(mot):
        '''Signature : Fonction decoupeChaine(ch : String) : String'''
    #Variables Espace
        taille = len(mot)
        motRep=""
    #Variable Reverse 1
        listReverse =[]
        motReverse=""
    #Variable Reverse 2
        listReverse2=[]
        motReverse2=""
        tailleReverse=len(motRep)
    #Premier Reverse
        for i in range( taille -1 , -1 , -1) :
            listReverse . append( mot [ i ])
        motReverse=(''.join(listReverse))
    #Espaces
        for i in range (taille):
            if i % 4==0 and i>0:
                motRep = motRep + " " + motReverse[i]
            else:
                motRep = motRep + motReverse[i]
    #Deuxième Reverse
        for i in range( tailleReverse -1 , -1 , -1) :
            listReverse2 . append( motRep [ i ])
        motReverse2=(''.join(listReverse2))
     
        return motReverse2
     
    print(decoupeChaineFin("01234567891011"))
    Si vous pouvez m'aider a trouver mon erreur et m'orienter sur comment r�soudre ce probl�me �a serait super !
    Merci d'avance !

  2. #2
    Expert �minent
    Homme Profil pro
    Architecte technique retrait�
    Inscrit en
    Juin 2008
    Messages
    21 770
    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 770
    Par d�faut
    Salut,

    Citation Envoy� par Tim._. Voir le message
    Si vous pouvez m'aider a trouver mon erreur et m'orienter sur comment r�soudre ce probl�me �a serait super !
    Prenez n'importe quelle chaine de caract�re � d�couper par paquets de 4.

    Comme sa longueur n'a pas de bonne raison d'�tre un multiple de 4, sa division (euclidienne) va donner un nombre de paquet q et un reste r.
    Et la diff�rence entre les 2 cas, c'est de savoir si on colle le reste � la fin ou au d�but...

    Intuitivement, il y a une partie commune:lorsque le reste est nul qui pourrait �tre fonction ou suite d'instructions r�p�t�es. Et 2 partie "sp�cifiques": traiter deux caract�res au d�but ou � la fin pour passer le reste � la moulinette commune.

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

  3. #3
    Membre averti
    Homme Profil pro
    Etudiant
    Inscrit en
    Octobre 2020
    Messages
    9
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : Etudiant

    Informations forums :
    Inscription : Octobre 2020
    Messages : 9
    Par d�faut
    Je crois comprendre votre r�ponse, probl�me, je na sais absolument pas comment faire �a

    Edit : Je sais comment le faire mais seulement dans cette situation pr�cise, je voudrais que mon code soit g�n�ral et marche avec n'importe quel chaine de caract�re.

    Edit 2 : De plus le principal probl�me de mon code actuellement est qu'il ne me retourne rien.

  4. #4
    Expert �minent
    Homme Profil pro
    Architecte technique retrait�
    Inscrit en
    Juin 2008
    Messages
    21 770
    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 770
    Par d�faut
    Citation Envoy� par Tim._. Voir le message
    Je crois comprendre votre r�ponse, probl�me, je na sais absolument pas comment faire �a
    Si vous avez �crit la premi�re fonction (decoupechaine), il n'y a pas de bonne raison pour que decoupeChaineFin soit tr�s diff�rente...

    Donc si vous n'inversez pas la chaine de caract�re dans la premi�re fonction, pourquoi est ce que cela vous semble n�cessaire dans la seconde?

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

  5. #5
    Membre averti
    Homme Profil pro
    Etudiant
    Inscrit en
    Octobre 2020
    Messages
    9
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : Etudiant

    Informations forums :
    Inscription : Octobre 2020
    Messages : 9
    Par d�faut
    Il me semble n�cessaire de l'inverser dans la seconde fonction car il est �crit dans mon �nonc� que je dois parcourir ma chaine de caract�re a l'envers. Or je n'ai pas appris a le faire autrement qu'en inversant la fonction... (Si il y a un autre moyen je veut bien le connaitre m�me si je ne pourrais pas l'utiliser ^^ )

    Ma questions est donc :
    -Pourquoi le programme ne me retourne t'il rien et comment corriger cette erreur ?

    D�sol� de ne pas avoir �t� clair

  6. #6
    Membre Expert
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan � 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    925
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyr�n�es Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : Paysan � 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 925
    Billets dans le blog
    8
    Par d�faut
    Bonjour,
    Ton souci provient de la variable tailleReverse ligne 24 qui vaut zero lorsqu'elle est d�finie en ligne 12...
    Remplace la ligne 24 par :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    for i in range( len(motRep) -1 , -1 , -1) :
    et ton code fonctionnera...

    Pour illustrer une autre approche:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    import re
    def decoupe_par_la_fin(mot):
        match = re.sub(r"(.{4})",r"\1 ",mot[::-1])
        return match[::-1]

  7. #7
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    F�vrier 2006
    Messages
    12 847
    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 847
    Billets dans le blog
    1
    Par d�faut
    Bonjour
    Citation Envoy� par Tim._. Voir le message
    Il me semble n�cessaire de l'inverser dans la seconde fonction car il est �crit dans mon �nonc� que je dois parcourir ma chaine de caract�re a l'envers.
    Ce n'est pas r�ellement ce qui est �crit. Il faut que le d�coupage commence par la fin, oui, mais �a ne veut pas forc�ment n�cessaire d'inverser la string
    Si je dois d�couper "123456789" du d�but, je d�coupe "12345678" puis je rajoute "9" � la fin. Si je le dois d�couper de la fin, alors je d�coupe "23456789" et je rajoute "1" au d�but. Bref on commence par r�cup�rer juste la plus grande string de taille "*4" soit en partant du d�but et en s'arr�tant r caract�res avant la fin, soit en partant de "r" et en allant jusqu'� la fin ("r" �tant le reste de la division par 4). Et dans tous les cas j'ai invers� que dalle.

    Donc si r=len(mot) % 4, alors dans le cas "un" reste=mot[-r:]; mot=mot[:-r] ; et dans le cas "deux" reste=mot[:r]; mot=mot[r:].
    Ne reste qu'� d�couper "mot" qui est maintenant pile poil � la bonne taille, et ensuite rajouter "reste" soit au d�but, soit � la fin.
    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]

  8. #8
    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,

    Tu dis que ta premi�re fonction est r�solue, donc ta deuxi�me fonction devrait �tre:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
    def decoupeChaineFin(mot):
        r = decoupeChaineDebut("".join(reversed(mot))
        return "".join(reversed(r))
    Si ta premi�re fonction s'appelle decoupeChaineDebut.

    Ainsi tu montreras que tu respectes le principe DRY (Don't Repeate Yourself)

  9. #9
    Membre averti
    Homme Profil pro
    Etudiant
    Inscrit en
    Octobre 2020
    Messages
    9
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : Etudiant

    Informations forums :
    Inscription : Octobre 2020
    Messages : 9
    Par d�faut
    Merci a tous pour vos r�ponses ^^ Mon probl�me est r�gl� ! Et merci pour les connaissances m�me si j'ai un peu de mal avec certain codes que vous m'avez partag�

  10. #10
    Expert �minent
    Homme Profil pro
    Architecte technique retrait�
    Inscrit en
    Juin 2008
    Messages
    21 770
    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 770
    Par d�faut
    Salut,

    Citation Envoy� par Tim._. Voir le message
    Il me semble n�cessaire de l'inverser dans la seconde fonction car il est �crit dans mon �nonc� que je dois parcourir ma chaine de caract�re a l'envers. Or je n'ai pas appris a le faire autrement qu'en inversant la fonction...
    Dans votre code, il y a:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    #Premier Reverse
        for i in range( taille -1 , -1 , -1) :
            listReverse . append( mot [ i ])
    donc vous savez parcourir une chaine de caract�res "� l'envers" sans "inverser"...

    Si vous savez �crire:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    >>> s = '12345678**'
    >>> r = ''
    >>> for i in range(len(s)):
    ...     if i % 4 == 0 and r:
    ...         r += ' '
    ...     r += s[i]
    ...
    >>> r
    '1234 5678 **'
    >>>
    faire la m�me chose en parcourant s par index d�croissant y ressemble:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    >>> s = '**12345678'
    >>> r = ''
    >>> u = len(s) % 4
    >>> for i in range(len(s)-1, -1, -1):
    ...     r = s[i] + r
    ...     if (i + u)% 4 == 0:
    ...         r = ' ' + r
    ...
    >>> r
    '** 1234 5678'
    >>>
    Utiliser des fonctionnalit�s un peu plus �volu�es de Python, optimiser le code,... mais on doit retrouver un air de d�j� vu avec de petites variations dans les 2 codes.

    - 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. Espace dans une cha�ne de caract�res
    Par Dan25 dans le forum VBScript
    R�ponses: 2
    Dernier message: 25/02/2011, 19h30
  2. [WebI XiR2] Suppression d'un espace dans une cha�ne de caract�res
    Par SGA99 dans le forum D�buter
    R�ponses: 6
    Dernier message: 02/12/2010, 17h12
  3. Supprimer les espaces dans une cha�ne de caract�re
    Par Med_be dans le forum D�buter
    R�ponses: 7
    Dernier message: 15/11/2010, 03h17
  4. R�ponses: 16
    Dernier message: 19/11/2008, 12h02
  5. Effacer les espaces dans une cha�ne de caract�res
    Par JohnnyWalk dans le forum D�buter avec Java
    R�ponses: 16
    Dernier message: 19/07/2007, 14h13

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