Une petite activité sur les définitions d'ensembles par compréhension et les filtres en Python qui donne un avant-goût des requêtes SQL en BD (Le fichier source ) :
Python
## E N S E M B L E S P A R C O M P R É H E N S I O N ## E T T A B L E A U X D E D O N N É E S # On vous demande de gérer le centre d'acceuil terrestre des aliens. # Vous disposez de 6 tableaux de données. # Vous devez fournir les expressions qui permettent de répondre aux # questions posées au bas de cette page. # Par exemple, pour avoir la liste des aliments : # In [50]: { m.aliment for m in baseMiam } # Out[50]: {'Bortsch', 'Kashpir', 'Schwanstucke', 'Zoumise'} # La liste des aliments mangés par les Aliens de Trantor : # lesAlimTrantor = { m.aliment # for m in baseMiam # for a in baseAlien # if m.nom_alien == a.nom # if a.planete == "Trantor" } # In [54]: lesAlimTrantor # Out[56]: {'Bortsch', 'Schwanstucke'} class Alien: def __init__(self, Nom, Sexe, Planete, NoCabine): "Constructeur d'Aliens" self.nom = Nom self.sexe = Sexe self.planete = Planete self.no_cabine = NoCabine class Cabine: def __init__(self,NoCabine, NoAllee): "Constructeur de Cabine" self.no_allee = NoAllee self.no_cabine = NoCabine class Miam: def __init__(self, NomAlien, Aliment): "Constructeur d'Aliments" self.nom_alien = NomAlien self.aliment = Aliment class Agent: def __init__(self, Nom, Ville): "Constructeur d'Agents" self.nom = Nom self.ville = Ville class Responsable: def __init__(self, NoAllee, Nom): "Constructeur de Responsables" self.no_allee = NoAllee self.nom = Nom class Gardien: def __init__(self, Nom, NoCabine): "Constructeur de Gardiens" self.nom = Nom self.no_cabine = NoCabine baseAlien = { Alien ( "Zorglub", "M", "Trantor", 1 ), Alien ( "Blorx", "M", "Euterpe", 2 ), Alien ( "Urxiz", "F", "Aurora", 3 ), Alien ( "ZBleurdite", "F", "Trantor", 4 ), Alien ( "Darneurane","M", "Trantor", 5 ), Alien ( "Mulzo", "M", "Helicon", 6 ), Alien ( "Zzzzz", "F", "Aurora", 7 ), Alien ( "Arggh", "M", "Nexon", 8 ), Alien ( "Joranum", "F", "Euterpe", 9 ) } baseCabine = { Cabine ( 1 , 1), Cabine ( 2 , 1), Cabine ( 3 , 1), Cabine ( 4 , 1), Cabine ( 5 , 1), Cabine ( 6 , 2), Cabine ( 7 , 2), Cabine ( 8 , 2), Cabine ( 9 , 2) } baseMiam = { Miam ( "Zorglub", "Bortsch"), Miam ( "Blorx", "Bortsch"), Miam ( "Urxiz", "Zoumise"), Miam ( "ZBleurdite", "Bortsch"), Miam ( "Darneurane", "Schwanstucke"), Miam ( "Mulzo", "Kashpir"), Miam ( "Zzzzz", "Kashpir"), Miam ( "Arggh", "Zoumise"), Miam ( "Joranum", "Bortsch") } baseAgent = { Agent ( "Branno", "Terminus"), Agent ( "Darell", "Terminus"), Agent ( "Demerzel", "Reze"), Agent ( "Seldon", "Terminus"), Agent ( "Dornick", "Kalgan"), Agent ( "Hardin", "Terminus"), Agent ( "Trevize", "Hesperos"), Agent ( "Pelorat", "Kalgan"), Agent ( "Riose", "Terminus") } baseResponsable = { Responsable ( 1, "Seldon"), Responsable ( 2, "Pelorat") } baseGardien = { Gardien ( "Branno", 1), Gardien ( "Darell", 2), Gardien ( "Demerzel", 3), Gardien ( "Seldon", 4), Gardien ( "Dornick", 5), Gardien ( "Hardin", 6), Gardien ( "Trevize", 7), Gardien ( "Pelorat", 8), Gardien ( "Riose", 9) } # Formez # -1 l'ensemble des gardiens ; # -2 l'ensemble des villes où habitent les agents ; # -3 l'ensemble des triplets (no de cabine,alien,gardien) pour chaque cabine ; # -4 l'ensemble des couples (alien,allée) pour chaque alien ; # -5 l'ensemble de tous les aliens de l'allée 2 ; # -6 l'ensemble de toutes les planètes dont sont originaires les aliens habitant une cellule de numéro pair ; # -7 l'ensemble des aliens dont les gardiens sont originaires de Terminus ; # -8 l'ensemble des gardiens des aliens féminins qui mangent du bortsch ; # -9 l'ensemble des cabines dont les gardiens sont originaires de Terminus ou dont les aliens sont des filles # Y a-t-il # -10 des aliments qui commencent par la même lettre que le nom du gardien qui surveille l'alien qui les mange ? # -11 des aliens originaires d'Euterpe ? # Est-ce que # -12 tous les aliens ont un 'x' dans leur nom ? # -13 tous les aliens qui ont un 'x' dans leur nom ont un gardien qui vient de Terminus ? # -14 il existe un alien masculin originaire de Trantor qui mange du Bortsch ou dont le gardien vient de Terminus
JOKER :
Python
# Formez # -1 l'ensemble des gardiens ; gardiens = { gardien.nom for gardien in baseGardien } # -2 l'ensemble des villes où habitent les agents ; villes = { agent.ville for agent in baseAgent } # -3 l'ensemble des triplets (no de cabine,alien,gardien) pour chaque cabine ; triples = { (alien.no_cabine, alien.nom, gardien.nom) for alien in baseAlien for gardien in baseGardien if gardien.no_cabine == alien.no_cabine} # -4 l'ensemble des couples (alien,allée) pour chaque alien ; # -5 l'ensemble de tous les aliens de l'allée 2 ; # -6 l'ensemble de toutes les planètes dont sont originaires les aliens habitant une cellule de numéro pair ; # -7 l'ensemble des aliens dont les gardiens sont originaires de Terminus ; # -8 l'ensemble des gardiens des aliens féminins qui mangent du bortsch ; # -9 l'ensemble des cabines dont les gardiens sont originaires de Terminus ou dont les aliens sont des filles # Y a-t-il # -10 des aliments qui commencent par la même lettre que le nom du gardien qui surveille l'alien qui les mange ? test10 = True in { miam.aliment[0] == gardien.nom[0] for miam in baseMiam for alien in baseAlien for gardien in baseGardien if gardien.no_cabine == alien.no_cabine and alien.nom == miam.nom_alien } # -11 des aliens originaires d'Euterpe ? # Est-ce que # -12 tous les aliens ont un 'x' dans leur nom ? # -13 tous les aliens qui ont un 'x' dans leur nom ont un gardien qui vient de Terminus ? test13 = False not in { agent.ville == 'Terminus' and 'x' in alien.nom for alien in baseAlien for gardien in baseGardien for agent in baseAgent if gardien.no_cabine == alien.no_cabine and gardien.nom == agent.nom } # -14 il existe un alien masculin originaire de Trantor qui mange du Bortsch ou dont le gardien vient de Terminus