| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- """fonctions generiques DMonde"""
- def mini(e1, e2):
- """renvoie le plus petit entier"""
- if e1 <= e2:
- retour = e1
- else:
- retour = e2
- return retour
- def maxi(e1, e2):
- """renvoie le plus petit entier"""
- if e1 >= e2:
- retour = e1
- else:
- retour = e2
- return retour
- def contractTxt(txt, nb = 0):
- """retourne un texte de longueur limitee,
- de la forme 'abcd...xyz'
- nb doit etre superieur ou egal a 1"""
- if not nb > 0: return txt
- if not nb >= 4: return txt[:nb]
- if not nb >= 10: return "{}...".format(txt[:(nb-3)])
- if len(txt) <= nb: return txt
- t1 = txt[:(nb-6)]
- t2 = txt[-3:]
- return "{}...{}".format(t1, t2)
- def inverser(lst):
- """retourne la liste inversee"""
- return list(reversed(lst))
- class DmPile(object):
- """pile d'objets ayant des hauteurs differentes
- le dernier objet ajoute est dessus (premier)"""
- def __init__(self):
- self._pile = []
- def __getitem__(self, zCible):
- """renvoie l'objet a l'altitude z"""
- if not zCible >= 0: return None
- z = 0
- for cpl in inverser(self._pile):
- z += cpl[1]
- if z > zCible: return cpl[0]
- return None
-
- def __repr__(self, *args, **kwargs):
- return str(self._pile)
-
- def pile(self):
- """retourne la pile d'objets (sans les hauteurs)"""
- return [cpl[0] for cpl in self._pile]
- def elip(self):
- """retourne la pile (sans les hauteurs) a l'envers (en partant du dessous)"""
- return inverser([cpl[0] for cpl in self._pile])
- def __iter__(self):
- return self.pile().__iter__()
-
- def ajouter(self, objet, h = 1):
- """ajoute un objet de hauteur h sur la pile"""
- self._pile.insert(0, (objet,h))
- def vide(self):
- return (len(self._pile) == 0)
- def premier(self):
- if self.vide(): return None
- return self.pile()[0]
- def retirer(self, objet):
- """retire l'objet de la pile"""
- if not objet in self.pile():
- print "Impossible trouver l'objet dans la pile, impossible de l'en retirer"
- return
- index = self.pile().index(objet)
- cpl = self._pile[index]
- self._pile.remove(cpl)
-
- def hauteur(self):
- """retourne la hauteur totale de la pile"""
- retour = 0
- for h in [cpl[1] for cpl in self._pile]:
- retour += h
- return retour
-
- def hDe(self, obj):
- """renvoie la hauteur de l'objet demande, None sinon"""
- d = {obj:h for obj, h in self._pile}
- if not obj in d: return None
- return d[obj]
- def zR(self, obj):
- """renvoie l'altitude relative de l'objet demande, None sinon"""
- z = 0
- for o, h in inverser(self._pile):
- if o == obj: return z
- z += h
- return None
-
-
-
- # pile = DmPile()
- # pile.ajouter("a",10)
- # pile.ajouter("b",3)
- # pile.ajouter("c",3)
- # print pile.zR("b")
|