Création d'un quiz
Résolu
GIBERT
-
GIBERT -
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 :')
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
A voir également:
- Création d'un quiz
- Creation compte gmail - Guide
- Création site web - Guide
- Création d'un compte google - Guide
- Media creation tool - Télécharger - Systèmes d'exploitation
- Logo quiz - Télécharger - Jeux vidéo
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 ...")
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é ;)