Problème boucle for
Fermé
ikky33
Messages postés
43
Date d'inscription
samedi 21 juillet 2018
Statut
Membre
Dernière intervention
7 janvier 2020
-
Modifié le 6 janv. 2020 à 20:41
rayman10 - 11 janv. 2020 à 14:44
rayman10 - 11 janv. 2020 à 14:44
A voir également:
- Problème boucle for
- Downloader for pc - Télécharger - Téléchargement & Transfert
- Copytrans heic for windows - Télécharger - Visionnage & Diaporama
- Download instagram for pc - Télécharger - Divers Communication
- Idm for mac - Télécharger - Téléchargement & Transfert
- Whatsapp for pc - Télécharger - Messagerie
9 réponses
M3NSONG3
Messages postés
615
Date d'inscription
mardi 16 avril 2013
Statut
Membre
Dernière intervention
4 novembre 2021
162
6 janv. 2020 à 20:29
6 janv. 2020 à 20:29
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.
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.
ikky33
Messages postés
43
Date d'inscription
samedi 21 juillet 2018
Statut
Membre
Dernière intervention
7 janvier 2020
6 janv. 2020 à 20:38
6 janv. 2020 à 20:38
merci de m'avoir répondu mais je ne vois pas comment faire
M3NSONG3
Messages postés
615
Date d'inscription
mardi 16 avril 2013
Statut
Membre
Dernière intervention
4 novembre 2021
162
6 janv. 2020 à 20:42
6 janv. 2020 à 20:42
Explique moi vraiment ce que tu veux faire, car je comprends pas bien... Tu veux remplacer quel caractère par quoi ?
ikky33
Messages postés
43
Date d'inscription
samedi 21 juillet 2018
Statut
Membre
Dernière intervention
7 janvier 2020
6 janv. 2020 à 20:50
6 janv. 2020 à 20:50
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(" ")
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
M3NSONG3
Messages postés
615
Date d'inscription
mardi 16 avril 2013
Statut
Membre
Dernière intervention
4 novembre 2021
162
Modifié le 6 janv. 2020 à 21:11
Modifié le 6 janv. 2020 à 21:11
D'accord, alors dans ton code, je vois plusieurs problèmes :
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 ?
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 ?
ikky33
Messages postés
43
Date d'inscription
samedi 21 juillet 2018
Statut
Membre
Dernière intervention
7 janvier 2020
6 janv. 2020 à 21:30
6 janv. 2020 à 21:30
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(" ")
M3NSONG3
Messages postés
615
Date d'inscription
mardi 16 avril 2013
Statut
Membre
Dernière intervention
4 novembre 2021
162
Modifié le 6 janv. 2020 à 21:55
Modifié le 6 janv. 2020 à 21:55
Je t'ai tapé ça vite fait:
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 !
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 !
ikky33
Messages postés
43
Date d'inscription
samedi 21 juillet 2018
Statut
Membre
Dernière intervention
7 janvier 2020
7 janv. 2020 à 08:34
7 janv. 2020 à 08:34
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 :)
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
615
Date d'inscription
mardi 16 avril 2013
Statut
Membre
Dernière intervention
4 novembre 2021
162
9 janv. 2020 à 23:08
9 janv. 2020 à 23:08
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.
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.