Création d'un quiz [Résolu]

Signaler
-
 GIBERT -
Bonjour, je suis actuellement en train de faire un quiz en python ce que j'ai réussi jusque ici. Cependant notre professeur nous a demandé de faire en sorte que les questions se posent aléatoirement et qu'une fois la question posée elle ne puisse pas être encore affichée.j'ai donc fait avec le module shuffle mais il n'y a qu'une seule question qui se pose la 10 a chaque fois puis le resultat s'affiche c'est cela que je ne comprends pas. Je vous met ce que j'ai codé ci-dessous et vous remercie de votre aide par avance(je ne mets que la partie avec le module shuffle qui ne fonctionne pas correctement. Vous pouvez me dire si vous avez besoin des autres parties de mon code):


score = 0
quizz = importe("quizz.csv")
nquest = len(quizz)
for i in range(nquest) :
# affichage d'une question et saisie de la réponse
from random import *
number = randint(0,10)
x = [[i] for i in range(number)]
shuffle(x)
question = quizz[i]
affiche(question)
reponse = input('\nVotre choix :')








Configuration: Windows / Chrome 79.0.3945.130

2 réponses

Bonjour,

Que vaut quizz ? Quelle est sa structure ?
Je suis désolé je ne comprends pas ce que tu veux dire je te mets mon code entier pour que tu puisses peut être y répondre toi-même? :) D'ailleurs maintenant j'ai réussi a faire afficher toutes les questions aléatoirement cependant au bout de 10 questions elles s'arrêtent mais une même question peut être posée plusieurs fois ce que je ne veux pas je voudrai que les questions se posent une par une aléatoirement et qu'une seule fois de chaque.Merci de ton aide ;)



from random import *
def importe(nomfichier) :
import csv
liste = []
with open(nomfichier) as fichier :
lecteur = csv.reader(fichier)
nl = 0
for ligne in lecteur :
if nl == 0 :
entete = (ligne)
else :
# bd.append({ entete[0]:ligne[0],entete[1]:ligne[1],entete[2]:ligne[2],entete[3]:(ligne[3]),entete[4]:ligne[4],entete[5]:ligne[5],entete[6]:ligne[6] })
record = {}
for i in range(len(ligne)) : record[entete[i]] = ligne[i]
liste.append(record)
nl += 1
return liste

# pour test, affichage du contenu de la bd
def affiche_base(bd) :
print('Contenu de la base de données \n')
for question in bd :
for cle, valeur in question.items(): print(cle," : ", valeur)
print()

# affichage d'une question
def affiche(question) :
print('Question n°',question['id'])
print('Thème : ',question['theme'])
print(question['question'])
print('1 : ',question['prop1'])
print('2 : ',question['prop2'])
print('3 : ',question['prop3'], end="")
# QUIZZ : programme principal
score = 0
x = 0
quizz = importe("quizz.csv")
nquest = len(quizz)
for i in range(nquest) :
shuffle(quizz)
question = quizz[i]
affiche(question)
reponse = input('\nVotre choix :')
# verification de la réponse
if reponse == question['reponse'] :
print(':) EXACT !')
score += 1
x += 1
else :
print(":( ERREUR, la bonne réponse était la n°", question['reponse'])
print(question['comment'],'\n')
x += 1
x = 10
print("Votre score est de : ", score," / ", nquest, " - A bientôt ...")
> GIBERT
Voilà, la structure de quizz est donc une liste de dictionnaires.

Tu te compliques bien la vie, tu as juste à appliquer shuffle sur cette liste une seule et unique fois et c'est tout, là tu mélanges à chaque tour de boucle, donc forcément, peu de chance de ne pas obtenir de mêmes questions.

# Inutile de polluer l'espace global du module de toutes les fonctions
# du module random
# from random import *
import random

# les noms de fonctions se mettent à l'infinitif si elles effectuent une action
# le module csv permet nativement de construire des dictionnaires en se basant
# sur la 1ère ligne du fichier définissant les noms de colonnes
def importer(nomfichier):
    import csv
    with open(nomfichier) as fichier:
        reader = csv.DictReader(fichier)
        return list(reader)


def afficher(question):
    print('Question n°',question['id'])
    print('Thème : ',question['theme'])
    print(question['question'])
    print('1 : ',question['prop1'])
    print('2 : ',question['prop2'])
    print('3 : ',question['prop3'], end="")


# QUIZZ : programme principal
score = 0
quizz = importer("quizz.csv")
# quiz étant une liste de dictionnaires
# Alors on applique shuffle dessus
random.shuffle(quizz)

# Puis on lit chaque dictionnaire du quiz
for dico in quizz:
    afficher(dico)
    reponse = input('\nVotre choix :')
    if reponse == dico['reponse']:
        print(':) EXACT !')
        score += 1
    else :
        print(":( ERREUR, la bonne réponse était la n°", dico['reponse'])
        print(dico['comment'],'\n')
nquest = len(quizz)
print("Votre score est de : ", score," / ", nquest, " - A bientôt ...")


PS: Lorsque tu postes du code, utilise la balise code du forum afin d'obtenir un joli code tout bien coloré et indenté ;)
Merci beaucoup j'ai réussi grâce a toi tes explications sont claires et très bien merci beaucoup ;)