IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

jeu du pendu avec python


Sujet :

Python

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Lycéen
    Inscrit en
    Mai 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2013
    Messages : 2
    Points : 1
    Points
    1
    Par défaut jeu du pendu avec python
    Bonjour, je suis en ISN (spé de TermS) et je bloque avec un camarade sur le projet qu'on doit présenter au bac.
    Il s'agit d'un programme python du jeu du pendu avec de l'interface graphique (tkinter). On a une partie du programme mais il y a des erreurs qu'on arrive pas à résoudre. Les règles sont simples, on a 13essais pour entrer une lettre et on ne peut pas rentrer de mots directement ( on fait une version très simplifié car nous avons pas un bon niveau) . On ne sait pas trop se qu'il faut modifier pour que notre programme fonctionne.
    Il nous reste que 3semaines pour le finir. Merci de nous aider
    Fichiers attachés Fichiers attachés

  2. #2
    Membre expert
    Avatar de Golgotha
    Homme Profil pro
    Full-stack Web Developer
    Inscrit en
    Août 2007
    Messages
    1 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Full-stack Web Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2007
    Messages : 1 386
    Points : 3 531
    Points
    3 531
    Billets dans le blog
    1
    Par défaut
    Bonsoir,

    Je n'ai pas trop le temps de détailler les (millier ?) d'erreurs de votre programme, mais je reviendrais demains, pour vous faire un topo sur tout ça.

    En repartant de votre programme, quelques chose de minimaliste serais de ce type :

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    # -*- coding: utf8 -*-
     
    from Tkinter import * 
    import tkMessageBox
    import random
     
    from random import choice
     
    trouver = lambda mot, lettre: [i for i, car in enumerate(mot) if car==lettre]
     
    class Pendu(Frame): 
        def __init__(self, parent): 
            Frame.__init__(self, parent) 
            self.mot_claire = ""
            self.mot_cache  = ""
            self.nb_try = 0
     
            #self.Parent.title("Le jeu du pendu")
     
            bouton = Button(self, text='Quitter', command=self.destroy)
            bouton.grid(row=0 , column=0)
     
            bouton = Button(self, text='Jouer', command = self.init_game)
            bouton.grid(row=1 , column=0, sticky='E')
     
            bouton = Button(self, text='OK', command= self.play)
            bouton.grid(row=2 , column=0,sticky='E')
     
            bouton= Button(self, text='Instructions', command= self.regle)
            bouton.grid(row=3 , column=0,sticky='E')
     
            label = Label(self, text='Mot à trouver:')
            label.grid(row =0, column=1)
     
            label = Label(self, text='Entrez votre lettre:')
            label.grid(row =1, column=1)
     
            self.entry = Entry(self)
            self.entry.grid(row =0, column =2)
     
            self.user_entry = Entry(self)
            self.user_entry.grid(row =1, column =2)
     
        def regle():
            pass
     
        def try_letter(self, letter):
            solve = trouver(self.mot_claire, letter)
            if len(solve) > 0 :
                tab = list(self.mot_cache)
                for place in solve :
                    tab[place] = letter
                self.mot_cache = "".join(tab)
     
        def refresh(self):
            self.entry.delete(0, END)
            self.entry.insert(0, self.mot_cache)
     
        def init_mot(self):
            liste=["riz","chameau"]
            self.mot_claire = choice(liste)
            self.mot_cache  = ''.join(['-' for lettre in self.mot_claire]) 
     
        def init_game(self):
            self.init_mot()
            self.refresh()
     
        def win_loss(self):
            if self.nb_try > 13 :
                tkMessageBox.showinfo(self, message = "Vous avez perdu !")
            else :
                if '-' not in self.mot_cache :
                    tkMessageBox.showinfo(self, message = "Vous avez gagné !")
     
        def play(self):
            saisie = self.user_entry.get()
            self.user_entry.delete(0, END)
            if saisie not in self.mot_claire :
                self.nb_try += 1
                tkMessageBox.showinfo(self, message = "La lettre n'appartient pas au mot")
                return False
            else:
                self.try_letter(saisie)
                self.refresh()
            self.win_loss()
     
    root = Tk() 
    pendu = Pendu(root) 
    pendu.pack() 
    root.mainloop()

    Demains je viens vous donner les explications.
    Consultant et développeur full-stack spécialiste du Web
    faq jQuery - règles du forum - faqs web

  3. #3
    Nouveau Candidat au Club
    Femme Profil pro
    Lycéen
    Inscrit en
    Mai 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2013
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Ah ouai quand même! On a pas du tout vu sa en cours, on a fait qu'une initiation donc on a que quelques bases pour python. Mais j'attend vos expliquations.Merci !!

  4. #4
    Membre expert
    Avatar de Golgotha
    Homme Profil pro
    Full-stack Web Developer
    Inscrit en
    Août 2007
    Messages
    1 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Full-stack Web Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2007
    Messages : 1 386
    Points : 3 531
    Points
    3 531
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    On va commencer par les erreurs de votre programme :

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    def motmasqué(chaine,liste_Indices=0)

    • Jamais d'accent dans du code.
    • Essayer d'utiliser l'anglais si possible
    • Essayer de séparer les mots, pas un underscore ou des majuscules. (hideWord ou hide_Word)


    Une bonne manière de définir cette fonction aurait été :

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    def hide_Word(word)

    La suite.

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
        i=0                                                     
        length=len(chaine)                                      
        listeEtalon=[]                                          
        ch=""   
     
        for i in range (0,length,1):                            
            if type(liste_Indices)==type(listeEtalon):          
                if len(liste_Indices)==0:                                            
                    ch=ch+'-'                                       
                else:                                           
                    j=0
                    for j in range(len(liste_Indices)):         
                        if liste_Indices[j]==i:                 
                            ch=ch+chaine[i]
                    if i+1!=len(ch):                            
                        ch=ch+'-'
            else:
                ch=ch+'-'
        return ch

    1. Itération en python


    Il faut savoir qu'en python il est très rare de faire :

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    liste_courses = ['soda', 'tomates', 'bananes']

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for i in range(len(liste_courses)) :
        print liste_courses[i]

    On va direcetment à l'essentiel en itérant sur la liste.

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for elem in liste_courses :
        print elem

    Donc sur cette fonction, qui sert à rempalcer les lettres d'un mot par un autre charactère, il suffit de pas grand chose :

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    mot_cache  = ''.join(['-' for lettre in mot_claire])

    Explication.

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    ['-' for lettre in mot_claire]

    Cette partie fait un tableau avec autant de tiret qu'il y à de lettre dans la variable mot_claire (là ou le mot à trouver se trouve)


    Cette partie transforme le tableau en chaîne de caractère.

    Continuons :

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    def Test_Lettre(saisie,mot):                                
        i=0
        length=len(mot)                                          
        li=[]                                                   
        for i in range (0,length,1):                            
            if mot[i]==saisie:                                  
                li.append(i)
        return li

    Ici on veux retourner un tableau avec les indices des lettres qu'on a éventuellement trouvé :

    On peux utiliser avantageusement la fonction enumerate de python.

    Regardons ça de plus près.

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> mot = 'cedric'
    >>> enumerate(mot)
    >>> [i for i in enumerate(mot)]
     
    [(0, 'c'), (1, 'e'), (2, 'd'), (3, 'r'), (4, 'i'), (5, 'c')

    On a donc, un tableau avec l'indice et la lettre, maintenant, si on combine ça avec un filtre :

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> [i for i,c in enumerate(mot) if c == 'c']
    [0, 5]

    Et voilà ! on à bien un tableau avec les indices du charactère 'c'

    Notre fonction peu donc devenir :

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def Test_Lettre(saisie,mot):                                
        return [i for i,c in enumerate(mot) if c == saisie]

    Suite à venir...
    Consultant et développeur full-stack spécialiste du Web
    faq jQuery - règles du forum - faqs web

Discussions similaires

  1. Jeu du pendu en python
    Par Amira_Mir dans le forum Général Python
    Réponses: 11
    Dernier message: 20/05/2015, 16h28
  2. Pendu avec randrange (Python 3)
    Par tonykart13 dans le forum Général Python
    Réponses: 6
    Dernier message: 04/12/2011, 14h50
  3. Réponses: 4
    Dernier message: 24/03/2006, 13h54
  4. Les 128 derniers bits d'un fichier en ligne avec Python ?
    Par ecocentric dans le forum Réseau/Web
    Réponses: 7
    Dernier message: 26/09/2005, 12h40
  5. probleme pour un jeu de dames en python
    Par doudou152 dans le forum Général Python
    Réponses: 7
    Dernier message: 22/04/2005, 14h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo