Partage
  • Partager sur Facebook
  • Partager sur Twitter

ISN quiz à 6 questions

Anonyme
    16 mai 2015 à 20:13:14

    Bonjour, j'ai un projet d'ISN à rendre bientôt, c'est un quiz. Mes questions sont dans un fichier txt et pompées sous forme d'une liste de listes, il y en a 30 en tout.

    Je rencontre quelques problèmes pour l'affichage des questions, j'aimerai que le quiz s'arrête au bout de 6 questions et que chaque question posée soit différente à chaque fois. J'ai pensé à faire une boucle for mais je ne vois pas comment faire pour que la question soit enlevée des 6 questions une fois qu'elle a été posée mais qu'elle revienne lorsqu'un autre utilisateur fera le quiz..

    Pourriez-vous m'aider s'il vous plait?

    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      17 mai 2015 à 20:04:04

      j'ai également un problème pour l'association tkinter/python, l'ordinateur affiche :

      insert() got an unexpected keyword argument 'command'

      Help please

      • Partager sur Facebook
      • Partager sur Twitter
        19 mai 2015 à 15:12:43

        Si tu veux différentier les utilisateurs, tu pourrais créer un fichier qui contiendrait les infos suivantes :

        nom1 : 1,2,3,5

        nom2 : 1,3,4,5

        ...

        qui voudrait dire : l'utilisateur "nom1" n'a pas due répondre aux questions 1,2,3,5 donc tu peux encore les lui poser

        tu peux alors utiliser une boucle for qui prendra 6 questions parmi celles encore disponibles.

        N'oublie pas de les supprimer de la liste et de gérer le cas où tu n'a plus de questions à poser

        • Partager sur Facebook
        • Partager sur Twitter
          19 mai 2015 à 15:13:19

          et sans ton code, difficile de t'aider plus
          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            19 mai 2015 à 19:19:24

            import random
            
            #On demande à Python d'importer Tkinter.
            from tkinter import *
            fenetre = Tk()
            import tkinter as tk
            fenetre.title('Projet Final')
            
            
            
            # lecture dans un fichier txt et elements sous forme d'une liste de listes
            with open ("data.txt","r") as fichier :
                fichier_questions = fichier.read()  #  La fonction read lit l'entièreté du fichier text et retourne une chaîne de caractère
                liste_de_questions = fichier_questions.splitlines()     # La méthode splitlines appliquée à une chaîne de caractère 
                ensemble_de_questions = []                              # retourne une liste de lignes, en coupant au retour à la ligne
                for ligne_question in liste_de_questions:
                    liste_question_responses_solution = ligne_question.split(';')
                    ensemble_de_questions.append(liste_question_responses_solution)   # on ajoute les listes dans une seule et unique liste
            
            
            question_aleatoire = random.choice(ensemble_de_questions)   # on mixe questions,reponses,solutions pour
            question = question_aleatoire[0]                            # que les meme ne retombent pas toujours
            propositions = question_aleatoire[1:4]
            random.shuffle(propositions)
            solution = question_aleatoire[4]
            
             
            fichier.close()  # on ferme le fichier txt
            def resultat_question() :  
                resultat = ''
                if reponse.lower() == solution :        # réponse = élement cliqué
                    resultat = ('Bravo, c est la bonne réponse')
                else :
                    resultat = ('Dommage, la bonne réponse était' + solution)
            
            
            
            # système de points, affichage final
            
            def score_final() :
                score_mauvais = 'Votre score est de' + score_joueur + 'Il va falloir reviser vos acquis'
                score_convenable = 'Votre score est de' + score_joueur + 'Vous pouvez encore faire mieux !!!'
                score_genie = 'Votre score est de' + score_joueur + 'Vous etes un genie... Bravo  !!!'
                numero_question = ''
                score_joueur = 0
                if coup_joueur == solution :    # definir coup_joueur (systeme de clic) 
                    score_joueur += 10          # 10pts sont administrés pour une bonne réponse
                else :
                   score_joueur -= 1            # 1pt est enlevé pour une mauvaise réponse
                if score_joueur <= 5:
                    print (score_mauvais)
                elif score_joueur > 5 and score_joueur <=27:
                    print (score_convenable)
                else :
                    print (score_genie)

             Merci pour votre réponse mais quand une question s'affiche l'utilisateur est obligé de répondre, il ne peut pas passer à la suivante

            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              19 mai 2015 à 19:23:51

              j'ai voulu donc transformer mon programme en fonction pour l'affichage des questions par exemple mais ma fonction ne marche pas et je ne sais pas comment faire. je vous poste ci-joint le programme + fonction et la zone crée  avec tkinter :

              # lecture dans un fichier txt et elements sous forme d'une liste de listes
              with open ("data.txt","r") as fichier :
                  fichier_questions = fichier.read()  #  La fonction read lit l'entièreté du fichier text et retourne une chaîne de caractère
                  liste_de_questions = fichier_questions.splitlines()     # La méthode splitlines appliquée à une chaîne de caractère 
                  ensemble_de_questions = []                              # retourne une liste de lignes, en coupant au retour à la ligne
                  for ligne_question in liste_de_questions:
                      liste_question_responses_solution = ligne_question.split(';')
                      ensemble_de_questions.append(liste_question_responses_solution)   # on ajoute les listes dans une seule et unique liste
              
              
              question_aleatoire = random.choice(ensemble_de_questions)   # on mixe questions,reponses,solutions pour
              question = question_aleatoire[0]                            # que les meme ne retombent pas toujours
              propositions = question_aleatoire[1:4]
              random.shuffle(propositions)
              solution = question_aleatoire[4]
              
               
              fichier.close()  # on ferme le fichier txt
              
              
              # création de fonctions pour associer aux commandes tkinter
              
              def question_aleatoire():       # fonction pour afficher la question
                  print (question)
              
              
              
              def proposition1_aleatoire():   # fonction pour afficher la proposition1
                  print(propositions[1])
              
              zone_question = tk.Text(fenetre, width= 30, height= 10)
              zone_question.grid(row=1,column=1)
              zone_question.insert('insert', 'Question :', command = question_aleatoire)
              
              # 3 Boutons réponses, bouton quitter et le bouton "Suivant" pour change de question.
              
              tk.Button(fenetre, text='Reponse 1' relief='raised').grid(row=3,column=0,padx=10,ipadx= 87, ipady=40,pady=30,sticky= ('S','E','N','W'))



              • Partager sur Facebook
              • Partager sur Twitter
                19 mai 2015 à 20:50:30

                Qu'est ce qui ne fonctionne pas ? quand tu as un problème, si c'est un message d'erreur, cherche sur internet, tu auras facilement la solution, ci c'est que ça ne fait pas ce que tu veux, explique ce que tu veux et ce qu'il fait, car là j'ai aucune idée de ce qui te pose problème.

                En plus tu changes complètement tout, c'est assez dur de te suivre. A ta place je le ferais par étape avec des fonctions, genre :

                -une fonction qui prend en argument le numéro d'une question et qui te renvoi la question et les propositions avec du hasard si tu veux

                -une interface avec :

                • 4 Label : 1 pour la question et 3 pour les réponses proposées
                • 3 Chekbouton : 1 pour chaque réponce

                -une fonction qui efface les propositions et la question avant pusi en affiche une nouvelle ou affiche le message de fin

                -une fonction qui vérifie la proposition et modifie le score en fonction de celle-ci.

                Après chaque étape, tu t'assures que ce que tu as fait fonctionne, comme ça tu n'auras plus besoin de le modifier.

                Et en utilisant les widgets prévu pour ;) (on utilise Text pour permettre à l'utilisateur d'écrire alors que toi tu dois juste afficher un texte donc un Label est LARGEMENT suffisant)

                Pour modifier le text d'un Label tu as deux méthodes :

                • associer le text à une variable (c'est ce que je fais pour le Label ici
                • appliquer .config(text = ...) c'est ce que je fais au bouton ici
                from Tkinter import *
                
                ###### declaration des variables
                
                
                Liste_questions = ["première question","deuxieme question","troisieme question"]
                indice = -1
                
                
                ##### declaration de fonctions
                
                def au_suivant():
                    global indice,question1 #on va modifier ces deux variable
                    
                    indice = (indice+1)%3
                    text = Liste_questions[indice]#on prend une nouvelle question
                
                    question1.set(text)#on place la nouvelle dans le widget
                    
                    Bouton1.config(text = "encore!")#cette ligne est une autre méthode pour changer le text
                    #et c'est fini
                
                ###### l'interface graphique est entierement separee du rest
                
                fenetre = Tk()
                fenetre.title('Projet Final')
                
                question1 = StringVar()
                question1.set("clique pour changer les questions")
                Q1 = Label(fenetre, textvariable=question1)
                Q1.pack()
                
                Bouton1 = Button(fenetre,text = "suivant",command = au_suivant)
                Bouton1.pack()
                
                
                fenetre.mainloop()

                Dans les deux cas ce qui est primordiale c'est que tu ai une interface propre qui ne face rien et après et seulement après tu ajoutes les fonctions aux boutons

                • Partager sur Facebook
                • Partager sur Twitter
                  19 mai 2015 à 20:52:13

                  Si tu cherche une information sur un widget, voici le best ;)
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    19 mai 2015 à 22:24:35

                    Enfait je résume on a un projet de bac et on est deux. Je dois de mon côté m'occuper de la programmation du quiz et mon camarade de l'interface graphique avec tkinter. Donc je n'y connais rien à tkinter et on doit faire la mise en commun.

                    Les professeurs nous avaient dit que lorsque l'interface était crée, il suffisait de relier les boutons ou zones textes à des fonctions.

                    L'interface étant finie et fonctionnelle, j'ai voulu associer les boutons/zones textes aux fonctions.

                    Zone texte pour la question et 3 boutons pour les 3 réponses.

                    Le programme ci-dessous sert à pomper les éléments du fichier txt sous forme d'une liste de listes, il fonctionne très bien et permet d'obtenir les réponses qui vont avec les questions. Cependant il a fallu que je le transforme en fonction pour mettre la commande pour relier les 2 programmes mais ca ne fonctionne pas et c'est ma fonction qui ne va sûrement pas mais je ne sais pas comment transformer ce programme en une fonction :

                    with open ("data.txt","r") as fichier :
                        fichier_questions = fichier.read()  #  La fonction read lit l'entièreté du fichier text et retourne une chaîne de caractère
                        liste_de_questions = fichier_questions.splitlines()     # La méthode splitlines appliquée à une chaîne de caractère
                        ensemble_de_questions = []                              # retourne une liste de lignes, en coupant au retour à la ligne
                        for ligne_question in liste_de_questions:
                            liste_question_responses_solution = ligne_question.split(';')
                            ensemble_de_questions.append(liste_question_responses_solution)   # on ajoute les listes dans une seule et unique liste
                     
                     
                    question_aleatoire = random.choice(ensemble_de_questions)   # on mixe questions,reponses,solutions pour
                    question = question_aleatoire[0]                            # que les meme ne retombent pas toujours
                    propositions = question_aleatoire[1:4]
                    random.shuffle(propositions)
                    solution = question_aleatoire[4]
                     
                      
                    fichier.close()  # on ferme le fichier txt
                    Au niveau des fonctions, j'avais procédé par étapes en faisant la fonction pour le score, la fonction pour le résultat, etc...

                    Mais par exemple je ne peux pas tester la fonction score sans l'interface graphique car elle est liée à ce que l'utilisateur va répondre donc je ne pourrai pas savoir si elle fonctionne vraiment.
                    Mes questions de base était de savoir :
                    - comment je fais pour que seulement 6 questions soient posées dans le quiz?
                    - une fois que la question est posée, comment puis-je l'enlever pour ne pas qu'elle soit reposée?
                    Je ne sais pas si c'est plus clair, j'espère en tout cas et merci pour votre réponse précédente.

                    -
                    Edité par Anonyme 19 mai 2015 à 22:25:20

                    • Partager sur Facebook
                    • Partager sur Twitter
                      20 mai 2015 à 15:12:08

                      Ha ! ben voilà un problème claire !

                      fichier = open("data.txt","r")
                      
                      fichier_questions = fichier.read()  #  La fonction read lit l'entièreté du fichier text et retourne une chaîne de caractère
                      
                      liste_de_questions = fichier_questions.splitlines()     # La méthode splitlines appliquée à une chaîne de caractère
                      ensemble_de_questions = []                              # retourne une liste de lignes, en coupant au retour à la ligne
                      for ligne_question in liste_de_questions:
                          liste_question_responses_solution = ligne_question.split(';')
                          ensemble_de_questions.append(liste_question_responses_solution)   # on ajoute les listes dans une seule et unique liste
                      
                      
                      fichier.close()
                      #avec ca au debut du programme, tu auras toutes tes questions directement en memoire 
                      
                      
                      
                      
                      tu définis les fonctions que tu veux puis
                      
                      def nouvelle_question():
                          global ensemble_de_questions #comme ça on a directement accès aux informations  
                          question_aleatoire = random.choice(ensemble_de_questions)   # on mixe questions,reponses,solutions pour
                          question = question_aleatoire[0]                            # que les meme ne retombent pas toujours
                          propositions = question_aleatoire[1:4]
                          random.shuffle(propositions)
                          solution = question_aleatoire[4]
                          return propositions, question
                      

                      Pour n'en poser que 6, c'est simple tu met un compteur ^^

                      Attention, ce compteur doit être une variable global, et à chaque fois que la fonction qui valide la réponse est appelée, tu l'augmente de 1. une fois qu'il atteind 6 tu n'affiche plus une autre question, mais le message de fin. Du genre

                      def fonction_de_validation():
                          global compteur
                          
                          Bla bla bla on modifie le score
                      
                          compteur = compteur + 1
                      
                          if(compteur == 6):
                              Bla Bla on affiche la fentre de fin
                          else:
                              Bla bla on affiche les questions suivantes

                      Pour en pas poser deux fois la même question, si tu utilise la fonction que j'ai écrit au tout début, tu vois que ensemble_de_questions n'est pas recalculé à chaque fois. Il suffi alors de supprimer la question choisie.

                      du coup avant le return glisse la ligne de code

                      ensemble_de_questions.remove(question_aleatoire)

                      Elle va supprimer la ous liste question_aleatoire de la liste ensemble de question. Du coup elle ne pourra plus être posée


                      • Partager sur Facebook
                      • Partager sur Twitter
                      Anonyme
                        20 mai 2015 à 21:28:57

                        Merci beaucoup, c'est vraiment gentil :)

                        Je vais demander à mon camarade qui fait Tkinter de créer des Label mais juste quand je vais associer la fonction à la zone texte crée pour afficher les questions, je mets :

                        "command=question" étant donné que la fonction nouvelle_question concerne à la fois les questions et les propositions ?

                        • Partager sur Facebook
                        • Partager sur Twitter
                          21 mai 2015 à 16:00:03

                          A ta place je créerais une liste du genre :

                          question_actuelle = [proposition1,proposition2,proposition3,réponse]

                          Et tu n'associes pas la fonction aux boutons, mais au bouton "Valider"

                          Au passage je me suis trompé, 1 Label et 3 checkbuttons c'est mieux.

                          Il faut que tu te mette d'accord avec ton camarade sur le nom que vous donnez aux bouttons et aux variables associées (pour que tu puisse appliquer les .get() dessus ;) )

                          En tout cas, voilà comment moi j'imagine ton projet.

                          • Partager sur Facebook
                          • Partager sur Twitter
                          Anonyme
                            21 mai 2015 à 17:42:23

                            ok on va en parler, merci beaucoup ;)
                            • Partager sur Facebook
                            • Partager sur Twitter

                            ISN quiz à 6 questions

                            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                            • Editeur
                            • Markdown