Partage
  • Partager sur Facebook
  • Partager sur Twitter

Integrer un csv dans un qcm en python

Sujet résolu
    6 janvier 2024 à 11:33:40

    Bonjour à tous j'ai écris un programme qui est un qcm et je voudrais intégrer un csv dans ce programme pour génerer des questions sur tous les sujets possibles. 

    Voici le programme: 

    -
    Edité par AyaxB 6 janvier 2024 à 11:53:51

    • Partager sur Facebook
    • Partager sur Twitter
      6 janvier 2024 à 11:41:50

      Bonjour,

      Le message qui suit est une réponse automatique activée par un membre de l'équipe de modération. Les réponses automatiques leur permettent d'éviter d'avoir à répéter de nombreuses fois la même chose, ce qui leur fait gagner du temps et leur permet de s'occuper des sujets qui méritent plus d'attention.
      Nous sommes néanmoins ouverts et si vous avez une question ou une remarque, n'hésitez pas à contacter la personne en question par Message Privé.

      Pour plus d'informations, nous vous invitons à lire les règles générales du forum

      Merci de colorer votre code à l'aide du bouton Code </>

      Les forums d'Openclassrooms disposent d'une fonctionnalité permettant de colorer et mettre en forme les codes source afin de les rendre plus lisibles et faciles à manipuler par les intervenants. Pour cela, il faut utiliser le bouton  </> de l'éditeur, choisir un des langages proposés et coller votre code dans la zone prévue. Si vous utilisez l'éditeur de messages en mode Markdown, il faut utiliser les balises <pre class="brush: php;">Votre code ici</pre>.

      Merci de modifier votre message d'origine en fonction.

      • Partager sur Facebook
      • Partager sur Twitter
        6 janvier 2024 à 11:42:54

        Bonjour,

        Un module csv existe pour Python, la documentation est très bien faîte et énormément du tutos existent pour apprendre à l'utiliser.

        Ça sera un peu plus compliqué que le code que vous présentez...

        Comment comptez-vous remplir ce fichier csv ?

        Pour le reste c'est une boucle, comme ce que vous présentez

        initialiser Note à 0
        
        pour chaque question dans Questions:
            afficher la question
            afficher les options de réponse (associées à cette question)
            
            lire la réponse de l'utilisateur
        
            si la réponse est correcte:
                augmenter Note
            sinon:
                diminuer Note
        
        afficher le score final



        • Partager sur Facebook
        • Partager sur Twitter

        Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
        La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

          6 janvier 2024 à 11:50:17

          J'ai déjà un fichier csv que mon professeur m'a donné le voici: 

          • Partager sur Facebook
          • Partager sur Twitter
            6 janvier 2024 à 11:56:57

            Ok, que te manque-t-il comme information pour commencer à développer ?
            • Partager sur Facebook
            • Partager sur Twitter

            Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
            La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

              6 janvier 2024 à 12:02:46

              Je ne sais pas comment adapter mon programme pour qu'il intègre le CSV 

              • Partager sur Facebook
              • Partager sur Twitter
                6 janvier 2024 à 12:09:03

                Il faut lire la documentation du module csv, voir ma 1ère réponse.

                • Tu importes le module csv
                • Tu lis le fichier csv
                • Tu stockes les données dans des listes (Questions, Réponses, Réponses_justes)

                et après tu suis le déroulement que je t'ai indiqué entre balises dans ma 1ère réponse.

                • Partager sur Facebook
                • Partager sur Twitter

                Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
                La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

                  6 janvier 2024 à 12:10:11

                  Un truc de ce type: 

                  import csv
                  
                  with open('quizz.csv') as fichier_csv:
                      reader = csv.reader(fichier_csv, delimiter=',')
                      for ligne in reader: 
                          
                      
                  
                          Question=[ligne[2]] 
                  
                  Réponses=[ligne[3],ligne[4],ligne[5],ligne[6]] 
                  
                  Réponses_justes=[ligne[7]]
                  Note=0 
                  
                  for i in range(30):
                      print(Question[i])
                      print(Réponses[i])
                      b=input("Entrer votre choix") 
                      if b==Réponses_justes[i]:
                          Note=Note+2  
                      else:
                          Note=Note-1 
                  print("Vous avez",Note,"/4")        



                  -
                  Edité par AyaxB 6 janvier 2024 à 12:23:45

                  • Partager sur Facebook
                  • Partager sur Twitter
                    6 janvier 2024 à 13:00:10

                    Il y a de l'idée, mais le principe est d'ajouter toutes les questions, les réponses et les options de réponses dans des listes.

                    EDIT:

                    Commencez par exécuter cela et vérifier que l'affichage des listes contient bien les bonnes valeurs

                    import csv
                    
                    # Initialisation des listes pour stocker les données du quiz
                    questions = []
                    reponses = []
                    reponses_justes = []
                    
                    # Lecture du fichier CSV et stockage des données dans les listes
                    with open('quizz.csv') as fichier_csv:
                        reader = csv.reader(fichier_csv, delimiter=',')
                        for ligne in reader:
                            questions.append(ligne[2])
                            reponses.append([ligne[3], ligne[4], ligne[5], ligne[6]])
                            reponses_justes.append(ligne[7])
                    
                    
                    print("questions" + 50*"-")
                    print(questions)
                    print("reponses" + 50*"-")
                    print(reponses)
                    print("reponses_justes" + 50*"-")
                    print(reponses_justes)

                    -
                    Edité par fred1599 6 janvier 2024 à 15:59:56

                    • Partager sur Facebook
                    • Partager sur Twitter

                    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
                    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

                      6 janvier 2024 à 16:12:44

                      J'ai essayé ceci mais cela ne marche pas: 

                      import csv
                      with open('quizz.csv', 'r') as f:
                          reader = csv.reader(f , delimiter=',')
                          for row in reader:
                                  
                              Question=[row[2]] 
                      
                              Réponses=[[row[3]],[row[4]],[row[5]],[row[6]]] 
                      
                              Réponses_justes=[row[7]]
                              Note=0 
                      
                              for i in range(30):
                                  print(Question[i])
                                  print(Réponses[i])
                                  b=input("Entrer votre choix") 
                                  if b==Réponses_justes[i]:
                                      Note=Note+2  
                                  else:
                                      Note=Note-1 
                      print("Vous avez",Note,"/4") 

                       merci de ton aide



                      • Partager sur Facebook
                      • Partager sur Twitter
                        6 janvier 2024 à 16:19:44

                        AyaxB a écrit:

                        J'ai essayé ceci mais cela ne marche pas: 

                        import csv
                        with open('quizz.csv', 'r') as f:
                            reader = csv.reader(f , delimiter=',')
                            for row in reader:
                                    
                                Question=[row[2]] 
                        
                                Réponses=[[row[3]],[row[4]],[row[5]],[row[6]]] 
                        
                                Réponses_justes=[row[7]]
                                Note=0 
                        
                                for i in range(30):
                                    print(Question[i])
                                    print(Réponses[i])
                                    b=input("Entrer votre choix") 
                                    if b==Réponses_justes[i]:
                                        Note=Note+2  
                                    else:
                                        Note=Note-1 
                        print("Vous avez",Note,"/4") 

                         merci de ton aide

                         Il y a beaucoup d'erreurs

                        • Les listes Question, Réponses, et Réponses_justes sont réinitialisées à chaque itération, ce qui fait que seule la dernière ligne du fichier CSV est prise en compte.
                        • La note est réinitialisée pour chaque ligne du fichier CSV, ce qui n'est pas logique.
                        • Le nombre 30 est hardcodé dans la boucle, ce qui peut provoquer une erreur si le fichier CSV contient moins de 30 questions.
                        • Les tentatives d'accès à Question[i], Réponses[i], et Réponses_justes[i] causeront des erreurs d'indexation.
                        • L'affichage du score final "/4" est incorrect et devrait être basé sur le nombre total de questions.
                        • Partager sur Facebook
                        • Partager sur Twitter

                        Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
                        La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

                          6 janvier 2024 à 16:32:44

                          J'ai ceci: 

                          import csv
                          with open('quizz.csv', 'r') as f:
                              reader = csv.reader(f , delimiter=',')
                              for row in reader:
                                      
                                  Question=[row[2]] 
                          
                                  Réponses=[[row[3]]+[row[4]]+[row[5]]+[row[6]]] 
                          
                                  Réponses_justes=[row[7]]
                          Note=0 
                          
                                  for i in range(len(Question)):
                                      print(Question)
                                      print(Réponses)
                                      b=input("Entrer votre choix") 
                                      if b==Réponses_justes:
                                          Note=Note+2  
                                      else:
                                          print(Réponses_justes)
                                          Note=Note-1 
                          print("Vous avez",Note,"/30")

                          Sauf que la note est fausse et les questions sont affichées avec des caractères spéciaux.

                          • Partager sur Facebook
                          • Partager sur Twitter
                            6 janvier 2024 à 16:34:01

                            Tu as lu l'édition de mon post précédent ?
                            • Partager sur Facebook
                            • Partager sur Twitter

                            Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
                            La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

                              6 janvier 2024 à 17:38:24

                              Désolé je ne l'avais pas vu j'ai essayé ceci: 

                              import csv
                               
                              Questions = []
                              reponses = []
                              reponses_justes = [] 
                               
                              with open('quizz.csv') as fichier_csv:
                                  reader = csv.reader(fichier_csv, delimiter=',')
                                  for ligne in reader:
                                      Questions.append(ligne[2])
                                      reponses.append([ligne[3], ligne[4], ligne[5], ligne[6]])
                                      reponses_justes.append(ligne[7])
                              Note=0    
                              for question in Questions:
                                  print(Questions)
                                  print(reponses)
                                  b=input("Entrer votre choix (1,2,3,4)") 
                                  if b==reponses_justes:
                                      Note=Note+2  
                                  else:
                                      print(reponses_justes)
                                      Note=Note-1 
                              print("Vous avez",Note,"/30")        
                               
                              

                              Mais cela affiche toutes les questions et les réponses

                              • Partager sur Facebook
                              • Partager sur Twitter
                                6 janvier 2024 à 18:42:18

                                Relis ton code, j'ai l'impression que tu ne sais pas ce que tu fais

                                Ajoute print(question) dans ta boucle. Ça affiche quoi ?

                                Après print(question), mets print(reponses[Questions.index(question)]). Ça te montre les réponses possibles ?

                                Avant de demander la réponse, ajoute print(reponses_justes[Questions.index(question)]). Ça te donne la bonne réponse ?

                                -
                                Edité par fred1599 6 janvier 2024 à 18:43:56

                                • Partager sur Facebook
                                • Partager sur Twitter

                                Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
                                La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

                                  6 janvier 2024 à 21:13:51

                                  J'ai testé et je pense qu'il marche maintenant:
                                  import csv
                                   
                                  Questions = []
                                  reponses = []
                                  reponses_justes = [] 
                                   
                                  with open('quizz.csv') as fichier_csv:
                                      reader = csv.reader(fichier_csv, delimiter=',')
                                      for ligne in reader:
                                          Questions.append(ligne[2])
                                          reponses.append([ligne[3], ligne[4], ligne[5], ligne[6]])
                                          reponses_justes.append(ligne[7])
                                  Note=0    
                                  for question in Questions:
                                      print(question)
                                      print(reponses[Questions.index(question)]) 
                                      b=input("Entrer votre choix (1,2,3,4)") 
                                      if b==reponses_justes[Questions.index(question)]:
                                          Note=+Note+2 
                                          print("Bien jouer vous avez choisi la bonne réponse")
                                      else:
                                          print("Dommage la bonne réponse était la n°",reponses_justes[Questions.index(question)])
                                          Note=Note-1 
                                  print("Vous avez",Note,"/30")

                                  Sauf que les caractères s'affichent comme ceci: 

                                  >>>Dans une maison quel est le poste le plus gourmand en électricité ?
                                  >>>['Sèche-linge', 'Éclairage', 'Production de froid', 'Tlévision']



                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    6 janvier 2024 à 21:42:12

                                    Pour le calcul de la note, regarde la ligne Note=+Note+2. Est-ce que cette opération te semble correcte pour augmenter la note ?

                                    Spécifie l'encodage lors de l'ouverture du fichier, modifie la ligne with open('quizz.csv') as fichier_csv: pour spécifier l'encodage UTF-8. Essaye avec with open('quizz.csv', encoding='utf-8') as fichier_csv:. Ça change quelque chose à l'affichage ?

                                    • Partager sur Facebook
                                    • Partager sur Twitter

                                    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
                                    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

                                      7 janvier 2024 à 11:04:39

                                      Oui merci cela change bien les caractères spéciaux en caractère normaux sauf pour les pourcentages

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        7 janvier 2024 à 11:13:01

                                        Y a pas de "caractères spéciaux", il y a un fichier qui est lu en utilisant le bon encodage ou un mauvais. Et si c'est pas le bon, ce qui est lu s'affichera mal.

                                        Faut appeler les choses par leur nom.

                                        Quel pourcentage ? Exemple ? qu'y a t'il dans le ficher ? Que voit-on s'afficher ?

                                        -
                                        Edité par michelbillaud 7 janvier 2024 à 11:16:27

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          7 janvier 2024 à 11:25:52

                                          Voila ce que ça affiche: 

                                          >>>['12', "Pour quelle part le CO2 contribue-t-il à l'effet de serre causé par les activités humaines ?"]
                                          >>>['20\xa0%', '40\xa0%', '60 %', '80\xa0%'

                                          EDIT: 

                                          Je voudrais imprimer les questions et les réponses possibles sans les crochets et les guillemets vous pourriez m'aider s'il vous plait. 

                                          De plus j'ai rajouté des petites choses sur mon programme que voici: 

                                          import csv
                                           
                                          Questions = []
                                          reponses = []
                                          reponses_justes = [] 
                                          explication = [] 
                                          source= [] 
                                           
                                          with open('quizz.csv', encoding='utf-8') as fichier_csv:
                                              reader = csv.reader(fichier_csv, delimiter=',')
                                              for ligne in reader:
                                                  Questions.append([ligne[0],ligne[2]])
                                                  reponses.append([ligne[3], ligne[4], ligne[5], ligne[6]])
                                                  reponses_justes.append(ligne[7])
                                                  explication.append(ligne[9]) 
                                                  source.append(ligne[10])
                                          Note=0    
                                          for question in Questions:
                                              print(question)
                                              print("\n")
                                              print(reponses[Questions.index(question)]) 
                                              print("\n")
                                              b=input("Entrer votre choix (1,2,3,4)")
                                              print("\n")
                                              
                                              if b==reponses_justes[Questions.index(question)]:
                                                  Note+Note+2 
                                                  print("Bien jouer vous avez choisi la bonne réponse!")
                                              else:
                                                  print("Dommage la bonne réponse était la n°",reponses_justes[Questions.index(question)])
                                                  print("\n")
                                                  print("Voici une explication pour vous informer:""\n" ,explication[Questions.index(question)])
                                                  print("\n")
                                                  print("Vous pouvez aller verifier l'information sur:""\n" ,source[Questions.index(question)])
                                                  Note=Note-1 
                                          
                                          if Note<=10:
                                              print(Note,"/60 vous etes nul") 
                                          elif Note<=20: 
                                              print(Note,"/60 vous pouvez faire encore mieux ") 
                                          elif Note<=30: 
                                              print(Note,"/60 vous etes juste en dessous de la moyenne") 
                                          elif Note<=40:
                                              print(Note,"/60 au dessus de la moyenne")
                                          elif Note>45:
                                              print(Note,"/60 vous etes un bon élement")
                                          else:
                                              print(Note,"/60 vous etes un expert")    





                                          -
                                          Edité par AyaxB 7 janvier 2024 à 11:57:44

                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            7 janvier 2024 à 12:37:34

                                            Vous pouvez faire encore mieux :lol:

                                            Je suis pas sûr qu'annoncer à une personne qu'elle est nulle soit très pédagogique et diplomate.

                                            Pour en revenir au code, tu as tous les print pour comprendre ce que chacun fait, maintenant faut que tu cherches un peu, mais tu as la lecture du CSV et son contenu.

                                            Faut bosser maintenant ;)

                                            • Partager sur Facebook
                                            • Partager sur Twitter

                                            Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
                                            La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

                                              7 janvier 2024 à 12:40:15

                                              '20\xa0%', '40\xa0%', '60 %', '80\xa0%
                                              

                                              le problème ne vient pas du caractère pourcentage, mais de l'espace insécable (code iso-latin1 A0 en hexadécimal = \xa0) qui est dans certaines cellules (pas la troisième, apparemment).

                                              https://fr.wikipedia.org/wiki/Espace_ins%C3%A9cable

                                              Comme dit le proverbe, Garbage In, Garbage Out.

                                              Il va falloir faire des substitutions pour nettoyer les données à la lecture.

                                              (EDIT = A0 pas 0A)



                                              -
                                              Edité par michelbillaud 7 janvier 2024 à 12:53:12

                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                7 janvier 2024 à 12:52:16

                                                Ok merci pour votre aide
                                                • Partager sur Facebook
                                                • Partager sur Twitter

                                                Integrer un csv dans un qcm en python

                                                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                • Editeur
                                                • Markdown