Python remplacer un caractère dans une chaine

Python remplacer un caractère dans une chaine - Python - Programmation

Marsh Posté le 15-11-2018 à 19:12:14    

Bonsoir à tous , je dois faire un pendu et j'aimerais remplacer les caractères d'une chaine par ceux d'une autre à une certaine position
Avec admettons :
mot_machine='TEST'
mot_joueur='****'
lettre='E'

Code :
  1. def devoile_lettre(lettre,mot_joueur, mot_machine):
  2.     for i in range(1,len(mot_joueur)):
  3.         if(mot_machine[i]==lettre):
  4.             mot_joueur[i]=lettre
  5.     print(mot_joueur)


 
Je suis conscients qu'on ne peut pas faire d'opérations comme celle-ci sur les chaines et j'aimerais une alternative, j'ai déjà essayé avec chaine.replace()
 
Merci beaucoup :)

Reply

Marsh Posté le 15-11-2018 à 19:12:14   

Reply

Marsh Posté le 15-11-2018 à 19:16:25    

Bonjour,
 
Une solution possible : https://stackoverflow.com/questions [...] tain-index
 
dd

Reply

Marsh Posté le 15-11-2018 à 19:39:31    

Je ne trouve pas de solution dans ce que tu m'as envoyé
j'essaie des choses comme ça mot_joueur[i].replace('',lettre)...
 
Je précise qu'en cours on a vu que les choses basiques c-a-d les chaines les boucles while for et au niveau des chaines ça ne va pas plus loin que ch.upper() etc ...

Reply

Marsh Posté le 15-11-2018 à 19:40:44    

Pourquoi remplacer ? ré-écris le mot, non ?


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Marsh Posté le 15-11-2018 à 19:43:37    

c'est à dire ? éclaire ma lanterne, as-tu un exemple ?

Reply

Marsh Posté le 15-11-2018 à 20:12:45    

Ah ben en fait c'est ce que tu as mis comme code ce que je voulais que tu fasses. Mais tu n'as pas vraiment bon au niveau de l'algo.
 
 
pseudo-code :

Code :
  1. nombre_essais
  2. mot_a_decouvrir
  3. mot_decouvert
  4. lettre
  5. longueur_mot
  6. i
  7. j
  8. affecter nombre_essais
  9. affecter mot_a_decouvrir
  10. affecter longueur mot_a_decouvrir à longueur_mot
  11. Pour i allant de 0 à longeur_mot
  12.    affecter "*" à mot_decouvert[i]
  13. Fin Pour
  14. afficher mot_decouvert
  15. Pour j allant de 1 à nombre_essais
  16.    demander lettre
  17.    Pour i allant de 0 à longeur_mot
  18.       Si mot_decouvert[i] égale à "*" et mot_a_decouvrir[i] égale à lettre alors
  19.          affecter lettre à mot_decouvert[i]
  20.       Fin Si
  21.    Fin Pour
  22. Fin Pour


 
Sinon il suffit de googler (python string) pour trouver des fonctions sur les chaînes. [:inick:4]


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Marsh Posté le 15-11-2018 à 20:29:13    

Code :
  1. affecter lettre à mot_decouvert[i]


là est mon problème, je ne trouve pas LA fonction qui permet de faire ça, car dans tous les cas je pourrai pas faire Chaine[i]=quelque chose
 

Reply

Marsh Posté le 15-11-2018 à 21:04:16    

Bah tu me fais tourner en bourrique. :pt1cable:  
J'ai repassé trop vite en revue le sujet après ta réponse, je reprends donc ce que je disais.
 
Les chaînes de caractères en Python sont immuables. Tu dois donc réécrire le mot, dans une nouvelle variable tu concatènes le début du mot, ta lettre puis la fin du mot.
Mon pseudo-code est à modifier légèrement pour utiliser de vraies strings.
Tu peux aussi utiliser une liste plutôt qu'une vraie chaîne de caractères, dans quel cas tu retrouves le pseudo-code que j'ai proposé.
 
Pour récupérer le début ou la fin du mot il faut utiliser les indexes : chaîne[début:fin].
 
nouveau_mot = chaîne[0:indice-1] + lettre + chaîne[indice+1:longueur_mot]


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Marsh Posté le 15-11-2018 à 21:07:41    

ahh oui merci bcp j'avais pas pensé à ça milles mercis

Reply

Marsh Posté le 15-11-2018 à 21:30:07    

Nestati a écrit :

ahh oui merci bcp j'avais pas pensé à ça milles mercis


 
Sinon en se fondant sur le lien  => https://stackoverflow.com/questions [...] tain-index
 

Code :
  1. def replace_str_index(text, index=0, replacement=''):
  2.     return text[:index] + replacement + text[index+1:]


 
Ce qui revient en gros à faire ce que disait MaybeEijOrNot (modulo la petite erreur des index en moins).

Reply

Marsh Posté le 15-11-2018 à 21:30:07   

Reply

Marsh Posté le 15-11-2018 à 22:27:36    

dede_sav a écrit :

(modulo la petite erreur des index en moins).


Bien vu, ce n'est pas indice-1 mais bien indice pour le premier terme.
Sinon je n'avais pas regardé le lien, donc en effet le lien donnait la bonne réponse (et sans petite faute). Oui je suis allé trop vite à chacun de mes passages sur ce sujet.

 

Sinon, ce qu'il faut retenir, c'est que pour des problèmes où le contexte importe peu, Google donne très efficacement des réponses. Et du côté de la programmation, en détaillant bien le contexte dans la recherche, on peut généralement y arriver relativement rapidement à trouver la solution.
Aujourd'hui c'est inconcevable de vouloir faire de la programmation sans avoir les bases de l'informatique, et la recherche Google fait parti des bases de l'informatique.


Message édité par MaybeEijOrNot le 15-11-2018 à 22:28:16

---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Marsh Posté le 15-11-2018 à 22:34:01    

Pour te répondre Maybe , j'ai vraiment recherché sur peut être 15 sites différents la réponse , rien ne me convenait.
Et pour les bases j'ai fait deux ans de langage C durant mes études.


Message édité par Nestati le 15-11-2018 à 22:34:27
Reply

Marsh Posté le 15-11-2018 à 22:43:22    

Ce que je veux dire, c'est que la programmation c'est déjà un stade avancé de l'informatique on va dire. Donc normalement tu passes au stade avancé quand tu as les bases.
C'est comme si quelqu'un venait demander de l'aide pour le calcul d'une intégrale sans savoir faire une division euclidienne. C'est un peu déroutant...
Mais tu n'es pas le seul, c'est simplement que ça m'interloque à chaque fois.
 
Tu as fait quoi comme recherche ? Parce que si je tape "Python String" ou "Python string modify" je pense que je trouve la réponse dans les 5 premiers liens à chaque fois...
 
Après moi je m'en fous, c'est juste que si tu veux faire de la programmation tu es obligé d'apprendre à utiliser google et une doc autrement tu ne peux pas avancer.


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Marsh Posté le 04-05-2019 à 19:32:11    

Comme l'a dit Maybe, la bonne pratique en général pour faire du replace sur un type immuable c'est de construire son équivalent sous forme de list() et de jouer sur la list.


---------------
MSI Z390 Godlike * Core i9 9900K * G.SKILL Trident 32Go 3200Mhz * MSI RTX 2080Ti Duke OC * G502/K70 Lux MKII * BeQuiet Dark Pro v2 * Zowie XL2540 240Hz * BENQ BL3201 PT
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed