Le problème est assez simple : quand tu boucles sur les caractères d’une chaîne, la variable de la boucle (ici letter
) n’existe que dans la boucle, et est indépendante. La modifier ne va pas changer la lettre correspondante dans la chaîne.
Ainsi, ici, ce que tu fais, c’est pour chaque lettre du mot :
- crées une variable ayant la lettre pour valeur ;
- modifie cette variable dans le corps de la boucle ;
- puis, en arrivant à la fin du corps de la boucle, supprime la variable (c’est implicite, c’est Python qui fait ça tout seul car elle n’est plus utilise).
Comme la variable n’est pas liée à la xème lettre dans le mot
, ça ne change pas ce dernier.
Pour faire ce genre de remplacements, le plus simple est de passer par une expression régulière.
Pour garder la même structure de code, il est aussi possible de :
- transformer le mot en une vraie liste ;
- itérer sur les indexes (
for i in range(len(la_liste_des_lettres_du_mot))
) ; et
- modifier chaque élément de la liste via son index (là, ce sera lié à la liste d’origine) (
la_liste_des_lettres_du_mot[i] = blalabla
).
Pour créer une liste de caractères à partir d’une chaîne de caractères, tu peux utiliser quelque chose comme ça :
>>> mot = "patate"
>>> la_liste_des_lettres_du_mot = list(iter(mot))
>>> la_liste_des_lettres_du_mot
['p', 'a', 't', 'a', 't', 'e']
iter
va retourner un itérateur sur les caractères du mot, et list
va mettre ces caractères dans une vraie liste, en gros.