import pickle class Etageres(object): def __init__(self): self.etageres = [] self.nbetagere = 0 self.couleur = ["rouge","blanc","rose"] @classmethod def load_etageres(cls,file): with open(file, 'rb') as data: return pickle.load(data) def add_etagere(self, largeur, hauteur): self.nbetagere += 1 self.etageres.append(Etagere(largeur, hauteur, self)) def nbbouteille(self): i = 0 for etagere in self.etageres: for bouteille in etagere: i += 1 return i def nbbouteillecouleur(self, couleur): i = 0 for etagere in self.etageres: for bouteille in etagere: if bouteille.couleur == couleur: i += 1 return i def remove_etagere(self, etagere): self.etageres.remove(etagere) self.nbetagere -= 1 return "etagere {} suprimer".format(etagere.num_etagere) def save_etageres(self,file): with open(file, 'wb') as output: pickle.dump(self,output) def __iter__(self): return iter(self.etageres) class Etagere(object): def __init__(self, largeur, hauteur, etageres): self.num_etagere = etageres.nbetagere self.largeur = largeur self.hauteur = hauteur self.etageres = etageres self.bouteilles = [] def add_bouteille(self, pos_largeur, pos_hauteur, couleur, appelation, millesime): for bouteille in self.bouteilles: if (pos_hauteur > self.hauteur or pos_largeur > self.largeur or pos_largeur < 1 or pos_largeur < 1): return "bouteille positioné en dehors des emplacement" if (pos_largeur == bouteille.pos_largeur and pos_hauteur == bouteille.pos_hauteur): return "une bouteille existe déja a cette emplacement" self.bouteilles.append(Bouteille(pos_largeur, pos_hauteur, couleur, appelation, millesime, self)) return "OK" def remove_bouteille(self, pos_largeur, pos_hauteur): i = 0 for bouteille in self.bouteilles: if (pos_largeur == bouteille.pos_largeur and pos_hauteur == bouteille.pos_hauteur): self.bouteilles.remove(bouteille) return "bouteille suprimé" else: i += 1 return "aucune bouteille troucé a cette emplacement" def __repr__(self): return "etagére numéros {} de largeur {} et de hauteur {} et contient {} bouteille(s) ".format(self.num_etagere, self.largeur, self.hauteur, len(self.bouteilles)) def __iter__(self): return iter(self.bouteilles) class Bouteille(object): def __init__(self, pos_largeur, pos_hauteur, couleur, appelation, millesime, etagere): self.pos_largeur = pos_largeur self.pos_hauteur = pos_hauteur if (couleur not in etagere.etageres.couleur): etagere.etageres.couleur.append(couleur) self.couleur = couleur self.millesime = millesime self.appelation = appelation self.etagere = etagere def __repr__(self): return "bouteille: pos_largeur {} , pos_hauteur {}, couleur {} , appelation {}, millesime {} \n".format(self.pos_largeur, self.pos_hauteur, self.couleur, self.appelation, self.millesime) new = Etageres() new.add_etagere(30, 3) print(new.etageres[0].add_bouteille(28, 2, "rouge", "saint emilion", 2005)) print(new.etageres[0].add_bouteille(24, 1, "pisse", "gewurtz", 2010)) print(new.etageres[0].add_bouteille(23, 2, "rouge", "saint emilion", 2006)) print(new.etageres[0].bouteilles) print("vos etagére contiennes {} bouteille".format(new.nbbouteille())) print("vos etagére contiennes {} bouteille de rouge".format( new.nbbouteillecouleur("rouge"))) new.save_etageres("test.pkl") print(new.couleur) print(new.remove_etagere(new.etageres[0])) del new