Problème boucle for

Signaler
Messages postés
43
Date d'inscription
samedi 21 juillet 2018
Statut
Membre
Dernière intervention
7 janvier 2020
-
 rayman10 -
Bonjour,


pouvez vous m'aider svp, quand je lance ce code, le mot appelé mot est toujours "patate" alors que je veux le changer en "..t.t.", merci d'avance :
mot = "patate"
for letter in mot :
    if letter != "p":
        letter = "."
    else :
        letter = "p"
print(mot)




Configuration: Windows / Chrome 79.0.3945.88

9 réponses

Messages postés
523
Date d'inscription
mardi 16 avril 2013
Statut
Membre
Dernière intervention
11 janvier 2020
72
Salut !
En réalité là tu n'édites pas du tout ta chaîne, voilà pourquoi le résultat ne change pas. Le plus simple dans ce cas est de crée une deuxième chaîne qui va te servir d'intermédiaire. De plus ton explication ne correspond pas à ce que ton code fait du tout...
Avec ton code je supposerais que tu veux changer les "p" en "." et les autres lettres en "p", sauf que tu ne dis pas ça dans ton explication...

Dans tous les cas, en changeant ta variable "letter" tu ne fais que changer une variable crée par ta boucle for, et tu ne changes pas directement ton string.
Messages postés
43
Date d'inscription
samedi 21 juillet 2018
Statut
Membre
Dernière intervention
7 janvier 2020

merci de m'avoir répondu mais je ne vois pas comment faire
Messages postés
523
Date d'inscription
mardi 16 avril 2013
Statut
Membre
Dernière intervention
11 janvier 2020
72
Explique moi vraiment ce que tu veux faire, car je comprends pas bien... Tu veux remplacer quel caractère par quoi ?
Messages postés
43
Date d'inscription
samedi 21 juillet 2018
Statut
Membre
Dernière intervention
7 janvier 2020

En fait je veux faire un pendu, voici mon code, la partie qui ne marche pas c'est celle ou ça commence par for letter in rep : ..., je vois pas comment expliquer mais regarde :
def pendu():
    joueur1 = str(input("Entre ton mot joueur1 : "))
    print(" ")
    print("A toi de trouver le mot joueur2 !")
    a = 11
    rep = " "*len(joueur1)
    rep = joueur1
    
    for i in range(11):
        print("- Tours restants : ", a)
        a = a - 1
        joueur2 = str(input("Lettre : "))
        
        for letter in rep :
            if letter != joueur2 :
                letter = "."
            else :
                letter = joueur2
        print(rep)
        
        if rep == joueur1 :
            print("                   -fin-")
        
        break
        print(" ")
Messages postés
523
Date d'inscription
mardi 16 avril 2013
Statut
Membre
Dernière intervention
11 janvier 2020
72
D'accord, alors dans ton code, je vois plusieurs problèmes :
    rep = " "*len(joueur1)
    rep = joueur1

Pourquoi lui donner une valeur pour la remplacer de suite par une autre ?

Ensuite, évites les breaks... C'est considéré comme assez sale pour la plupart des gens. Bref pour ce qui est du code lui même.

Je te conseille si tu peux, de passer par des listes, ça sera le plus simple. Tu pourras passer par deux listes différentes et plus facilement traiter avec les index. Par exemple, si le joueur1 entre "hello" la liste sera ["h", "e", "l", "l", "o" ] ensuite ta liste 2 sera : [".", ".", ".", ".", "."] (un point par lettre).
Il te suffira ensuite selon la demande du joueur de remplacer les points correspondant aux bonnes lettres (en passant par les index) avec ta première liste.

Je peux te coder un petit exemple commenté si tu veux ?

Messages postés
43
Date d'inscription
samedi 21 juillet 2018
Statut
Membre
Dernière intervention
7 janvier 2020

Ok merci de m'avoir répondu, j'ai essayé ceci mais ce n'est pas avec des listes, peux-tu remplacer le code en mettez les listes stp merci :
def pendu():
    joueur1 = str(input("Entre ton mot joueur1 : "))
    print(" ")
    print("A toi de trouver le mot joueur2 !")
    a = 11
    rep = "."*len(joueur1)
    rep = joueur1
    new_mot = ''
    for i in range(11):
        print("- Tours restants : ", a)
        a = a - 1
        joueur2 = str(input("Lettre : "))

        for letter in rep :
            if letter != joueur2 :
                new_mot += "."
            else :
                new_mot += letter
        print(new_mot)
        
        if new_mot == joueur1 :
            print("                   -fin-")
        print(" ")
Messages postés
523
Date d'inscription
mardi 16 avril 2013
Statut
Membre
Dernière intervention
11 janvier 2020
72
Je t'ai tapé ça vite fait:
def pendu():
 # Variables :
 life = 11  # Nombre de vie
 play = True  # Si on joue encore

 # Le joueur 1 entre le mot a deviner
 player_1 = input("Entrez le nombre a faire deviner")
 player_1 = list(player_1)  # On transforme le mot en liste

 # On génère la liste avec les points :
 temp_list = list("." * len(player_1))

 while life > 0 and play:
  # Le joueur doit perdre une vie à la fin du tour
  loose_life = True
  # On affiche la liste :
  print("Mot : " + "".join(temp_list))
  # Le joueur deux entre sa proposition
  player_2 = input("Lettre:")

  # On cherche les correspondances dans player_1 :
  for index, value in enumerate(player_1):
   if value == player_2:  # Si la lettre correspond
    temp_list[index] = player_2  # On remplace la lettre dans la liste temporaire
    loose_life = False  # Le joueur ne perd pas de vie

  # On vérifie si le joueur a découvert entièrement le mot
  if "." not in temp_list:  # Si il n'y a plus de . dans la liste
   print("Vous avez gagné !")
   play = False

  if loose_life:
   print("Vous perdez une vie")
   life -= 1  # On lui retire une vie

J'ai entièrement commenté le truc, dis moi s'il y a des choses que tu ne comprends pas ? Si c'est dans le cadre d'un truc scolaire, si j'utilise des choses que tu n'as pas vu ? SI oui, verra en conséquence. J'ai essayé de reprendre un maximum ton idée, j'ai juste remplacé la boucle for par une boucle while car : quand on ne sait pas combien de fois on va itérer, on utilise toujours la boucle while !
Messages postés
43
Date d'inscription
samedi 21 juillet 2018
Statut
Membre
Dernière intervention
7 janvier 2020

Bonjour,
merci de m'avoir répondu, j'ai regardé en détail votre code, cependant c'est dans le cadre scolaire donc on a pas encore appris les value, .join ..., on a fait que les bases soit les boucles, tableau, variable et opérateur et les fonctions. Merci pour avoir pris du temps quand même pour m'aider :)
M3NSONG3
Messages postés
523
Date d'inscription
mardi 16 avril 2013
Statut
Membre
Dernière intervention
11 janvier 2020
72
Désolé du retard côté réponse... Je suis moi aussi en examens... On aime le supérieur !

En fait le .join permet de réunir les éléments d'une liste en les séparant par ce que tu mets entre les "". La value n'est qu'une variable, si tu as vu le enumerate() tu l'as peut être vu... Je sais pas le dernière personne que j'ai aidé en python était un prépa et ils l'ont appris en même temps que le for.


Pour utiliser une méthode qui se rapproche au maximum de la tienne sans utiliser de fonction comme join et enumerate, j'ai une autre idée, mais pour cela il faudrait que tu es vu le "in" pour vérifier si quelque chose se trouve dans une liste.
Bonjour,
merci de m'avoir répondu, j'ai effectivement vu le in, c'est donc quoi votre idée ?