Bonjour j'ai besoin d'aide pour mon devoir, le but du devoir était de faire le jeu pendu. J'ai fait le programme mais il y a quelques défauts comme : - Lorsqu'o
Question
le but du devoir était de faire le jeu pendu.
J'ai fait le programme mais il y a quelques défauts comme :
- Lorsqu'on gagne ça n'affiche pas qu'on a gagné
- Lorsqu'on perd ça n'affiche pas le mot qu'il fallait trouvé
Voici le programme qu'il faut améliorer :
import random
def jouer():
print("Le Jeu Pendu Commence :")
pendu_logique()
msg = input("J pour jouer :")
if msg == 'j':
return
else:
exit
def affichage(n):
pendu=["""
""",
"""
+-------+
| |
| O
| -|-
| | |
|
==============
""",
"""
+-------+
| |
| O
| -|-
| |
|
==============
"""
,
"""
+-------+
| |
| O
| -|-
|
|
==============
""",
"""
+-------+
| |
| O
| -|
|
|
==============
"""
"""
+-------+
| |
| O
| |
|
|
==============
""",
"""
+-------+
| |
| O
|
|
|
==============
""",
"""
+-------+
|
|
|
|
|
==============
"""
]
return pendu[n]
def pendu_logique():
fichier = open("tous_les_mots.txt","r")
list_des_mots = fichier.readlines()
fichier.close()
mot = random.choice(list_des_mots)
n = 6
A = len(mot)-1
vides = '_'*A
lettres = []
win = False
while (n>0):
print(affichage(n)+'\n')
lettre = input("Votre lettre ? : "+vides+"\n").upper()
print(len(lettre))
print(len(mot))
if (len(lettre)==len(mot)):
if lettre == mot :
win = True
print('Gagné ! \n')
break
else:
n=n-1
continue
for i in range(len(vides)):
if mot[i]==lettre:
l = list(vides)
l[i]=lettre
vides = ''.join(l)
if mot.find(lettre) == -1 or (lettre in lettres):
n=n-1
lettres.append(lettre)
if vides == mot :
win = True
print('Gagné ! \n'+mot)
break
if not(win):
print(affichage(n)+'\n')
print("Perdu !")
else:
print("Gagné !")
print("Appuie sur Run pour recommencer")
pendu_logique()
if '_name_'=='_main_':
jouer()
1 Réponse
-
1. Réponse LilianBND
Réponse :
Bonjour, tout d'abord, bravo pour ton code python, il est vraiment pas mal continue à t'exercer, cherche sur internet quand tu as une erreur ou quelques chose que tu ne sais pas, tu trouveras forcément ;)
Pour ce qui est de ton code, je l'ai optimisé:
- on utilise plus open() dans une variable pour utiliser un fichier, utilise with open() as file.
- j'ai restructuré le code afin que les lettres s'affichent sur les pointillés :)
- j'ai fais en sorte de garder un code simple pour que tu puisses le lire et le comprendre, si tu as des questions n'hésite pas à me les poser.
PS: la ligne " os.system('cls') " qui permet de nettoyer la console ne marche que sur un environnement Windows.
Python :
import os
import random
def affichage(n):
pendu = [
"""
+-------+
| |
| O
| -|-
| | |
|
==============
""",
"""
+-------+
| |
| O
| -|-
| |
|
==============
"""
,
"""
+-------+
| |
| O
| -|-
|
|
==============
""",
"""
+-------+
| |
| O
| -|
|
|
==============
""",
"""
+-------+
| |
| O
| |
|
|
==============
""",
"""
+-------+
| |
| O
|
|
|
==============
""",
"""
+-------+
|
|
|
|
|
==============
"""
]
return pendu[n]
def pendu_logique():
global n, writable_mot, for_list_mot
with open("tous_les_mots.txt", "r") as file:
list_des_mots = file.readlines()
for i in list_des_mots:
i.replace('\n', '') # supprime les '\n' dans les éléments de la liste
readable_mot = random.choice(list_des_mots)
writable_mot = readable_mot
for_list_mot = readable_mot
n = 6 # index de la liste pendu
lettres_trouvees = []
for i in range(1, len(readable_mot)):
lettres_trouvees.append('-')
def pendu_affichage():
global n, writable_mot, for_list_mot
while (n > 0):
os.system('cls') # nettoie le cmd
if str(''.join(lettres_trouvees)).split() == str(readable_mot).split():
print("You win !\nLe mot était", readable_mot)
return
print("longueur du mot:", len(readable_mot))
print(affichage(n) + '\n')
print(" ", ''.join(lettres_trouvees))
lettre = input("\nVotre lettre : ")
if len(lettre) > 1 or lettre == "" or lettre == " ":
# ne compte pas, redemande une saisie
pendu_affichage()
if lettre in writable_mot:
while lettre in writable_mot:
lettre_index = writable_mot.find(lettre)
lettre_index_for_list = for_list_mot.find(lettre)
lettres_trouvees[lettre_index_for_list] = lettre
for_list_mot = for_list_mot.replace(for_list_mot[lettre_index_for_list], '-', 1)
print(for_list_mot)
writable_mot = writable_mot.replace(writable_mot[lettre_index], '', 1)
else:
n -= 1
print(affichage(n) + '\n')
print("Perdu !\nLe mot était", readable_mot)
return
pendu_affichage()
if __name__ == "__main__":
print("Le Jeu Pendu Commence :")
pendu_logique()