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.


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
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]?


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
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

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
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

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
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