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

  1. #1
    Futur Membre du Club
    [Aide] Ajouter des espaces dans une chaine de caractère
    Bonjour a tous !
    Jai un petit code a faire dans lequel je doit ajouter un espace tout les 4 caractèr.
    C'est un chapitre qui porte sur les divisions donc je doit les utiliser.

    Pour le moment j'ai fait ça :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    def decoupeChaine(mot):
        '''Signature : Fonction decoupeChaine(ch : String) : String'''
        for i in range(13):
            if i%4==0 and i>0:
                mot = mot[:i] + " " + mot [i:]
        return mot
    print(decoupeChaine('01234567891011'))


    Le programme me retourne ça :
    0123 456 789 1011
    Je pense que l'erreur vient du fait qu'il compte l'espace dans i et qu'il ajoute donc un espace trop tôt.

    Si vous pouviez m'aider ça serait cool. Merci d'avance !

  2. #2
    Futur Membre du Club
    Problème réglé !
    Au final j'ai trouvé, j'ai fait comme ça :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    def decoupeChaine(mot):
        '''Signature : Fonction decoupeChaine(ch : String) : String'''
        motRep = ""
        for ind in range (14) :
            if ind % 4==0 and ind > 1:
                motRep = motRep + " " + mot[ind]
            else:
                motRep = motRep+ "" + mot[ind]
        return motRep
    print(decoupeChaine("01234567891011"))


    Mais si vous avez des idées pour améliorer ça je dis pas non ! ^^

  3. #3
    Expert éminent sénior
    Salut,

    Citation Envoyé par Tim._. Voir le message
    Je pense que l'erreur viens du fait qu'il compte l'espace dans i et qu'il ajoute donc un espace trop tôt.
    Tout à fait.
    Une solution serait de créer une nouvelle chaine de caractères sans toucher au mot de départ.

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

  4. #4
    Membre habitué
    Il existe plein de solutions sur Internet qui pourrait t'inspirer, même si ce n'est pas exactement ce que tu demandes.

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    mot = "abcdefghijklmnopqrstuvwxyz"
    def split_by_n(seq, n):
        while seq:
            yield seq[:n]
            seq = seq[n:]        
    list(split_by_n(mot,4))


    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
     
    mot = "abcdefghijklmnopqrstuvwxyz"
    [mot[i:i+4] for i in range(0, len(mot), 4)]


    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    mot = "abcdefghijklmnopqrstuvwxyz"
    list(map(''.join, zip(*[iter(mot)]*4)))
    #Le résultat est différent il n'y aura pas les 2 dernières lettres


    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    import re
    mot = "abcdefghijklmnopqrstuvwxyz"
    re.findall('....',mot)
    #Idem le résultat est différent il n'y aura pas les 2 dernières lettres


    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    from itertools import zip_longest
    mot = "abcdefghijklmnopqrstuvwxyz"
    def grouper(iterable, n, fillvalue=None):
        args = [iter(iterable)] * n
        return zip_longest(*args, fillvalue=fillvalue)
    grouper(mot, 4)
    #Renvoie une liste de tuples

  5. #5
    Membre éprouvé
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    foo = lambda s:len(s)>4 and s[:4]+" "+foo(s[4:]) or s
     
    print(foo("abcdefghijklmnopqrstuvwxyz"))


    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    abcd efgh ijkl mnop qrst uvwx yz

###raw>template_hook.ano_emploi###