class Stapel(object):

    # Es können Daten beliebigen Typs auf den Stapel gelegt werden.
    # Alle Stapelelemente werden in einer Liste verwaltet.
    # Dabei werden die Elemente folgendermaßen angeordnet:
    # [... <- unten ... oben -> ...}
    
    def __init__(self, pListe = []):
        """ 
        >>> s = Stapel()
        >>> s.liste
        []
        >>> s = Stapel(['a', 'b', 'c'])
        >>> s.liste
        ['a', 'b', 'c']
        """
        self.liste = pListe

    def isEmpty(self):
        """
        >>> s = Stapel()
        >>> s.isEmpty()
        True
        >>> s = Stapel(['a', 'b', 'c'])
        >>> s.isEmpty()
        False
        """
        if self.liste == []:
            return True
        else:
            return False

    def push(self, element):
        """
        >>> s = Stapel(['a', 'b'])
        >>> s.push('c')
        >>> s.liste
        ['a', 'b', 'c']
        """
        self.liste = self.liste + [element]

    def pop(self):
        """
        >>> s = Stapel()
        >>> s.pop()
        >>> s.liste
        []
        >>> s = Stapel(['a', 'b', 'c'])
        >>> s.pop()
        'c'
        >>> s.liste
        ['a', 'b']
        """
        if not self.isEmpty():
            oberstesElement = self.liste[len(self.liste)-1]
            self.liste = self.liste[:len(self.liste)-1]
            return oberstesElement
        else:
            return None

    def top(self):
        """
        >>> s = Stapel(['a', 'b', 'c'])
        >>> s.top()
        'c'
        >>> s = Stapel()
        >>> s.top()
        """
        if not self.isEmpty():
            return self.liste[len(self.liste)-1]      

    def setStapel(self, pListe):
        """
        >>> s = Stapel()
        >>> s.setStapel(['a', 'b', 'c'])
        >>> s.liste
        ['a', 'b', 'c']
        """
        self.liste = pListe

    def getStapel(self):
        """
        >>> s = Stapel()
        >>> s.setStapel(['a', 'b', 'c'])
        >>> s.getStapel()
        ['a', 'b', 'c']
        """
        return self.liste

                
if __name__=='__main__':
    import doctest
    doctest.testmod(verbose=False)
