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 de matching questions/réponses


Sujet :

Python

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 5
    Points : 2
    Points
    2
    Par défaut Jeu de matching questions/réponses
    Bonjour à tous.

    Je cherche à développer en python une petite application d'apprentissage pour enfants. Concrètement ça sera un simple jeu où il faudra relier une question à la réponse correspondante. Les questions et réponses seront stockées dans un fichier texte que le programme récupérera à chaque lancement puis les affichera dans l'interface graphique comme décrit dans le schéma ci-dessous :




    Je coince en ce moment sur un problème : comment faire en sorte que les réponses soient prises en compte ? En supposant que les questions et réponses soient stockées dans des boutons, il faudrait prendre en compte chaque paire de clics sur une paire question/réponse et les associer à leurs valeurs respectives, puis ensuite vérifier si la réponse est juste ou pas ?

    Je ne sais pas si j'ai été assez clair, mais vous voyez un peu le problème. Merci d'avance à tous ceux qui auraient une petite idée pour avancer.

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Si tu crées ta liste d'items avec un dictionnaire, ce devrait être assez simple.

    La question étant la clé et la réponse la valeur, lors du choix d'une réponse il est simple de comparer dans le dico si la clé (question) retourne bien la même valeur (réponse).

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Salut. Merci pour ta réponse.

    J'ai pensé aux dictionnaires au début, mais le but est que l'application devait être facile d'utilisation donc que les questions/réponses devraient être "chargeables" dans le fichier par toute personne ne s'y connaissant pas vraiment en informatique. J'ai donc réfléchi à la technique du parsing pour isoler la question (clé) et la réponse (valeur) à partir de la ligne chargée par une personne lambda du style "question (espace) réponse".


    Mais à la limite ce n'est pas vraiment ça le problème. Ce qui me pose obstacle c'est comment appliquer ça dans l'interface graphique et pouvoir "relier" une question à une réponse quelconque à partir de clics de souris.

  4. #4
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Citation Envoyé par Revolver Voir le message
    Salut. Merci pour ta réponse.

    J'ai pensé aux dictionnaires au début, mais le but est que l'application devait être facile d'utilisation donc que les questions/réponses devraient être "chargeables" dans le fichier par toute personne ne s'y connaissant pas vraiment en informatique.
    Le plus simple:
    questionsreponses.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    # -*- coding: utf-8 -*-
     
    ITEMS = {'Question 1': 'Reponse 1',
                'Question 2': 'Reponse 2',
                'Question 3': 'Reponse 3',
                'Question 4': 'Reponse 4']
    Simple à mettre à jour comme tu le vois.

    Ensuite:
    monjeu.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    # -*- coding: utf-8 -*-
     
    from questionsreponses import ITEMS
     
    ....
    Aussi simple que ça.


    Citation Envoyé par Revolver Voir le message
    Mais à la limite ce n'est pas vraiment ça le problème. Ce qui me pose obstacle c'est comment appliquer ça dans l'interface graphique et pouvoir "relier" une question à une réponse quelconque à partir de clics de souris.
    Pseudo-code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    for item in ITEMS.keys():
        creer_bouton_question(texte=item)
        creer_bouton_reponse(texte=ITEMS[item]
     
    melanger_boutons_reponse()
     
    def click_question(bouton):
        clé_courante = bouton.text()
     
    def click_reponse(bouton):
        reponse = bouton.text()
        if reponse == ITEMS[clé_courante]
            print 'OK'
    Ça me semble tenir debout.

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Bonjour.

    Je mets ici le bout de code correspondant à l'interface graphique.

    Code : 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
    # -*- coding: cp1252 -*- 
    from Tkinter import * 
     
     
     
    # Création de la fenêtre principale (main window)
    Mafenetre = Tk()
    Mafenetre.title("Jeu questions réponses")
     
    # Création de boutons pour les questions
    Button(Mafenetre,text="question1",command=Mafenetre.destroy).grid(row=1,padx=30,pady=30)
    Button(Mafenetre,text="question2",command=Mafenetre.destroy).grid(row=2,padx=30,pady=30)
    Button(Mafenetre,text="question3",command=Mafenetre.destroy).grid(row=3,padx=30,pady=30)
    Button(Mafenetre,text="question4",command=Mafenetre.destroy).grid(row=4, padx=30,pady=30)
    Button(Mafenetre,text="question 5",command=Mafenetre.destroy).grid(row=5,padx=30,pady=30)
    Button(Mafenetre,text="question 6",command=Mafenetre.destroy).grid(row=6,padx=30,pady=30)
    Button(Mafenetre,text="question 7",command=Mafenetre.destroy).grid(row=7,padx=30,pady=30)
    Button(Mafenetre,text="question 8",command=Mafenetre.destroy).grid(row=8,padx=30,pady=30)
    Button(Mafenetre,text="question 9",command=Mafenetre.destroy).grid(row=9,padx=30,pady=30)
    Button(Mafenetre,text="question 10",command=Mafenetre.destroy).grid(row=10,padx=30,pady=30)
     
    #Création de boutons pour les réponses
    Button(Mafenetre,text="réponse1",command=Mafenetre.destroy).grid(row=1,column=4)
    Button(Mafenetre,text="réponse2",command=Mafenetre.destroy).grid(row=2,column=4)
    Button(Mafenetre,text="réponse3",command=Mafenetre.destroy).grid(row=3,column=4)
    Button(Mafenetre,text="réponse4",command=Mafenetre.destroy).grid(row=4,column=4)
    Button(Mafenetre,text="réponse 5",command=Mafenetre.destroy).grid(row=5,column=4)
    Button(Mafenetre,text="réponse 6",command=Mafenetre.destroy).grid(row=6,column=4)
    Button(Mafenetre,text="réponse 7",command=Mafenetre.destroy).grid(row=7,column=4)
    Button(Mafenetre,text="réponse 8",command=Mafenetre.destroy).grid(row=8,column=4)
    Button(Mafenetre,text="réponse 9",command=Mafenetre.destroy).grid(row=9,column=4)
    Button(Mafenetre,text="réponse 10",command=Mafenetre.destroy).grid(row=10,column=4)
     
     
    Mafenetre.mainloop()
    Je désire maintenant mélanger les boutons. J'ai pensé au début à mettre le module "choice" dans chaque "row" de question et de réponse mais le problème est que si le même chiffre tombe par hasard pour 2 questions différentes l'une écrasera l'autre. Je pense donc qu'il faut traiter cela par une fonction comme tu as précisé plus haut. Une idée ?

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,
    Peut être serait-il intéressant de passer par random.shuffle pour mélanger les numéros de lignes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> L = list(range(10))
    >>> L
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    >>> random.shuffle(L)
    >>> L
    [3, 8, 7, 6, 0, 4, 1, 9, 2, 5]
    >>>
    En remplaçant les entiers par la liste des questions ou des réponses, ca pourrait donner:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import tkinter as tk
    import random
     
    app = tk.Tk()
     
    questions = [ 'Question %d' % x for x in range(10) ]
    random.shuffle(questions)
    for x, q in enumerate(questions):
        tk.Button(app, text=q, command=app.quit).grid(row=x, column=1)
    tk.mainloop()
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Rebonjour,

    Voici où j'en suis à présent. Les boutons sont bien en place, mélangés, et les questions/réponses récupérées depuis un .txt qui viennent s'insérer dans les boutons. J'ai pris comme exemple un jeu de pays/capitales.

    Code : 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
     
    # -*- coding: cp1252 -*- 
    from Tkinter import *
    import random
     
     
    def Load_db():
        Data_base = "".join(open("pays.txt","r"))
        Data_base = Data_base.replace("\n"," ")
        Data_base = Data_base.split(" ")
     
        Pays = Data_base[0:len(Data_base):2]
        Capitales = Data_base[1:len(Data_base):2]
     
        i=0
        ITEMS={}
        for i in range(len(Pays)):
            ITEMS[Pays[i]]= Capitales[i]
     
        return ITEMS
     
     
    # Création de la fenêtre principale (main window)
    Mafenetre = Tk()
    Mafenetre.title("Jeu questions réponses")
     
    # Boutons des questions
    questions = [ x for x in Load_db().keys() ]
    random.shuffle(questions)
    for x,q in enumerate(questions):
        Button(Mafenetre, text=q, font="Courier",width=50, command=Mafenetre.destroy).grid(row=x, padx=20,pady=20)
     
    # Boutons des réponses
    reponses = [ x for x in Load_db().values() ]
    random.shuffle(reponses)
    for y,r in enumerate(reponses):
        Button(Mafenetre, text=r, font="Courier",width=50, command=Mafenetre.destroy).grid(row=y, column=4)
     
    Mafenetre.mainloop()
    Et le fichier txt correspondant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Allemagne Berlin
    Belgique Bruxelles
    Danemark Copenhague
    Espagne Madrid
    Finlande Helsinki
    France Paris
    Grèce Athènes
    Hongrie Budapest
    Irlande Dublin
    Islande Reykjavik
    C'est pas très joli pour l'instant mais ça s'affiche correctement. Maintenant je planche sur la fonction qui permettra de faire concorder les questions et les réponses. Je sais qu'il faudra travailler avec des event, pour savoir quand un clic sur un bouton a eu lieu. Seulement est-il possible d'associer un event au texte du bouton correspondant ? (pour ensuite faire la vérification key=value si vous voyez le raisonnement). L'idée des fonctions click_question() et click_reponse() proposée par VinsS est fort intéressante, reste à faire le lien avec le texte du bouton. J'y réfléchis

Discussions similaires

  1. Problème de jeu question / réponse
    Par soufiane669 dans le forum Langage
    Réponses: 3
    Dernier message: 03/11/2013, 18h30
  2. [AC-2007] Création de jeu (questions/réponses)
    Par adameteve dans le forum Modélisation
    Réponses: 1
    Dernier message: 17/10/2011, 13h42

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