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.
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.
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
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)
Ok, que te manque-t-il comme information pour commencer à développer ?
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)
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.
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)
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")
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
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)
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")
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.
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)
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.
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)
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
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)
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 ?
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)
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
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
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)
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).
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)
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)
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)
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)
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)
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)
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)
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)
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)