Quizz en python [Résolu]

Messages postés
24
Date d'inscription
samedi 16 février 2019
Statut
Membre
Dernière intervention
13 avril 2019
- - Dernière réponse :  gabyMMI - 20 avril 2019 à 07:28
Bonjour,

J'ai demandé de l'aide à hbouia avant les vacances pour réaliser un programme sur Python (un quiz). Il a d'ailleurs pris le temps de réaliser un programme détaillé avec l'utilisation de dictionnaire, seulement il ne fonctionne pas et il est beaucoup trop complexe pour moi.

Je souhaite confectionner un programme avec votre aide qui me permettrait de poser des questions dans un ordre aléatoire ainsi que l'affichage du score au fur et à mesure que le joueur répond aux questions.

Merci par avance de votre aide!

;)
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
Messages postés
107
Date d'inscription
mardi 30 juillet 2013
Statut
Membre
Dernière intervention
17 avril 2019
5
1
Merci
Bonjour,
Si ça ne marche pas, je pense que c'est dû à la version de python.

En effet; le programme que j'ai déposé est en python version 2.7.

Si tu utilises python 3 et +, il suffit de remplacer :

print blablabla

par (en rajoutant les parenthèses) :

print(blablabla)



A part ça si ça ne marche pas, envoie tes messages d'erreurs !

Bonne journée et bon courage !

hb

Dire « Merci » 1

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez CodeS-SourceS

Codes Sources 115 internautes nous ont dit merci ce mois-ci

Commenter la réponse de hbouia
Messages postés
24
Date d'inscription
samedi 16 février 2019
Statut
Membre
Dernière intervention
13 avril 2019
0
Merci
Bonjour hbouia,

C'est bien un problème de version, mon camarade avec python 2.7 à réussi à faire tourner le programme tandis que moi avec ma version 3.7.1 non.

J'ai rajouté les parenthèses mais toujours rien. J'envoie le programme parce je ne sais pas si les "print" (soulignés) doivent avoir des parenthèses. Je joints aussi le message erreurs.


Programme Python :

# Fonction donnant une permutation aléatoire d'une séquence donnée
from random import shuffle

# Mise en données sous forme d'un dictionnaire
# Clé : Q (question )
# Attributs : Liste de réponses dont seulement une est correcte (RJ)
# Exemples :

quiz = {
"Qui est la première femme à avoir traversé les Etats-Unis à moto?":["Bessie Stringfield","Bessie Stringfield","Amelia Earhart","Anne-France Dautheville"]
,"Quel acteur a joué dans le film La Grande Evasion?":["Steve Mcqueen","Peter Fonda","Denis Hopper","Steve Mcqueen"]
,"Je suis une japonaise, je suis la première à avoir été importée aux Etats-Unis. Qui suis-je?":["Honda","Yamaha","Honda","Kawasaki"]
,"Sur quelle moto le Che a-t-il traversé l'Amérique de Sud?":["Norton","Une Triumph","Norton","Une Harley-Davidson"]
,"Qui est la première femme française à avoir fait le tour du monde à moto?":["Anne-France Dautheville","Livia Lancelot","Camille du Gast","Anne-France Dautheville"]
,"En quelle année a eu lieu la première course de Moto GP?":["1949","1946","1954","1949"]
}

# Nombre de questions du quiz
nQ = len(quiz)

# Liste d'une permutation aléatoire des questions
questions=quiz.keys() # Liste des questions du quiz
shuffle(questions) # Liste d'une permutation aléatoire des questions

# Nombre de questions proposées pour le test (inférieur ou égal à nQ)
nb_questions = 4
nb_questions = min(nb_questions,nQ) # limite le nombre de questions à nQ

# Score (s'incrémente de 1 à chaque bonne réponse)
score=0 # Initialisation du score à zéro avant le début du quiz

# Début du quiz
for q in range(nb_questions):
question = questions[q]
reponses = quiz[question][:] # Copie de laiste des réponses potentielles
shuffle(reponses) # mélange des réponses potentielles

print
print(u'Choisissez une et une seule réponse à la question : ',question)
for i,reponse in enumerate(reponses):
print(i,' : ',reponse)
print
choix = int(raw_input('Saisir votre réponse : '))

print
if reponses[choix] == quiz[question][0]:
score+=1
print('Bravo ! Votre score est de ',score,' / ',nb_questions)
else:
print(u'Mauvaise réponse ! Votre score est de ',score,' / ',nb_questions)

print
print('Vous avez eu un score de ',score,' / ',nb_questions)


Message erreur :

Traceback (most recent call last):
File "C:\Users\frederic.coulpied\Desktop\quiz_exemple_v0.py", line 23, in <module>
shuffle(questions) # Liste d'une permutation aléatoire des questions
File "C:\Users\frederic.coulpied\AppData\Local\Programs\Python\Python37-32\lib\random.py", line 278, in shuffle
x[i], x[j] = x[j], x[i]
TypeError: 'dict_keys' object does not support indexing


Merci beaucoup de votre aide ;)
Commenter la réponse de gabyMMI
Messages postés
24
Date d'inscription
samedi 16 février 2019
Statut
Membre
Dernière intervention
13 avril 2019
0
Merci
Quand le programme tournera, j'aurai des questions à vous posez sur le langage si cela ne vous dérange pas. J'ai besoin de tous savoir, au mot près pour expliquer mon programme le jour de l'oral.

Merci beaucoup, heureusement que vous êtes là ;)
Commenter la réponse de gabyMMI
Messages postés
24
Date d'inscription
samedi 16 février 2019
Statut
Membre
Dernière intervention
13 avril 2019
0
Merci
Je l'ai testé sur python 2.7 pour voir à quoi cela ressemblait, le programme fonctionne seulement dans la liste des réponses proposées, la bonne réponse apparaît.

Choisissez une et une seule réponse à la question : Quel acteur a joué dans le film La Grande Evasion?
0 : Denis Hopper ---------> choix
1 : Steve Mcqueen ===============> réponse à la question
2 : Peter Fonda ---------> choix
3 : Steve Mcqueen ---------> choix

Saisir votre réponse :
hbouia
Messages postés
107
Date d'inscription
mardi 30 juillet 2013
Statut
Membre
Dernière intervention
17 avril 2019
5 -
Bonjour,
Remplacer :
print
par :
print("")


Autre chose :
Dans les réponses proposées au choix, et dans le dictionnaire : la bonne réponse ne doit y figurer qu'une et une seule fois à la première position de la liste des réponses.

A part ça, tu travailles avec quel environnement avec python : spyder, pyzzo, winpython, … ?

Bon courage et bonne journée.

hb
Commenter la réponse de gabyMMI
Messages postés
24
Date d'inscription
samedi 16 février 2019
Statut
Membre
Dernière intervention
13 avril 2019
0
Merci
Bonjour,

Je viens de remplacer "print" par "print("")" mais cela ne fonctionne pas.

Voilà la photo du programme :



Voilà le message erreur :



Je travail sur du python, ma partie est de réaliser le programme, un de mes camarades réalisent un programme de déplacement d'une balle avec python et Tkinter et la dernière personne gère la partie HTML et CSS (pour introduire les deux programmes python liés). L'HTML va peut-être être abandonnée en raison de la complexité et nos capacités de programmation.

Bonne soirée à vous!

gabyMMI
gabyMMI
Messages postés
24
Date d'inscription
samedi 16 février 2019
Statut
Membre
Dernière intervention
13 avril 2019
-
Bonsoir hb,

J'ai regardé sur Internet pour la "remise à niveau du programme" de python 2.7 à python 3.7.
J'ai remarqué qu'il faut effectivement rajouter les parenthèses après print.
J'ai aussi vu qu'il faut remplacer "raw_input" par input.
Je ne sais pas si il faut mettre la commande "shuffle", elle est peut-être déjà inséré dans python 2.7.

Bonne soirée HB ;)
hbouia
Messages postés
107
Date d'inscription
mardi 30 juillet 2013
Statut
Membre
Dernière intervention
17 avril 2019
5 -
Bonjour gabyMMI,

En python 2 ou 3 : random.shuffle(liste) donne une liste désordonnée de la liste.
de 2 à 3 :
On remplace print par print() et raw_input() par input().

Bon courage et je serai intéressé par ta production quand tu finaliseras ton projet et après ta soutenance.

hb
gabyMMI
Messages postés
24
Date d'inscription
samedi 16 février 2019
Statut
Membre
Dernière intervention
13 avril 2019
-
Bonjour hb,

Je suis désolé de ne pas vous avoir répondu, ça ne m'excuse pas mais je suis en période de Bac Blanc. J'ai tout de même suivi vos instructions, le programme tourne seulement les parenthèse et les guillemets sont visibles lorsque je fais tourner le programme. J'ai cherché où était l'erreur mais impossible de trouver.



Bonne journée hb!! ;)
hbouia
Messages postés
107
Date d'inscription
mardi 30 juillet 2013
Statut
Membre
Dernière intervention
17 avril 2019
5 -
Bonjour gabyMMI,

En python 2.7, pas besoin de mettre les parenthèses pour print et faire précéder les textes à afficher par la lettre u (unicode) surtout les textes utilisant des caractères accentués. Exemple :

print u"réponse"


au lieu de :

print "réponse"


Bon courage

hb
Oui mais ce n'est pas en python 2.7 que l'on peut faire ça? J'ai python 3.7 :D

Bon courage à vous aussi
Commenter la réponse de gabyMMI

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.