Benoît Verhaeghe

Quizz capitales

Python - TP2

Posted by Benoît "badetitou" Verhaeghe on November 19, 2019

Quizz capitales

Ecrivez un script Python qui crée un quizz sur les capitales

Voici les spécifications du script :

  • le nombre de questions doit être donné en paramètre au script
  • le fichier nommé capitales.csv des pays/capitales est à récupérer sur le Moodle en voici un fragment :
Afghanistan (l'),Kaboul
Afrique du Sud (l'),Prétoria
Albanie (l'),Tirana
  • les noms des pays et des capitales doivent être initialement recopiés dans deux listes (pour ne pas être obligé de relire constamment le fichier)
  • chaque pays doit être choisi aléatoirement : pour cela utilisez la fonction randint() du module random : random.randint(m, n) renvoie un entier compris entre m et n
  • le score de l’internaute doit être affiché :
    • en nombre de bonnes réponses
    • en pourcentage de bonnes réponses
  • et si vous avez le temps, améliorez le script pour :
    • qu’une question ne soit pas reposée lors d’une même session de test
    • que l’on puisse aussi choisir de trouver les noms de pays à partir de leurs capitales : dans ce cas-là, un menu demanderait à l’utilisateur la modalité du jeu.

Solution

#!/usr/bin/env python3

# -*- coding : utf-8 -*-

import sys, os, re, random
os.system("clear")
if len(sys.argv) > 1 and sys.argv[1].isdigit() :
    nbQuestions = int(sys.argv[1])
    fd = open("capitales.csv", "r")
    pays = []
    capitales = []
    for ligne in fd : # on peut utiliser split() ou une regexp

        data = ligne.split(",")
        if len(data) == 2 :
            pays.append(data[0])
            capitales.append(data[1][:-1])
        # resultat = re.search("^([^(]+).*,([^(]+)", ligne)

        # if resultat :

        # pays.append(resultat.group(1))

        # capitales.append(resultat.group(2)[:-1])


    score = 0
    numQuestion = 0
    while numQuestion < nbQuestions :
        numPays = random.randint(0, len(pays)-1)
        reponse = input("\nCapitale de "+pays[numPays]+" ? ")
        if reponse == capitales[numPays] :
            print("Bonne réponse ("+capitales[numPays]+")")
            score += 1
        else :
            print("La bonne réponse était", capitales[numPays])
    numQuestion += 1
    del pays[numPays];
    del capitales[numPays];

    print("\nVotre score est", score, "soit", score/nbQuestions*100, "%")
else :
    print("Mauvais usage du script : un nombre de questions doit être donné en parametre !")