Appartements⚓︎
D'après 2022, Métropole, septembre, J1, Ex. 2
Une petite société immobilière doit vendre des appartements d'une résidence. Les appartements ont tous une pièce de vie avec cuisine et deux chambres. Les logements se trouvant au rez-de-chaussée disposent d'un jardin. Les annonces sont stockées dans la liste logements
d'instances de la classe Appartement
décrite ci-dessous.
class Piece:
def __init__(self, nom, superficie):
self.nom = nom
self.superficie = superficie
def get_superficie(self):
return self.superficie
class Appartement:
def __init__(self, identifiant, piece_vie, chambre_1, chambre_2, avec_jardin, prix):
self.identifiant = identifiant
self.piece_vie = piece_vie # de type Piece
self.chambre_1 = chambre_1 # de type Piece
self.chambre_2 = chambre_2 # de type Piece
self.avec_jardin = avec_jardin # de type booléen
self.prix = prix # de type entier
def get_identifiant(self):
return self.identifiant
def superficie_totale(self):
return ...
def get_jardin(self):
return self.avec_jardin
def get_prix(self):
return self.prix
# Programme principal
logements = [
Appartement("A02", Piece("principale", 40), Piece("chambre_1", 10),
Piece("chambre_2", 20), True, 190000),
Appartement("A11", Piece("principale", 50), Piece("chambre_1", 15),
Piece("chambre_2", 15), False, 200000),
Appartement("A12", Piece("principale", 30), Piece("chambre_1", 15),
Piece("chambre_2", 20), False, 210000),
Appartement("B01", Piece("principale", 30), Piece("chambre_1", 10),
Piece("chambre_2", 20), True, 185000),
Appartement("B31", Piece("principale", 30), Piece("chambre_1", 10),
Piece("chambre_2", 20), False, 150000)
]
1.a. Combien d'éléments contient la liste logements
?
Réponse
La liste logements
contient 5 éléments qui sont les cinq appartements d'identifiants 'A02'
, 'A11'
, 'A12'
, 'B01'
et 'B31'
.
1.b. Que renvoie l'instruction logements[1].get_identifiant()
?
Réponse
L'instruction renvoie 'A11'
1.c. Recopier et compléter sur votre copie la méthode superficie_totale
def superficie_totale(self):
return ...
Réponse
def superficie_totale(self):
return (self.piece_vie.get_superficie()
+ self.chambre_1.get_superficie()
+ self.chambre_2.get_superficie())
Autre réponse possible :
def superficie_totale(self):
return sum(piece.get_superficie()
for piece in [self.piece_vie, self.chambre_1, self.chambre_2])
2. Pour satisfaire à la demande d'un client, l'agent immobilier désire disposer de la liste des appartements ayant un jardin et coutant moins de 195000 euros.
Vous devez créer la portion de programme qui crée la liste selection
composée des identifiants des appartements réalisant ces conditions.
Réponse
selection = [logement.get_identifiant() for logement in logements
if logement.get_jardin() and logement.get_prix() < 195000]
3. L'agent immobilier veut répondre à la question suivante d'un client : "Quel est votre appartement le plus spacieux ?"
Il souhaite disposer d'une fonction plus_spacieux
qui renvoie l'identifiant du logement ayant la superficie totale maximale.
Recopier et compléter sur votre copie la fonction plus_spacieux
def plus_spacieux(appartements):
...
Réponse
def plus_spacieux(appartements):
max_espace = 0
for appart in appartements:
if max_espace < appart.superficie_totale():
max_espace = appart.superficie_totale()
id_maxi = appart.identifiant
return id_maxi
Remarque
Pour accéder à des données stockées dans une base, il est désormais courant de passer par un ORM (Object-Relational Mapping) qui présente les données sous la forme d'objets. Le développeur manipule ainsi des classes, que l'ORM traduit en requêtes sur la base de données.