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 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(" ")
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 ?
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(" ")
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 !
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 :)
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.