Informatique

Question

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

1 Réponse

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

Autres questions