Jeu "Qui Est Ce?" Python 2.7

labandedISN - 15 avril 2013 à 15:59
csmaison Messages postés 1 Date d'inscription dimanche 22 mars 2015 Statut Membre Dernière intervention 22 mars 2015 - 22 mars 2015 à 14:52
Bonjour et bonsoir.

Nous sommes un groupe de trois jeunes élèves travaillant actuellement en spécialité ISN , sur le projet de créer un "Qui est ce?". Nous utilisons la version de Python 2.7 (pour pouvoir utiliser la bibliothèque PIL). Nous avons chacun commencé Python cette année, et nous avons commencé avec les notions de class et d'héritage. Nous nous retrouvons actuellement bloqué avec une command Button qui nous agace. Si une Bonne âme charitable peut bien nous aider,ça serait très gentil.

Voici le codage, que nous avons commencé à commenter, nous vous mettons aussi le message d'erreur que nous recevons, merci énormément de votre aide. Il nous reste encore les images à mettre (associé à des boutons), ainsi que l'aléatoire à mettre en place (dans lequel nous avons rencontré quelques erreurs). Le code n'est donc à ce jour pas encore terminer (nous y travaillons).

CODE :

from Tkinter import*
fenetre=Tk()
fenetre.title('Jeu : Qui est ce ? ')

#VARIABLES reconnue : sexe , cheveux, yeux
a1="fille"
a2="garcon"
b1="brun"
b2="roux"
b3="blond"
c1="bleu"
c2="vert"
c3="marron"
#variable de personnes
d1="Clement"
d2="Victoire"
d3="Marine"
d4="Nananere"

#cadre conteneur
selection1=LabelFrame(fenetre)
selection1.configure(text='Est ce que le personnage ... ',bd=2,relief='groove')
selection1.grid(row=1,column=1,padx=10,pady=10,rowspan=2)

selection2=LabelFrame(selection1)
selection2.configure(text='a les cheveux ... ',bd=2,relief='groove')
selection2.grid(row=1,column=1,padx=10,pady=10)

selection3=LabelFrame(selection1)
selection3.configure(text='a les yeux ... ',bd=2,relief='groove')
selection3.grid(row=2,column=1,padx=10,pady=10)

selection4=LabelFrame(selection1)
selection4.configure(text= 'est de sexe ...',bd=2,relief='groove')
selection4.grid(row=3,column=1,padx=10,pady=10)

selection5=LabelFrame(fenetre)
selection5.configure(text= 'R??ponse',bd=2,relief='groove')
selection5.grid(row=1,column=2,padx=10,pady=10)

selection5=LabelFrame(fenetre)
selection5.configure(text= 'R??ponse',bd=2,relief='groove')
selection5.grid(row=1,column=2,padx=10,pady=10)

selection6=LabelFrame(fenetre)
selection6.configure(text= 'Les diff??rents personnages sont ... ',bd=2,relief='groove')
selection6.grid(row=2,column=2,padx=10,pady=10)

selection7=LabelFrame(fenetre)
selection7.configure(text= 'Et la bonne r??ponse est ... ',bd=2,relief='groove')
selection7.grid(row=1,column=3,padx=10,pady=10)

selection8=LabelFrame(fenetre)
selection8.configure(bd=2,relief='groove')
selection8.grid(row=2,column=3,padx=10,pady=10)

# positionnement des images
image=Label(selection6)
image.configure(text='Ici on met toute les petites images !')
image.grid(row=1,column=1,padx=10,pady=10)

image2=Label(selection7)
image2.configure(text='Tadam ! voici la bonne r??ponse !')
image2.grid(row=1,column=1,padx=10,pady=10)

#coporyght en tout genre
copyright1=LabelFrame(selection8)
copyright1.configure(text='copyrights',bd=2,relief='groove')
copyright1.grid(row=3,column=1,padx=10,pady=10)

copyright2=Label(copyright1)
copyright2.configure(text='Ici on met / tout les copyrigths /')
copyright2.grid(row=1,column=1,padx=10,pady=10)


reponse=Label(selection5)
reponse.configure(text='Oui, non.')
reponse.grid(row=1,column=1,padx=10,pady=10)

# d?but des classes. On prends une classe personne et on utilise une m?thode /
# d'h?ritage pour d?clarrer les diff?rent type de variable. aTTENTION. Avec
# l'attribut commande, il faut mettre tout les "bouton" associ? ? la def , en
# dessous et sur la m?me indentation que la d?finition, autrement ?a marche pas.

class gens():
# initial: on pose le sexe, les cheveux, les yeux...
def __init__(self,sex,hair,eyes,prenom,clef):
self.sex = sex
self.hair = hair
self.eyes = eyes
self.prenom = prenom
self.clef = clef
# class gens = class principale ne pas d?finir de sous class ou alors pourquoi le faire? on avait pas trouver le pourquoi
def identite(self):
return "[{0},{1},{2},{3},{4}]".format(self.sex,self.hair,self.eyes,self.prenom,self.clef)

def fille():
if sex==a1 :
reponse.configure(text="oui")
elif sex==a2:
reponse.configure(text="non")

def garcon():
if sex==a2 :
reponse.configure(text="oui")
elif sex==a1:
reponse.configure(text="non")


def bleu():
if eyes==c1 :
reponse.configure(text="oui")
elif eyes==c2 or eyes==c3:
reponse.configure(text="non")

def vert():
if eyes==c2 :
reponse.configure(text="oui")
elif eyes==c1 or eyes==c3:
reponse.configure(text="non")

def marron():
if eyes==c3 :
reponse.configure(text="oui")
elif eyes==b1 or eyes==b2:
reponse.configure(text="non")

def brun():
if hair==b1 :
reponse.configure(text="oui")
elif hair==b2 or hair==b3:
reponse.configure(text="non")

def roux():
if hair==b2 :
reponse.configure(text="oui")
elif hair==b1 or hair==b3:
reponse.configure(text="non")

def blond():
if hair==b3 :
reponse.configure(text="oui")
elif hair==b1 or hair==b2:
reponse.configure(text="non")

sex1=Button(selection4)
sex1.configure(text='Feminin ? ', command = fille )
sex1.grid(row=1,column=1,padx=10,pady=10)

sex2=Button(selection4)
sex2.configure(text='Masculin ?', command = garcon)
sex2.grid(row=1,column=2,padx=10,pady=10)

cheveux1=Button(selection2)
cheveux1.configure(text='Brun ?',command = brun)
cheveux1.grid(row=1,column=1,padx=10,pady=10)

cheveux2=Button(selection2)
cheveux2.configure(text='Blond ?',command = blond)
cheveux2.grid(row=1,column=2,padx=10,pady=10)

cheveux3=Button(selection2)
cheveux3.configure(text='Roux ?',command = roux)
cheveux3.grid(row=1,column=3,padx=10,pady=10)

yeux1=Button(selection3)
yeux1.configure(text='Marron ?', command=marron)
yeux1.grid(row=1,column=1,padx=10,pady=10)

yeux2=Button(selection3)
yeux2.configure(text='Bleu ?',command = bleu)
yeux2.grid(row=1,column=2,padx=10,pady=10)

yeux3=Button(selection3)
yeux3.configure(text='Vert ?',command = vert)
yeux3.grid(row=1,column=3,padx=10,pady=10)


# permet de placer des personnes dans la console selon les variables mises pr?alablement
# COMMENT ET OU LES METTRE? si vous avez des id'es!!
g1=gens(a2,b1,c3,d1,1)
g2=gens(a1,b1,c3,d2,2)
g3=gens(a1,b1,c3,d3,3)
g4=gens(a2,b2,c2,d4,4)
print "personne={0}\n".format(g4.identite())

fenetre.mainloop()


MESSAGE D'ERREUR:

Traceback (most recent call last):
File "C:\Python27\Lib\lib-tk\Tkinter.py", line 1410, in __call__
return self.func(*args)
File "C:\Users\marine\Downloads\JEU 2.5.py", line 117, in vert
if eyes==c2 :
NameError: global name 'eyes' is not defined


Et ça nous fait cela pour n'importe quel message, (que ce soit le sexe, les yeux, ou les cheveux)

Merci beaucoup !

2 réponses

csmaison Messages postés 1 Date d'inscription dimanche 22 mars 2015 Statut Membre Dernière intervention 22 mars 2015
22 mars 2015 à 14:52
En effet, il faut définir l'instanciation

exemple: pour g1

def fille():
if g1.sex==a1 :
reponse.configure(text="oui")
elif reponse.configure(text="non")

deux exemples de source de code du jeu Qui-est ce en python :
http://blerow.blogspot.fr/2015/01/python-jeu-qui-est-ce.html
http://blerow.blogspot.fr/2014/12/python-jeu-qui-estce.html
0
lespinx Messages postés 106 Date d'inscription lundi 9 octobre 2006 Statut Membre Dernière intervention 23 novembre 2022 77
15 avril 2013 à 18:15
Bonjour,
Il semblerait que les examens approchent car il y a pas mal de demandes de ce genre sur ce Forum.

1- Pour publier du code sur ce forum utilisez le BBcode proposé dans la barre d'outils de mise en page, sélectionnez Python et insérez votre code entre les 2 balises.

2- Telle qu'elle est décrite la fonction "def fille():" n'appartient pas à la classe "class gens():"
Pour qu'elle en fasse partie vous devez la décrire "def fille(self):" en respectant l'indentation d'appartenance à la classe

3-
def fille(self):
    if sex==a1 :


La variable "sex" n'est pas reconnue, la variable "self.sex" est reconnue par toutes les méthodes de la classe quand elle est appelée à l'intérieur de la classe.
if sex==a1 : la variable "a1" n'est pas reconnue si vous ne la passez pas en paramètre de la fonction (Voir variables locales et variables globales)

Si vous désirez appelez un attribut ou une méthode à l'extérieur de la classe vous devez instancier la classe:

Instanciation
C = gens()
L'instanciation exécute "__init__"

Appel d'une méthode de classe
C.fille()

Utilisation d'un attribut
if C.sex==a1

Bonne continuation
-1
Rejoignez-nous