agreg/lecon.py

188 lines
11 KiB
Python
Raw Normal View History

2012-03-09 21:39:12 +00:00
#! /usr/bin/env python
import xml.dom.minidom as md
import os
import config
dico_nom_lecon = { '101' : "Groupe opérant sur un ensemble. Exemples et applications." , '103' : "Exemples et applications des notions de sous-groupe distingué et de groupes quotient." , '104' : "Groupes finis. Exemples et applications." , '105' : "Groupe des permutations d'un ensemble fini. Applications." , '106' : "Groupe linéaire d'un espace vectoriel de dimension finie E, sous-groupes de GL(E). Applications" , '107' : "Représentations et caractères des groupes finis sur un espace vectoriel complexe" , '108' : "Exemples de parties génératrices d'un groupe. Applications." , '109' : "Anneau Z/nZ. Applications." , '110' : "Nombres premiers. Applications." , '111' : "Anneaux principaux. Applications" , '112' : "Corps finis. Applications." , '113' : "Groupe des nombres complexes de module 1. Sous-groupes des racines de l'unité. Applications." , '114' : "Anneau des séries formelles. Applications" , '116' : "Polynômes irréductibles à une indéterminée. Corps de rupture. Exemples et applications." , '117' : "Algèbre des polynômes à plusieurs inderterminées; aspects théoriques et applications" , '119' : "Exemples d'actions de groupes sur les espaces de matrices" , '120' : "Dimension d'un espace vectoriel (on se limitera au cas de dimension finie). Rang. Exemples et applications." , '123' : "Déterminant. Exemples et applications." , '124' : "Polynôme d'endomorphismes en dimension finie. Applications à la réduction d'un endomorphisme en dimension finie." , '125' : "Sous-espaces stables d'un endomorphisme ou d'une famille d'endomorphisme d'un espace vectoriel de dimension finie. Applications." , '126' : "Endomorphismes diagonalisables en dimension finie" , '127' : "Exponentielle de matrices. Applications." , '128' : "Endomorphismes trigonalisables. Endomorphismes nilpotents." , '130' : "Matrices symétriques réelles, matrices hermitiennes." , '131' : "Formes quadratiques sur un espace vectoriel de dimension finie. Orthogonalité, isotropie. Applications" , '132' : "Formes linéaires et hyperplans en dimension finie. Exemples et applications." , '133' : "Endomorphismes remarquables d'un espace vectoriel euclidien de dimension finie." , '135' : "Isométries d'un espace affine euclidien de dim finie. Formes réduites. Applications en dim 2 et 3." , '136' : "Coniques. Applications." , '137' : "Barycentres dans un espace affine réel de dimension finie, convexité. Applications" , '139' : "Application des nombres complexes à la géométrie" , '140' : "Systèmes linéaires;opérations, aspects algorithmiques et conséquences théoriques" , '141' : "Utilisation des groupes en géométrie." , '144' : "Problèmes d'angles et de distances en dimension 2 ou 3." , '145' : "Méthodes combinatoires, problèmes de dénombrement." , '146' : "Résultant. Applications" , '148' : "Formes quadratiques réelles. Exemples et applications." , '149' : "Représentations des groupes finis de petit cardinal" , '201' : "Espaces de fonctions. Exemples et applications." , '202' : "Exemples de parties denses et applications." , '203' : "Utilisation de la notion de compacité." , '204' : "Connexité. Exemples et applications." , '205' : "Espaces complets. Exemples et applications." , '206' : "Théorèmes de point fixe. Exemples et applications." , '207' : "Prolongement de fonctions. Exemples et applications." , '208' : "Espaces vectoriels normés, applications linéaires continues . Exemples" , '213' : "Espaces de Hilbert, bases hilbertiennes. Exemples et applications." , '214' : "Théorème d'inversion locale, théorème des fonctions implicites. Exemples et applications." , '215' : "Applications différentiables définies sur un ouvert de Rn. Exemples et applications." , '216' : "Etude métrique des courbes. Exemples" , '217' : "Sous-variétés de Rn, exemples" , '218' : "Applications des formules de Taylor." , '219' : "Problèmes d'extremum." , '220' : "Equations différentielles X ' = f(t, X), exemples d'études qualitatives des solutions." , '221' : "Equations différentielles l
# --------------------------------------------------
#
# Classe leçon
#
# --------------------------------------------------
class Lecon():
""" Pour les lecons
"""
def __init__(self, ):
""" Initialisation de la leçon
"""
self.nom = None
self.book=[]
self.dev=[]
def from_file(self, file):
""" Importe les informations depuis un fichier
Arguments:
- `self`:
- `file`: fichier au format xml
"""
try:
self.document=md.parse(file)
except:
print("Le fichier ", file , " est inconnu")
else:
self.file = file
# Extraction du nom du developpement
self.num = self.document.getElementsByTagName('lecon')[0].getAttribute("num")
self.nom = self.document.getElementsByTagName('lecon')[0].getAttribute("nom")
# Extraction des devloppements
for dev in self.document.getElementsByTagName('dev'):
self.dev += [dev.getAttribute("nom")]
# des bouquins
for book in self.document.getElementsByTagName('book'):
self.book += [book.getAttribute("nom")]
# print("Dans cette lecon on peut faire les développement ", self.dev, " et on aura de besoin des bouquins ", self.book)
def from_scratch(self, num = '101'):
""" Créé la lecon depuis rien
Arguments:
- `self`:
- `num` : numero de la lecon
"""
self.num = str(num)
if self.num in dico_nom_lecon:
self.nom = dico_nom_lecon[self.num]
self.document=md.Document()
racine = self.document.createElement("lecon")
racine.setAttribute("num", self.num)
racine.setAttribute("nom", self.nom)
self.document.appendChild(racine)
else:
print("{num} est un numero de lecon inconnu".format(num = self.num))
# print(self.document.toprettyxml())
def add_book(self, book = ["nom", "auth", "isbn", "pg"] ):
""" Bouquin associé à la lecon
Arguments:
- `self`:
- `book`: sous la forme suivante ["nom", "auth", "isbn", "pg"]
"""
self.book += book
element = self.document.createElement("book")
element.setAttribute("nom", book[0])
element.setAttribute("auth", book[1])
element.setAttribute("isbn", book[2])
element.setAttribute("pg", book[3])
racine = self.document.getElementsByTagName('lecon')[0]
racine.appendChild(element)
# print(self.document.toprettyxml())
def add_dev(self, dev = None):
""" developpement associé à la lecon
Arguments:
- `self`:
- `dev`: le nom du developpement
"""
self.dev += [dev]
element = self.document.createElement("dev")
element.setAttribute("nom", str(dev))
racine = self.document.getElementsByTagName('lecon')[0]
racine.appendChild(element)
# print(self.document.toprettyxml())
def print_nom(self):
""" Affiche le nom et le numero de la lecon
Arguments:
- `self`:
"""
print("{num} : {nom} ".format(num = self.num , nom = self.nom))
def print_nbr_dev(self):
""" Affiche le nombre de développement lié à la lecon
Arguments:
- `self`:
"""
print("{nbr} --- {num} : {nom} ".format(num = self.num , nom = self.nom , nbr = len(self.dev)))
def print_dev(self):
""" Affiche les developpements qui lui sont associés
Arguments:
- `self`:
"""
print(" \n ---------- Développements de la lecon {num}: {nom} ---------- \n".format(num = self.num , nom = self.nom))
for d in self.dev:
print(d)
def sauve(self, destination = 0):
""" Sauve le developpement à l'endroit indiqué
Arguments:
- `self`:
- `destination`: on veut l'enregistrer
"""
if not destination:
nom_mod = self.nom.replace(" ", "_")
nom_mod = nom_mod.replace(".", "")
destination = "{num}-{nom}.agregLecon".format(num = self.num , nom = nom_mod)
fichier = open(destination, 'w')
fichier.write(self.document.toprettyxml())
fichier.close()
print("Le développement à été sauvé dans \"", destination, "\" voila son contenu")
print(self.document.toprettyxml())
if __name__ == '__main__':
lecon = Lecon()
# lecon.from_file("j'aime_les_maths_et_les_carottes_rappées.agregLecon")
lecon.from_scratch(103)
lecon.add_book(("pipo", "popi", "chipo", "pouet"))
lecon.add_book(("pipoi", "popii", "chipoi", "poueti"))
lecon.add_dev()
lecon.add_dev("Chouette")
lecon.sauve()