コード例 #1
0
ファイル: theme.py プロジェクト: clementinesacre/ProjetProgra
    def creation_question(self, donnees):
        """
        Permet de créer un objet Question.

        PRE : 'donnees' est une liste avec la question comme premier élément, le deuxième élément est la bonne réponse,
        et les quatres éléments suivants sont les différentes propositions de réponses.
        POST : Crée la question, puis écrit ses différentes informations dans le fichier du thème associé.
        """
        self.initialisation_question(donnees)
        try:
            with open(fct.chemin_absolu(self.__nom_fichier), "a",
                      newline='') as fichier:
                nouveau_fichier = csv.writer(fichier, quotechar=',')
                nouveau_fichier.writerow(donnees)
        except FileNotFoundError:
            logger.error(
                'classe/theme.py : creation_question() : FileNotFoundError : '
                + self.__nom_fichier)
            raise FileNotFoundError('Fichier introuvable.')
        except IOError:
            logger.error('classe/theme.py : creation_question() : IOError : ' +
                         self.__nom_fichier)
            raise IOError('Erreur IO.')

        logger.info('classe/theme.py : creation_question() : écriture de ' +
                    donnees[0] + " dans " + self.__nom_fichier)
コード例 #2
0
ファイル: menu.py プロジェクト: clementinesacre/ProjetProgra
def lancement_application():
    """
    Démarre l'application.

    PRE : -
    POST : Si console : Initialise l'objet librairie avec ses informations, et l'objet joueur. Lance ensuite l'initialisation du jeu,
    puis l'accès au menu.
    Si graphique : lance l'interface graphique permettant de voir les scores des joueurs par thème.
    """
    commande = sys.argv

    if len(commande) != 2:
        print("Commandes attendues :")
        print("    pour lancer l'interface console : python main.py console ")
        print(
            "    pour lancer l'interface graphique : python main.py graphique")
    elif commande[1] == "console":
        vb.initialisation_informations()
        initialisation_bibliotheque()
        vb.initialisation_joueur()
        fct.separation()
        introduction()
        menu_principal()

    elif commande[1] == "graphique":
        dico_scores = fct.recup_donnees_fichier_json(
            fct.chemin_absolu('ressources/scores.json'))
        cg.Graphique(dico_scores)

    else:
        print("Commandes attendues :")
        print("    pour lancer l'interface console : python main.py console ")
        print(
            "    pour lancer l'interface graphique : python main.py graphique")
コード例 #3
0
    def suppression_theme(self, theme):
        """
        Permet de supprimer un thème existant.

        PRE : 'theme' est un objet Theme.
        POST : Supprime le fichier du thème et le retire du fichier des thèmes et de la liste des objets Themes.
        """
        try:
            del self.__liste_themes[self.__liste_themes.index(theme)]
        except ValueError:
            logger.error(
                'classe/bibliotheque.py : suppression_theme() : ValueError : '
                + theme.nom_theme)
            raise ValueError("Clé inconnue")

        liste_fichiers = []
        try:
            with open(fct.chemin_absolu(self.__nom_fichier_bibliotheque),
                      "r") as fichier_lecture:
                lire = csv.reader(fichier_lecture)
                for ligne in lire:
                    if theme.nom_fichier[11:] != (','.join(ligne).rstrip()):
                        liste_fichiers.append(','.join(ligne))

            with open(fct.chemin_absolu(self.__nom_fichier_bibliotheque),
                      'w',
                      newline='') as fichier_ecriture:
                write = csv.writer(fichier_ecriture)
                for i in liste_fichiers:
                    write.writerow([i])

        except FileNotFoundError:
            logger.error(
                'classe/bibliotheque.py : suppression_theme() : FileNotFoundError : '
                + self.__nom_fichier_bibliotheque)
            raise FileNotFoundError('Fichier introuvable')
        except IOError:
            logger.error(
                'classe/bibliotheque.py : suppression_theme() : IOError : ' +
                self.__nom_fichier_bibliotheque)
            raise IOError('Erreur IO ')

        os.remove(theme.nom_fichier)
        logger.info('classe/bibliotheque.py : suppression_theme() : ' +
                    theme.nom_theme)
コード例 #4
0
    def creation_theme(self, nom_nouveau_fichier):
        """
        Permet de créer un nouveau thème.

        PRE : 'nom_nouveau_fichier' est une string.
        POST : Instancie un objet Theme, crée son fichie, l'ajoute dans le fichier thèmes et dans la liste des objets
        Theme.
        """
        nouveau_theme = Theme(nom_nouveau_fichier + ".csv")
        nom_fichier = nouveau_theme.nom_fichier

        try:
            with open(fct.chemin_absolu(nom_fichier), 'w',
                      newline='') as csvfile:
                write = csv.writer(csvfile)
                write.writerow([
                    "questions", "bonneReponse", "reponseA", "reponseB",
                    "reponseC", "reponseD"
                ])

            with open(fct.chemin_absolu(self.__nom_fichier_bibliotheque),
                      'a',
                      newline='') as doss21:
                write = csv.writer(doss21)
                write.writerow([nom_fichier[11:]])
        except FileNotFoundError:
            logger.error(
                'classe/bibliotheque.py : creation_theme() : FileNotFoundError : '
                + nom_fichier)
            raise FileNotFoundError('Fichier introuvable')
        except IOError:
            logger.error(
                'classe/bibliotheque.py : creation_theme() : IOError : ' +
                nom_fichier)
            raise IOError('Erreur IO ')

        self.__liste_themes.append(nouveau_theme)
        self.__dictionnaire_themes[nouveau_theme.nom_theme] = ""
        logger.info('classe/bibliotheque.py : creation_theme() : ' +
                    nom_fichier)
コード例 #5
0
ファイル: menu.py プロジェクト: clementinesacre/ProjetProgra
def introduction():
    """
    Permet de lancer l'application en accueillant le joueur.

    PRE : L'objet Utilisateur utilisé via 'joueur' doit avoir été initialisé auparavant.
    POST : Si le joueur est déjà encodé dans la base, on affiche ses scores précédents. Si il n'est pas encore encodé,
    son pseudo est enregistré dans l'application.
    """
    dictionnaire = fct.recup_donnees_fichier_json(
        fct.chemin_absolu('ressources/scores.json'))
    if vb.joueur.nom not in dictionnaire:
        dictionnaire[vb.joueur.nom] = vb.joueur.init_resultats()
        try:
            with open(fct.chemin_absolu('ressources/scores.json'),
                      'w') as fichier:
                nouveau_dictionnaire = json.dumps(dictionnaire)
                fichier.write(nouveau_dictionnaire)

        except FileNotFoundError:
            logger.error(
                'options/menu.py : introduction() : FileNotFoundError : ressources/scores.json'
            )
            raise FileNotFoundError('Fichier introuvable.')
        except IOError:
            logger.error(
                'options/menu.py : introduction() : IOError : ressources/scores.json'
            )
            raise IOError('Erreur IO.')

        print("Bienvenue dans le jeu.")
    else:
        print("Vos scores précédents :\n")

        for theme_resultats in dictionnaire[vb.joueur.nom]:
            print(theme_resultats, " : ")
            for score in dictionnaire[vb.joueur.nom][theme_resultats]:
                print("    ", score[0], "% - ", score[1])

        fct.separation()
    return dictionnaire
コード例 #6
0
    def ajout_score(self, theme, point):
        """
        Permet d'ajouter un score à l'objet Utilisateur.

        PRE : 'theme' est un objet Theme. 'point' peut être un float ou un int.
        POST : Ecrit le score dans le fichier contenant l'historique des scores des différents joueurs.
        """
        dico_python = fct.recup_donnees_fichier_json(fct.chemin_absolu('ressources/scores.json'))
        dico_python[vb.joueur.nom][theme.nom_theme].append([round(point, 2), date.today().strftime('%d/%m/%Y')])
        try:
            with open(fct.chemin_absolu('ressources/scores.json'), 'w') as fichier:
                dico_json = json.dumps(dico_python)
                fichier.write(dico_json)

        except FileNotFoundError:
            logger.error('classe/utilisateur.py : ajout_score() : FileNotFoundError : ressources/scores.json')
            raise FileNotFoundError('Fichier introuvable.')
        except IOError:
            logger.error('classe/utilisateur.py : ajout_score() : IOError : ressources/scores.json')
            raise IOError('Erreur IO.')

        logger.info('classe/utilisateur.py : ajout_score() : ajout de points : ' + str(point) + ", theme : "
                    + theme.nom_theme + ", joueur : " + self.__nom)
コード例 #7
0
ファイル: theme.py プロジェクト: clementinesacre/ProjetProgra
    def suppression_question(self, question_a_supprimer):
        """
        Permet de supprimer une question.

        PRE : 'question_a_supprimer' est une string et doit être une clé existante du dictionnaire du thème.
        POST : Supprime 'question_a_supprimer' et ses réponses associées du fichier du thème associé, ainsi qu'en la
        supprimant du dictionnaire des questions du thème.
        """
        try:
            del self.__question_theme[question_a_supprimer]
        except KeyError:
            logger.error(
                'classe/theme.py : suppression_question() : KeyError : ' +
                question_a_supprimer)
            raise KeyError("Clé inconnue")

        try:
            with open(fct.chemin_absolu(self.__nom_fichier), "w",
                      newline='') as fichier:
                nouveau_fichier = csv.writer(fichier,
                                             quotechar=',',
                                             quoting=csv.QUOTE_MINIMAL)
                nouveau_fichier.writerow([
                    "questions", "bonneReponse", "reponseA", "reponseB",
                    "reponseC", "reponseD"
                ])
                for question in self.__question_theme:
                    reponses = self.__question_theme[question]
                    nouveau_fichier.writerow([
                        question,
                        list(filter(lambda x: x[1] is True,
                                    reponses))[0][0], reponses[0][0],
                        reponses[1][0], reponses[2][0], reponses[3][0]
                    ])
        except FileNotFoundError:
            logger.error(
                'classe/theme.py : suppression_question() : FileNotFoundError : '
                + self.__nom_fichier)
            raise FileNotFoundError('Fichier introuvable.')
        except IOError:
            logger.error(
                'classe/theme.py : suppression_question() : IOError : ' +
                self.__nom_fichier)
            raise IOError('Erreur IO.')

        logger.info(
            'classe/theme.py : suppression_question() : suppression de ' +
            question_a_supprimer + " dans " + self.__nom_fichier)
コード例 #8
0
ファイル: menu.py プロジェクト: clementinesacre/ProjetProgra
def initialisation_bibliotheque():
    """
    Initalise les informations de l'application, telles que les thèmes, les questions et les réponses.

    PRE : Nécessite l'existance de l'objet Bibliotheque, instancié à librairie.
    POST : Crée les thèmes, les questions, les réponses en tant qu'objet.
    """
    themes = vb.librairie.nom_fichier_bibliotheque
    for theme in themes:
        for nom in theme:
            vb.librairie.initialisation_theme(nom)

    for theme_fichier in vb.librairie.liste_themes:
        vb.initialisation_theme(theme_fichier.nom_theme)
        liste_questions = fct.recup_donnees_fichier(
            fct.chemin_absolu(vb.theme_courant.nom_fichier))
        for question in liste_questions:
            vb.theme_courant.initialisation_question(question)