Construction de chaine avec termcolor

Résolu
ArcadePi3 Messages postés 5 Statut Membre -  
ArcadePi3 Messages postés 5 Statut Membre -
Bonjour,

Je suis débutant en python et je me retrouve face à un problème de construction de chaines. En effet j'utilise "termcolor" pour mettre des caractères en couleur dans ma console. Ce que je veux faire est remplacer un caractère en couleur dans une chaine par un autre qui n'est pas en couleur.

Voici mon code :



Lorsque j'appelle ma fonction en mettant le paramètre "n_ieme" à 1 j'obtiens bien ceci :


Mais lorsque je veux changer celui de droite en mettant "n_ieme" à 2 j'obtiens ça :


Si quelqu'un pouvait m'éclairer sur comment remplacer l'oeil de droite par "o" sans toucher à celui de gauche.

Merci d'avance

2 réponses

  1. trifou
     
    Bonjour,

    Pas vraiment besoin d'utiliser str.find alors qu'un simple parcours des caractères de la chaine suffit.

    chaine = '   O.O   '
    a_remplacer = 'O'
    remplacement = '*'
    enieme = 0
    
    
    pos = -1
    for i, car in enumerate(chaine):
        if car == a_remplacer:
            pos += 1
            if pos == enieme:
                chaine = chaine[:i] + remplacement + chaine[i+1:]
                break
    
    print(chaine)


    Si a_remplacer peut être une chaine et non un seul caractère, une petite adaptation permet de le faire.

    chaine = '   OO.OO   '
    a_remplacer = 'OO'
    remplacement = '*'
    enieme = 1
    
    pos = -1
    lar = len(a_remplacer)
    for i in range(len(chaine) - lar):
        if chaine[i:i + lar] == a_remplacer:
            pos += 1
            if pos == enieme:
                chaine = chaine[:i] + remplacement + chaine[i+lar:]
                break
    
    print(chaine)


    PS: La prochaine fois poste du code plutôt que des images, entre balises codes du forum.
    1
  2. ArcadePi3 Messages postés 5 Statut Membre 1
     
    Merci de ta réponse trifou,

    J'ai essayé d'utilisé ta méthode et en effet elle fonctionne, je ne sais pas si c'est à cause de l'encodage autour du caractère en couleur mais lorsque j'essaye ce code :

    from termcolor import colored
    
    oeil_bleu = colored("*","blue")
    
    chaine = "  ({0}.{1})     ".format(oeil_bleu, oeil_bleu)
    
    a_remplacer = oeil_bleu
    remplacement = 'o'
    enieme = 0
    
    print(chaine)
    
    pos = -1
    for i, car in enumerate(chaine):
        if car == a_remplacer:
            pos += 1
            if pos == enieme:
                chaine = chaine[:i] + remplacement + chaine[i+1:]
                break
    
    print(chaine)


    La chaine n'a pas été modifiée, est-ce qu'il y a quelque chose que je fais mal ?
    0
    1. trifou
       
      oeil_bleu est une chaîne de plusieurs caractères.

      Alors utilise la seconde solution que je t'ai donnée, qui devrait fonctionner ;)
      0
      1. ArcadePi3 Messages postés 5 Statut Membre 1 > trifou
         
        Super c'est exactement ce que je voulais faire merci beaucoup trifou ! :)
        1