Pendu inscrit dans tkinter

Fermé
bancel - Modifié par crapoulou le 15/12/2016 à 23:02
_Ritchi_ Messages postés 21288 Date d'inscription samedi 17 mars 2007 Statut Contributeur Dernière intervention 11 novembre 2024 - 16 déc. 2016 à 13:49
Bonjour,
Je suis en premiére et pendant ces vacances nous avons projet de faire le jeu du pendu dans une fenétre Tkinter et je ne comprend pas car il me met des erreurs au niveaux du tracé du dessin pourrait vous m'aidez ?

Voici le programme :

from random import*
from tkinter import*

def choisir_mot(liste):
    """Cette fonction renvoie le mot choisi dans la liste des mots
    liste_mots.

On utilise la fonction du module random ."""
    i=randrange(len(liste))
    return liste[i]

def mot_etoile(a):
   """Fonction permettant de remplacer les lettres par des etoiles """
   l=len(a)
   chaine=""
   for i in range (0,l):
        chaine=chaine+"*"
   return chaine

def recup_lettre():
    """Cette fonction recupere une lettre saisie par
    l'utilisateur. Si la chaine recuperee n'est pas une lettre,
    on appelle en boucle la fonction jusqu'a obtenir une lettre"""

lettre = input("Tapez une lettre: ")
    lettre = lettre.lower()
    if len(lettre)>1 or not lettre.isalpha():
        print("Vous n'avez pas saisi une lettre valide.")
        return recup_lettre()
    else:
        return lettre

#remplace le mot par des etoiles
def remplacer_mot_etoile (mot1,liste):
    mot_cache = ""
    for lettre in mot1:
        if lettre in liste :
            mot_cache += lettre
        else :
            mot_cache += "*"
    return mot_cache

#cette definiton permet de faire les traits a la suite que si le precedent a ete fait
def tracer(n):
    if n>=len(dessin_pendu):
        print ("Pendu, vous avez perdu ! Le mot etait",Mot,)
        exit()

dessin=dessin_pendu[n]
    i=0
    while i < 10:
        if dessin[i+1] is not None :
            dessin[i](dessin[i+1])
        else:
            dessin[i]()
        i+=2


def chaine_lettre (liste):
    lettres=''
    for i in range (0,len(liste)):
        lettres=lettres+'-'+liste[i]
    return lettres.upper()

Fen=Tk()
Cans1=Canvas(Fen,width=150,height=120,background='yellow')
#Definition du dessin de pendu
dessin_pendu = [(Cans1.create_line(50,10,50,110)),
    (Cans1.create_line(50,110,90,110)),
    (Cans1.create_line(50,10,110,10)),
    (Cans1.create_line(110,10,110,20)),
    (Cans1.create_oval(100,20,120,40)),
    (Cans1.create_line(110,40,110,80)),
    (Cans1.create_line(110,55,90,45)),
    (Cans1.create_line(110,55,130,45)),
    (Cans1.create_line(110,80,130,90)),
    (Cans1.create_line(110,80,90,90))]
        #dessin du pendu




#la liste de mot:
liste_mot=[
    "voiture",
    "maison",
    "pierre",
    "portable",
    "casque",
    "ingenieur",
    "son"]

#on recupere les lettres propose

# Notre variable pour savoir quand arrêter la partie
continuer_partie = 'o'

lettres_trouvees = []
#debut de la partie
while continuer_partie != 'n':
    #Debut du jeu

erreur = 0
    while erreur!=9:
        mot=choisir_mot(liste_mot)

mot_trouve=remplacer_mot_etoile(mot,lettres_trouvees)

while mot_trouve!=mot:
            #on definit que on n a fait aucune erreur au debut de la partie
            erreur = 0
            continuer_partie = 'o'
            #On choisit le mot et on l affiche avec les etoile

mot_trouve=remplacer_mot_etoile(mot,lettres_trouvees)
            #Tant que ce que l on a trouve n est pas egal au mot chercher , alors on continue
            print("Mot a trouver {}".format(mot_trouve))
            #ici , on execute la fonction recup_lettre
            lettre = recup_lettre()

if lettre in lettres_trouvees: # La lettre a deja ete choisie
                print("Vous avez deja choisi cette lettre.")
            elif lettre in mot: # La lettre est dans le mot a trouver
                lettres_trouvees.append(lettre)
                print("Bien joue.")
            else:#ce n'est pas la bonne lettre
                lettres_trouvees.append(lettre)
                tracer(erreur)
                erreur+=1
                print("... non, cette lettre ne se trouve pas dans le mot...")

mot_trouve=remplacer_mot_etoile(mot,lettres_trouvees)
            print ('lettres proposées ',chaine_lettre(lettres_trouvees))

if mot==mot_trouve:
            print("Felicitation ! Vous avez trouve le mot {0}.".format(mot))
            exit()


else:
            print("PENDU !!! Vous avez perdu.")

continuer_partie = input("Souhaitez-vous continuer la partie (O/N) ?")
        continuer_partie = continuer_partie.lower()




Merci d'avance

EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.

1 réponse

_Ritchi_ Messages postés 21288 Date d'inscription samedi 17 mars 2007 Statut Contributeur Dernière intervention 11 novembre 2024 6 079
Modifié par _Ritchi_ le 16/12/2016 à 13:56
Bonjour

Voulant t'aider à réfléchir à ton souci, j'ai récupéré le code et j'ai constaté que la mise en forme est un peu olé olé et donc j'ai remis d'aplomb les indentations:

from random import*
from tkinter import*

def choisir_mot(liste):
    """Cette fonction renvoie le mot choisi dans la liste des mots
    liste_mots. On utilise la fonction du module random ."""
    i=randrange(len(liste))
    return liste[i]

def mot_etoile(a):
   """Fonction permettant de remplacer les lettres par des etoiles """
   l=len(a)
   chaine=""
   for i in range (0,l):
        chaine=chaine+"*"
   return chaine

def recup_lettre():
    """Cette fonction recupere une lettre saisie par
    l'utilisateur. Si la chaine recuperee n'est pas une lettre,
    on appelle en boucle la fonction jusqu'a obtenir une lettre"""

    lettre = raw_input("Tapez une lettre: ")
    lettre = lettre.lower()
    if len(lettre)>1 or not lettre.isalpha():
        print("Vous n'avez pas saisi une lettre valide.")
        return recup_lettre()
    else:
        return lettre

#remplace le mot par des etoiles
def remplacer_mot_etoile(mot1,liste):
    mot_cache = ""
    for lettre in mot1:
        if lettre in liste:
            mot_cache += lettre
        else :
            mot_cache += "*"
    return mot_cache

#cette definiton permet de faire les traits a la suite que si le precedent a ete fait
def tracer(n):
    if n>=len(dessin_pendu):
        print ("Pendu, vous avez perdu ! Le mot était: ", mot)
        exit()
    dessin=dessin_pendu[n]
    print "dessin:", dessin
    i=0
    while i < 10:
        if dessin[i+1] is not None :
            dessin[i](dessin[i+1])
        else:
            dessin[i]()
        i+=2


def chaine_lettre (liste):
    lettres=''
    for i in range (0,len(liste)):
        lettres=lettres+'-'+liste[i]
    return lettres.upper()

Fen=Tk()
Cans1=Canvas(Fen,width=150,height=120,background='yellow')
#Definition du dessin de pendu
dessin_pendu = [(Cans1.create_line(50,10,50,110)),
    (Cans1.create_line(50,110,90,110)),
    (Cans1.create_line(50,10,110,10)),
    (Cans1.create_line(110,10,110,20)),
    (Cans1.create_oval(100,20,120,40)),
    (Cans1.create_line(110,40,110,80)),
    (Cans1.create_line(110,55,90,45)),
    (Cans1.create_line(110,55,130,45)),
    (Cans1.create_line(110,80,130,90)),
    (Cans1.create_line(110,80,90,90))]
    #dessin du pendu


#la liste de mot:
liste_mot=[
    "voiture",
    "maison",
    "pierre",
    "portable",
    "casque",
    "ingenieur",
    "son"]

# Notre variable pour savoir quand arreter la partie
continuer_partie = 'o'

#debut de la partie
while continuer_partie != 'n':
    #Debut du jeu
    lettres_trouvees = []
    erreur = 0
    mot=choisir_mot(liste_mot)
    mot_trouve=remplacer_mot_etoile(mot,lettres_trouvees)

    #Tant qu on n a pas trouve le mot et qu on n a pas epuise sa chance
    while mot_trouve!=mot and erreur<9:
        print("Mot a trouver {}".format(mot_trouve))
        #ici , on execute la fonction recup_lettre
        lettre = recup_lettre()

        if lettre in lettres_trouvees: # La lettre a deja ete choisie
            print("Vous avez deja choisi cette lettre.")
        elif lettre in mot: # La lettre est dans le mot a trouver
            lettres_trouvees.append(lettre)
            print("Bien joue.")
        else:#ce n'est pas la bonne lettre
            lettres_trouvees.append(lettre)
            tracer(erreur)
            erreur+=1
            print("... non, cette lettre ne se trouve pas dans le mot...")

        mot_trouve=remplacer_mot_etoile(mot,lettres_trouvees)
        print ('lettres proposées ',chaine_lettre(lettres_trouvees))

    if mot==mot_trouve:
       print("Félicitations! Vous avez trouvé le mot: %s" %(mot))
    else:
        print("PENDU !!! Vous avez perdu.")
    # demander au joueur si il veut continuer la partie:
    continuer_partie = raw_input("Souhaitez-vous refaire une partie (O/N) ?")
    continuer_partie = continuer_partie.lower()
print("bye bye")


Reste maintenant ton souci de dessin du pendu dans ta fonction "tracer".
Je me suis permis d'ajouter la ligne 48 dans cette fonction afin de te mettre sur la piste de ton souci:
print "dessin:", dessin


Bonnes Fêtes de Fin d'Année,
Ritchi
0