Faire un QCM à partir d'un fichier texte

Fermé
Texos Messages postés 5 Date d'inscription mercredi 23 octobre 2019 Statut Membre Dernière intervention 25 octobre 2019 - Modifié le 23 oct. 2019 à 20:12
Texos Messages postés 5 Date d'inscription mercredi 23 octobre 2019 Statut Membre Dernière intervention 25 octobre 2019 - 25 oct. 2019 à 16:47
Bonjour à tous,
Je suis débutant en python et mon professeur me demande de faire un QCM à partir d'un fichier texte.
J'ai créé mon fichier texte avec les questions et les réponses, j'arrive à l'ouvrir dans python mais là je suis bloqué : je ne sais pas comment commencer mon programme c'est à dire piocher des questions aléatoirement en me servant de ce que j'ai écris dans le fichier texte.
Voici l'énoncé :


Voici mon fichier texte (pour l'instant je n'ai marqué que 10 questions):


Et voici le début de mon programme python :
>>> fichier = open ('qcm_noms.txt', 'r')
>>> lignes = fichier.readlines()
>>> print(lignes)
['Quelle est la fonction utilisée pour afficher du texte? A-print B-input C-randint D-def ~A;\n', 'En quelle année a existé la première version de Python? A-1998 B-1950 C-1991 D-2000 ~C;\n', "A quoi sert la fonction len()? A-afficher du texte B-rentrer un nombre C-afficher les nombres dans l'ordre croissant D-afficher le nombre d'items d'une liste ~D;\n", 'Les nombres binaires sont? A-pairs B-0 et 1 C-impairs D-0 Ã\xa0 100 ~B;\n', "Lequel de ces langages n'est pas un langage de programmation? A-HTML B-Scratch C-Ruby D-Tornade ~D;\n", "Combien de lignes a la table de vérité d'une fonction booléenne Ã\xa0 5 variables? A-16 lignes B-30 lignes C-32 lignes D-5 lignes ~C;\n", 'Quelle sera la représentation en base 2 du nombre 51? A-110011 B-111011 C-111111 D-110111 ~A;\n', 'Quand a été créé Google? A-1994 B-1996 C-1998 D-2000 ~C;\n', "Quel élément n'est pas un système d'exploitation? A-Humanoïd B-Linux C-Tizen D-BlackBerryOS ~A;\n", 'Quel a été le premier Windows qui a existé? A-Windows85 B-WindowsNT C-Windows0.1 D-Windows1.0 ~D;\n']
>>>

Merci de m'aider s'il vous plaît.

5 réponses

Chris 94 Messages postés 50978 Date d'inscription mardi 8 janvier 2008 Statut Modérateur Dernière intervention 17 février 2023 7 324
23 oct. 2019 à 19:42
Bonjour,

Merci de saisir ton code (un copié-collé fait l'affaire) dans la fenêtre d'édition. Pense à lui attribuer la couleur syntaxique et la forme correcte avec le bouton
<>
.
3
RatonWasher
24 oct. 2019 à 11:07
Yô,

Il faut séparer ton problème en plusieurs parties. Tu utilises des données contenues dans un fichier texte, tu parses ton fichier, tu stockes les données et après tu les utilises comme bon te semble. :)

Tu prends donc tes 20 questions que tu mets dans une liste sur laquelle tu opéreras.

Lire la ligne > Stocker la ligne > Passer à la ligne suivante

Une fois la liste conçue, ce sont des opérations de chaine, n'oublie pas qu'en python, une chaine est une séquence utilisable comme un tableau, tu peux donc accéder à un caractère via son indice de position.

Voici un bout de code qui devrait t'aider, tu n'as plus qu'à l'adapter à ton problème :

from random import *

"""
C'est le genre de fonction que tu peux utiliser. Il faut maintenant l'adapter à ton problème.
"""
def questionnaire():
    str = "Quelle est la réponse ? A-42 B-Nem C-Plancton ~B;"
    str2 = "Quelles sont les couleurs d'un raton-laveur ? A-Rouge et noir B-Blanc et rouge C-Blanc et noir ~C;"
    # print(str2[len(str2)-2:-1]) Tu veux prendre la réponse qui se trouve à chaque fois avant le ; et après le ~
    # print(str.split('~')) Sinon tu peux aussi split la phrase en 2 parties

    # Tu regroupes tes questions dans une liste dans laquelle tu en sélectionneras une. Une fois
    # la question sélectionnée, tu pourras la delete de la liste pour éviter qu'elle soit reposée.
    # Pour prendre 10 questions, tu n'as plus qu'à faire une boucle avec une range de 0 à 9.
    sentences = [str, str2]
    rand = randrange(len(sentences))
    answer = input(sentences[rand][:-3] + '\n')
    if answer == sentences[rand][len(sentences[rand]) - 2:-1]:
        print("Vous avez gagné !")
    else:
        print('C\'est faux !')


questionnaire()


Ce code ne traite qu'une seule question, il faut maintenant ajouter les points et l'extraction des données.
2
Texos Messages postés 5 Date d'inscription mercredi 23 octobre 2019 Statut Membre Dernière intervention 25 octobre 2019
24 oct. 2019 à 17:03
Merci beaucoup pour ton aide. Je vais essayer de faire de cette manière.
0
Bonsoir,

Quelqu'un saurait-il si je peux diviser toutes les questions en même temps, sans avoir besoin de les faire une par une ?


python propose des structures pour faire cela, list, dict, tuple, ...


Et comment choisir 10 questions aléatoirement?

Cela peut se faire avec la fonction sample du module random.
1
Texos Messages postés 5 Date d'inscription mercredi 23 octobre 2019 Statut Membre Dernière intervention 25 octobre 2019
24 oct. 2019 à 23:05
Merci, je vais essayer ces fonctions.
0
Bonjour.

Si tu veux obtenir les questions de ton fichier sous forme de liste, alors utilise readlines.

liste_questions = fichier.readlines()


Puis pour obtenir 10 questions.

questions = random.sample(liste_questions, 10)


Voilà, c'est pas plus compliqué.

Tu devrais quand même coder dans un fichier, utiliser l'interpréteur python, c'est bien pour tester de tout petits bouts de code, pas pour faire autant de lignes.
1
Texos Messages postés 5 Date d'inscription mercredi 23 octobre 2019 Statut Membre Dernière intervention 25 octobre 2019
25 oct. 2019 à 16:47
Merci pour ton aide.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Texos Messages postés 5 Date d'inscription mercredi 23 octobre 2019 Statut Membre Dernière intervention 25 octobre 2019
24 oct. 2019 à 20:19
Bonsoir,
J'ai avancé mon code. Voilà où j'en suis :

>>> fichier = open('qcm_noms.txt', 'r')
>>> question = fichier.readline()
>>> print(question)
Quelle est la fonction utilisée pour afficher du texte? A-print B-input C-randint D-def ~A;

>>> question2 = fichier.readline()
>>> print(question2)
En quelle année a existé la première version de Python? A-1998 B-1950 C-1991 D-2000 ~C;

>>> question3 = fichier.readline()
>>> print(question3)
A quoi sert la fonction len()? A-afficher du texte B-rentrer un nombre C-afficher les nombres dans l'ordre croissant D-afficher le nombre d'items d'une liste ~D;

>>> question4 = fichier.readline()
>>> print(question4)
Lequel de ces langages n'est pas un langage de programmation? A-HTML B-Scratch C-Ruby D-Tornade ~D;

>>> question.split("~", 1)
['Quelle est la fonction utilisée pour afficher du texte? A-print B-input C-randint D-def ', 'A;\n']
>>> quest = question.split("~", 1)[0]
>>> print(quest)
Quelle est la fonction utilisée pour afficher du texte? A-print B-input C-randint D-def
>>> answer = question.split("~", 1)[1]
>>> print(answer)
A;

>>> question2.split("~", 1)
['En quelle année a existé la première version de Python? A-1998 B-1950 C-1991 D-2000 ', 'C;\n']
>>> quest2 = question2.split("~", 1)[0]
>>> print(quest2)
En quelle année a existé la première version de Python? A-1998 B-1950 C-1991 D-2000
>>> answer2 = question2.split("~", 1)[1]
>>> print(answer2)
C;

>>> question3.split("~", 1)
['Les nombres binaires sont? A-pairs B-0 et 1 C-impairs D-0 Ã\xa0 100 ', 'B;\n']
>>> quest3 = question3.split("~", 1)[0]
>>> print(quest3)
Les nombres binaires sont? A-pairs B-0 et 1 C-impairs D-0 Ã* 100
>>> answer3 = question3.split("~", 1)[1]
>>> print(answer3)
B;

>>> import random
>>> random.choice(['quest', 'quest2', 'quest3'])
'quest'
>>>

Quelqu'un saurait-il si je peux diviser toutes les questions en même temps, sans avoir besoin de les faire une par une ?
Et comment choisir 10 questions aléatoirement?
Merci beaucoup!
0