Construction de chaine avec termcolor

Résolu/Fermé
ArcadePi3 Messages postés 4 Date d'inscription dimanche 26 janvier 2020 Statut Membre Dernière intervention 1 juin 2020 - 26 janv. 2020 à 17:06
ArcadePi3 Messages postés 4 Date d'inscription dimanche 26 janvier 2020 Statut Membre Dernière intervention 1 juin 2020 - 26 janv. 2020 à 20:06
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

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 dimanche 26 janvier 2020 Statut Membre Dernière intervention 1 juin 2020 1
26 janv. 2020 à 19:25
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
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 dimanche 26 janvier 2020 Statut Membre Dernière intervention 1 juin 2020 1 > trifou
26 janv. 2020 à 20:06
Super c'est exactement ce que je voulais faire merci beaucoup trifou ! :)
1