Quiz en python

SPAZE.. Messages postés 2 Date d'inscription   Statut Membre Dernière intervention   -  
 biomanne -

Bonjour, je suis coincé sur un exercice en python. Je doit faire un quiz de 10 questions et a la fin que ceci soit affiché : A la question 1 : ......, ta réponse était ...., la bonne réponse était ......
A la question 2 : ......, ta réponse était ...., la bonne réponse était ......

etc....

voici ce que j'ai fait :

ListeQuestions = ["combien font 1 + 1 ?","combien font 4 diviser par 2?","quelle est la couleur du chavla blanc d'Henri IV ?","Quelle est la partie du corps qui a 5 doigts ?"

,"Comment s'appelle un polygone à trois côtés ?","Combien y a-t-il de minutes dans une heure ?","Combien y a-t-il d'heure dans la journée ?","Quel est l'antonyme de riche ?",

"Est-ce qu'on obtient le même résultat si on multiplie 3x4 et 4x3 ?","Quelle est le plus grand pays du monde ?"]

rep = ["2","2","blanc","la main","un triangle","60","24","pauvre","oui","la russie"]

foriinrange(0,10,1):

print(ListeQuestions[i])

reput = str(input())

ifreput==rep[i]:

print("Bonne réponse")

else:

print("perdu")

foruinrange(1,10,1):

print("A la question" ,u ,": ",ListeQuestions[u-1], ",ta réponse était : ",reput,"la bonne réponse était: ", rep[u-1])


Windows / Firefox 106.0

2 réponses

yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 

bonjour, tiens compte de ceci quand tu partages du code: https://codes-sources.commentcamarche.net/faq/11288-poster-un-extrait-de-code

1
SPAZE.. Messages postés 2 Date d'inscription   Statut Membre Dernière intervention  
 

merci, voici ce que j'ai fait :

ListeQuestions = ["combien font 1 + 1 ?","combien font 4 diviser par 2?","quelle est la couleur du chavla blanc d'Henri IV ?","Quelle est la partie du corps qui a 5 doigts ?"

,"Comment s'appelle un polygone à trois côtés ?","Combien y a-t-il de minutes dans une heure ?","Combien y a-t-il d'heure dans la journée ?","Quel est l'antonyme de riche ?",

"Est-ce qu'on obtient le même résultat si on multiplie 3x4 et 4x3 ?","Quelle est le plus grand pays du monde ?"]

rep = ["2","2","blanc","la main","un triangle","60","24","pauvre","oui","la russie"]

foriinrange(0,10,1):

print(ListeQuestions[i])

reput = str(input())

ifreput==rep[i]:

print("Bonne réponse")

else:

print("perdu")

foruinrange(1,10,1):

print("A la question" ,u ,": ",ListeQuestions[u-1], ",ta réponse était : ",reput,"la bonne réponse était: ", rep[u-1])

. Pouvez-vous m'aider ?

0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > SPAZE.. Messages postés 2 Date d'inscription   Statut Membre Dernière intervention  
 

Tu n'as aucun message d'erreur?

0
biomanne
 

Bonjour,

La seule erreur se situe au niveau du dernier range, lire les commentaires de code.

# Il est préférable de mettre une valeur par ligne, pour question de lisibilité
# ListeQuestions et rep étant des itérables non modifiables, autant utiliser des
# tuples.
ListeQuestions = (
    "combien font 1 + 1 ?",
    "combien font 4 diviser par 2?",
    "quelle est la couleur du chavla blanc d'Henri IV ?",
    "Quelle est la partie du corps qui a 5 doigts ?",
    "Comment s'appelle un polygone à trois côtés ?",
    "Combien y a-t-il de minutes dans une heure ?",
    "Combien y a-t-il d'heure dans la journée ?",
    "Quel est l'antonyme de riche ?",
    "Est-ce qu'on obtient le même résultat si on multiplie 3x4 et 4x3 ?",
    "Quelle est le plus grand pays du monde ?",
)

rep = (
    "2",
    "2",
    "blanc",
    "la main",
    "un triangle",
    "60",
    "24",
    "pauvre",
    "oui",
    "la russie",
)

# Inutile de spécifier le comportement par défaut de range
# de plus, il est préférable d'utiliser la longueur de la liste en paramètre
#for i in range(0, 10, 1):
for i in range(len(ListeQuestions)):
    print(ListeQuestions[i])
    reput = str(input())
    if reput == rep[i]:
        print("Bonne réponse")
    else:
        print("perdu")

# Si tu commences à 1, tu dois forcément ajouter 1 au dernier tour du range,
# sinon, le dernier élément ne sera pas lu
# for u in range(1, 10, 1):
for u in range(1, len(ListeQuestions) + 1):
    print(
        "A la question",
        u,
        ": ",
        ListeQuestions[u - 1],
        ",ta réponse était : ",
        reput,
        "la bonne réponse était: ",
        rep[u - 1],
    )

Je te propose de revoir la structure de tes questions et réponses afin de grouper tout cela dans un même itérable (tuple donc).

items = (
    # Question, réponses possibles (tuple), >> voir pour ajouter la difficulté de la question
    ("combien font 1 + 1", (2, 'deux',)),
    # ...
    # ...
    ("Quelle est la partie du corps qui a 5 doigts", ('main', 'mains', 'pied', 'pieds',)),
    # etc.
)



Ainsi la lisibilité est bien plus aisée, j'ai mis volontairement plusieurs réponses aux questions, c'est quand même plus fun.

Maintenant pour les lire, une petite boucle combinée au mots clef enumerate de python.
 

for i, (question, choices) in enumerate(items, 1):
    print(f'question {i}')
    print(f'{question} ?')
    answer = input()
    for choice in choices:
        if str(choice) == answer:
            print('Bonne réponse =)')
            break
    else: # On entre dans le else de la boucle for uniquement si elle n'a pas été interrompue (break donc)
        print('Mauvaise réponse =(')
        # Afficher les réponses possibles sur une ligne avec une liste en compréhension
    print()

Tu pourrais implémenter ; pour bien comprendre ; dans ton script un système de points, selon la difficulté de la question, définir X points, pour cela il faudra ajouter une 3ème valeur dans les items du tuple.

Ainsi dans ta boucle, si la réponse utilisateur est bonne, ajouter les points de la question à sa notation.

Et bien sûr à la fin, afficher les points obtenus au questionnaire.

0