Pendu Tkinter

Pendu Tkinter - Python - Programmation

Marsh Posté le 25-05-2014 à 18:41:24    

Bonjour, actuellement en Terminale S, je dois rendre mon projet d'ISN dans la semaine, nous avons actuellement une version console du jeu, mais nous n'arrivons pas à l'adapter sur Tkinter pour la rendre plus présentable le jour de l'oral..
Voici le code :  

Code :
  1. from donnees import *
  2. from random import choice
  3. def recup_lettre():
  4.     lettre = input("Tapez une lettre: " )
  5.     lettre = lettre.lower()
  6.     if len(lettre)>1 or not lettre.isalpha():
  7.         print("Vous n'avez pas saisi une lettre valide." )
  8.         return recup_lettre()
  9.     else:
  10.         return lettre
  11. def choisir_mot() :
  12.     return choice(dictionnaire)
  13. def recup_mot_masque(mot_complet, lettres_trouvees):
  14.     mot_masque = ""
  15.     for lettre in mot_complet:
  16.         if lettre in lettres_trouvees:
  17.             mot_masque += lettre
  18.         else:
  19.             mot_masque += "*"
  20.     return mot_masque
  21. continuer = 'Oui'
  22. while continuer == 'Oui':
  23.     mot_a_trouver = choisir_mot()
  24.     lettres_trouvees = []
  25.     mot_trouve = recup_mot_masque(mot_a_trouver, lettres_trouvees)
  26.     while mot_a_trouver!=mot_trouve and chances>0:
  27.         print("Mot à trouver {0} (encore {1} chances)".format(mot_trouve, chances))
  28.         lettre = recup_lettre()
  29.         if lettre in lettres_trouvees:
  30.             print("Vous avez déjà choisi cette lettre." )
  31.         elif lettre in mot_a_trouver:
  32.             lettres_trouvees.append(lettre)
  33.             print("Bien joué." )
  34.         else:
  35.             chances -= 1
  36.             print("Cette lettre ne se trouve pas dans le mot" )
  37.         mot_trouve = recup_mot_masque(mot_a_trouver, lettres_trouvees)
  38.     if mot_a_trouver==mot_trouve:
  39.         print("Félicitations ! Vous avez trouvé le mot {0}.".format(mot_a_trouver))
  40.     else:
  41.         print("PENDU ! Vous avez perdu." )
  42.     continuer = input("Souhaitez-vous continuer la partie (O/N) ? " )
  43.     if continuer == 'O':
  44.         continuer = 'Oui'
  45.         chances=8
  46.     else :
  47.         continuer = 'Non'

Reply

Marsh Posté le 25-05-2014 à 18:41:24   

Reply

Marsh Posté le 26-05-2014 à 09:55:32    

1. Et donc? Avec quoi faut-il de l'aide spécifiquement?
2. Il n'y a pas de séparation entre le modèle (la logique de résolution — du pendu) et l'IO, pas de contrat entre un système d'exécution d'un jeu de pendu et une interface qui se placerait devant, il semble peu étonnant que le portage soit difficile.


---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box, and replicate and expand beyond their wildest dreams by throwing away the limits imposed by overbearing genetic r
Reply

Marsh Posté le 26-05-2014 à 18:00:03    

c'est bon, on est entrain de voir ça avec notre prof, par contre j'ai une question, comme faire pour afficher la première lettre et la dernière lettre du mot à la base?

Reply

Marsh Posté le 26-05-2014 à 18:28:31    

naxe4 a écrit :

c'est bon, on est entrain de voir ça avec notre prof, par contre j'ai une question, comme faire pour afficher la première lettre et la dernière lettre du mot à la base?


s[0] et s[-1]?


---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box, and replicate and expand beyond their wildest dreams by throwing away the limits imposed by overbearing genetic r
Reply

Marsh Posté le 26-05-2014 à 20:57:54    

J'avais pensé à un truc dans le genre  
 
etoiles=""
mot="mot_a_trouver"
for i in range (1,len(mot)-1):
                etoiles=etoiles+"*"
print(mot[0]+etoiles+mot[len(mot)-1])

Reply

Marsh Posté le 26-05-2014 à 21:08:07    

naxe4 a écrit :

J'avais pensé à un truc dans le genre

 

etoiles=""
mot="mot_a_trouver"
for i in range (1,len(mot)-1):
                etoiles=etoiles+"*"
print(mot[0]+etoiles+mot[len(mot)-1])


C'est n'importe quoi.

 

1. pas besoin de prendre la longueur de la chaîne, tu peux indexer de la fin (s[-1] donne le même résultat que s[len(s) - 1] mais est lisible et plus efficace)
2. si tu veux accumuler une chaîne, utilise une list et ''.join() à la fin
3. tu peux n-upler une chaîne en la multipliant (par un entier)
4. string formatting

 
Code :
  1. print("{first}{blanked}{last}".format(
  2.    first=word[0],
  3.    last=word[-1],
  4.    blanked='*' * (len(word) - 2)))


Message édité par masklinn le 26-05-2014 à 21:08:45

---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box, and replicate and expand beyond their wildest dreams by throwing away the limits imposed by overbearing genetic r
Reply

Marsh Posté le 26-05-2014 à 21:25:08    

blanked représente toutes les autres lettres du mot?
 
J'ai pas bien compris l'utilité du .format() et le len(word) - 2  :??:

Reply

Marsh Posté le 26-05-2014 à 22:13:32    

naxe4 a écrit :

blanked représente toutes les autres lettres du mot?


oui.

naxe4 a écrit :

J'ai pas bien compris l'utilité du .format()


Plus clair, évite de faire des concaténations.

naxe4 a écrit :

et le len(word) - 2  :??:


Tu veux tout remplacer par des étoiles sauf les extrémités non? Donc le nombre d'étoiles est la longueur du mot, moins la première lettre, moins la dernière lettre. Soit len(word) - 2.


Message édité par masklinn le 26-05-2014 à 22:13:37

---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box, and replicate and expand beyond their wildest dreams by throwing away the limits imposed by overbearing genetic r
Reply

Marsh Posté le 26-05-2014 à 22:25:51    

okkkk! Je ne sais pas où l'intégrer à mon programme..
Et j'ai juste une dernière question pour être prêt pour mon oral, j'arrive pas à expliquer la ligne  "mot_trouve = recup_mot_masque(mot_a_trouver, lettres_trouvees)"

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed