👤

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

© 2024 IDNLearn. All rights reserved.