Construction de chaine avec termcolor

Résolu
ArcadePi3 Messages postés 4 Date d'inscription   Statut Membre Dernière intervention   -  
ArcadePi3 Messages postés 4 Date d'inscription   Statut Membre Dernière intervention   -
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
A voir également:

2 réponses

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
ArcadePi3 Messages postés 4 Date d'inscription   Statut Membre Dernière intervention   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
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
ArcadePi3 Messages postés 4 Date d'inscription   Statut Membre Dernière intervention   1 > trifou
 
Super c'est exactement ce que je voulais faire merci beaucoup trifou ! :)
1