Initiation à la programmation ENSAE 1A

td_note_2009_rattrape.tex

File: td_note_2009_rattrape.tex, line 37


N10   P10   gris     corde
N15   P15   rouge    chandelier
N8    P8    marron   fer à cheval

File: td_note_2009_rattrape.tex, line 54


N3    P3    cuisine
N19   P19   bureau
N20   P20   salle à manger

File: td_note_2009_rattrape.tex, line 65


def convertit_fichier_en_matrice (fichier) :
...

File: td_note_2009_rattrape.tex, line 77


def convertit_matrice_en_dictionnaire (matrice) :
...

File: td_note_2009_rattrape.tex, line 89


def fusion_dictionnaire (dico1, dico2) :

File: td_note_2009_rattrape.tex, line 98


def convertit_dictionnaire_en_matrice (dico) :

File: td_note_2009_rattrape.tex, line 106


def convertit_matrice_en_fichier (mat, fichier) :

File: td_note_2009_rattrape.tex, line 114


def fusion_fichier (fichier1, fichier2, fichier_resultat) :

File: td_note_2009_rattrape.tex, line 122


def union_moins_intersection_fichier (fichier1, fichier2, fichier_resultat) :

, correction 2009

# coding: latin-1
# Question 1

def convertit_fichier_en_matrice (file):
    f = open (file, "r") 
    l = f.readlines ()   
    f.close ()           

    mat = list()
    for s in l :
        l = s.strip ("\n\r").split ("\t")
        mat.append (l)
    return mat

# Question 2

def convertit_matrice_en_dictionnaire (matrice) :
    d={}
    for line in matrice :
        d[line[0],line[1]] = line [2:]
    return d

# Question 3

def fusion_dictionnaire (dico1, dico2) :
    dico={}
    for k in dico1 :
        if k in dico2 : dico[k] = dico1[k] + dico2[k]
    return dico

# Question 4

def convertit_dictionnaire_en_matrice (dico) :
    m =[]
    for k,v in dico.iteritems () :
        line = list (k) + v
        m.append (line)
    return m
            
# Question 5

def convertit_matrice_en_fichier (mat,nomfichier):
    f = open (nomfichier, "w")
    for line in mat :
        f.write ( "\t".join ( [ str (x) for x in line ] ) + "\n")
    f.close ()

# Question 6

def fusion_fichier (fichier1, fichier2, fichier_resultat) :
    matrice1    = convertit_fichier_en_matrice(fichier1)
    matrice2    = convertit_fichier_en_matrice(fichier2)
    dico1       = convertit_matrice_en_dictionnaire(matrice1)
    dico2       = convertit_matrice_en_dictionnaire(matrice2)
    dico        = fusion_dictionnaire (dico1,dico2)
    matrice     = convertit_dictionnaire_en_matrice(dico)
    convertit_matrice_en_fichier (matrice,fichier_resultat)

fusion_fichier (    "td_note_2009_cluedo_1.txt", 
                    "td_note_2009_cluedo_2.txt", 
                    "cluedo.txt")

# Question 7

def fusion_dictionnairebis (dico1,dico2) :
    l1=dico1.keys()
    l2=dico2.keys()
    dico={}
    for k in l1 :
        if k not in l2 : dico[k]=[]
    for k in l2 :
        if k not in l1 : dico[k]=[]
    return dico

def union_moins_intersection_fichier (fichier1, fichier2, fichier_resultat):
    matrice1    = convertit_fichier_en_matrice(fichier1)
    matrice2    = convertit_fichier_en_matrice(fichier2)
    dico1       = convertit_matrice_en_dictionnaire(matrice1)
    dico2       = convertit_matrice_en_dictionnaire(matrice2)
    
    dico        = fusion_dictionnairebis (dico1,dico2)
    
    matrice     = convertit_dictionnaire_en_matrice(dico)
    convertit_matrice_en_fichier (matrice,fichier_resultat)

union_moins_intersection_fichier (  "td_note_2009_cluedo_1.txt", 
                                    "td_note_2009_cluedo_2.txt", 
                                    "cluedo2.txt")

# Question 8
"""
Il suffit de fusionner les fichiers deux par deux 
en procédant par récurrence. On fusionne d'abord les
deux premiers, puis on fusionne le troisième 
au résultat de la première fusion...
"""