"""une boucle donne acces a une liste et offre les fonctionnalites
supplementaires suivantes: position actuelle, suivant, precedent,
avancer de n ou de -n
de plus, si on depasse le dernier element, on revient au premier (et vice-versa)"""


class Boucle():
    def __init__(self, liste = []):
        self._tours = 0
        self._pos = 0
        self._liste = []

    def liste(self):
        return self._liste

    def majListe(self, liste):
        self._liste = liste

    def position(self):
        return self._pos

    def majPosition(self, pos):
        self._pos = pos
        while self._pos > len(self._liste):
            self._pos -= len(self._liste)
            self._tours += 1
            
        while self._pos < 0:
            self._pos += len(self._liste)
            self._tours -= 1
            
    def actuel(self):
        return self._liste[self._pos]

    def suivant(self):
        self.avancer(1)
        
    def precedent(self):
        self.avancer(-1)    
        
    def avancer(self, n):
        self.majPosition((self._pos + n))

    def nbTours(self):
        return self._tours

    def premier(self):
        return self._liste[0]

    def dernier(self):
        return self._liste[len(self._liste)-1]    



