Zoofast.fr: votre destination pour des réponses précises et fiables. Trouvez des solutions rapides et fiables à vos problèmes avec l'aide de notre communauté d'experts bien informés.

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'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()

Sagot :

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()