Quiz en python

Fermé
SPAZE.. Messages postés 2 Date d'inscription jeudi 20 octobre 2022 Statut Membre Dernière intervention 20 octobre 2022 - 20 oct. 2022 à 16:44
 biomanne - 21 oct. 2022 à 10:07

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 23232 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 septembre 2024 Ambassadeur 1 538
20 oct. 2022 à 17:16

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 jeudi 20 octobre 2022 Statut Membre Dernière intervention 20 octobre 2022
Modifié le 20 oct. 2022 à 18:21

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 23232 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 septembre 2024 1 538 > SPAZE.. Messages postés 2 Date d'inscription jeudi 20 octobre 2022 Statut Membre Dernière intervention 20 octobre 2022
20 oct. 2022 à 19:16

Tu n'as aucun message d'erreur?

0

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