1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
| # Déclaration des fonctions
def projeter(table:list[dict], attributs_voulus:list[str]) -> list[dict]:
"""Projette les attributs voulus dans la table fournie"""
projection = [] # Création d'un tableau dynamique
for nuplet in table: # pour chaque n-uplet de la table
copie_nuplet = {} # nouveau n-uplet nommé qui va stocker la réponse partielle
for cle, valeur in nuplet.items(): # pour chaque clé et valeur associée dans le n-uplet de la table
if cle in attributs_voulus: # si le nom de la clé apparait dans le tableau des attribus voulus
copie_nuplet[cle] = valeur # on rajoute cette association clé-valeur dans la projection
projection.append(copie_nuplet) # on rajoute le nouveau n-uplet dans la projection
return projection # on renvoie le tableau contenant les copies tronquées des n-uplets
def uniquement_plateformes(table:list[dict]) -> list[dict]:
"""Filtre les n-uplets de la table en ne renvoyant que ceux dont le genre est bien plateformes"""
reponse = [] # Création d'un tableau dynamique
for nuplet in table: # pour chaque n-uplet de la table
if nuplet['j_genre'] == 'Plate-formes': # si le genre de ce n-uplet est un jeu de plate-formes
copie_nuplet = {} # va permettre de copier les dictionnaires (qui sont fortement muables)
for cle, valeur in nuplet.items(): # pour chaque cle-valeur associée dans le n-uplet à garder
copie_nuplet[cle] = valeur # on copie la même chose dans le dictionnaire de copie
reponse.append(copie_nuplet) # on rajoute la copie dans notre tableau de réponse
return reponse # on renvoie le tableau contenant les copies des n-uplets voulus
# PROGRAMME DE TEST
if __name__ == '__main__':
jeu = [
{'j_id':7, 'j_jeu':'Flight Simulator',
'j_description':"Simulation d'avion", 'j_sortie':1980,
'j_éditeur':'subLOGIC', 'j_genre':'Simulateur', 'j_id_support':1},
{'j_id':8, 'j_jeu':'DONKEY KONG',
'j_description':"Un méchant singe géant", 'j_sortie':1981,
'j_éditeur':'Nintendo', 'j_genre':'Plate-formes', 'j_id_support':None},
{'j_id':9, 'j_jeu':'PIFALL!',
'j_description':"Pitfall Harry, un explorateur", 'j_sortie':1982,
'j_éditeur':'Activision', 'j_genre':'Plate-formes', 'j_id_support':2},
{'j_id':10, 'j_jeu':'PIFALL!',
'j_description':"Pitfall Harry, un explorateur", 'j_sortie':1983,
'j_éditeur':'Nintendo', 'j_genre':'Plate-formes', 'j_id_support':3},
{'j_id':11, 'j_jeu':'Boulder Dash',
'j_description':"Rockford, mineur téméraire", 'j_sortie':1983,
'j_éditeur':'First Star Software', 'j_genre':'Plate-formes', 'j_id_support':3}
]
console = [
{'c_id':1, 'c_nom':'Apple II', 'c_RAM':'4 ko', 'c_date_sortie':'1977-06-10'},
{'c_id':2, 'c_nom':'Atari 2600', 'c_RAM':'4 ko', 'c_date_sortie':'1977-10-14'},
{'c_id':3, 'c_nom':'C64', 'RAM':'c_64 ko', 'c_date_sortie':'1982-08-01'}
]
print("Exemple de projection")
nouvelle_table = projeter(jeu, ['j_jeu', 'j_description'])
for nuplet in nouvelle_table: # pour chaque n-uplet de la jointure
print(nuplet) # affiche ce n-uplet
print("\n\nExemple de filtrage")
nouvelle_table = uniquement_plateformes(jeu)
for nuplet in nouvelle_table: # pour chaque n-uplet de la jointure
print(nuplet) # affiche ce n-uplet
|