class Automat(object):
    def __init__(self):
        # Automatenbeschreibung
        self.zustaende = None
        self.eingaben = None
        self.ausgaben = None
        self.automatentafel = None
        self.anfangszustand = None
        # aktueller Zustand
        self.aktuellerZustand = None

    def setZustaende(self, pZustaende):
        self.zustaende = pZustaende

    def setEingaben(self, pEingaben):
        self.eingaben = pEingaben

    def setAusgaben(self, pAusgaben):
        self.ausgaben = pAusgaben

    def setAutomatentafel(self, pAutomatentafel):
        self.automatentafel = pAutomatentafel

    def setAnfangszustand(self, pAnfangszustand):
        self.anfangszustand = pAnfangszustand

    def getZustand(self):
        return self.aktuellerZustand
        
    def initialisieren(self):
        self.aktuellerZustand = self.anfangszustand

    def verarbeiten(self, eingabe):

        """
        >>> a = Automat()
        >>> a.setZustaende(['ausgeschaltet','eingeschaltet'])
        >>> a.setEingaben(['ausschalten', 'einschalten'])
        >>> a.setAusgaben(['aus', 'an'])
        >>> a.setAutomatentafel([[('aus', 'ausgeschaltet'), ('an', 'eingeschaltet')], [('aus', 'ausgeschaltet'), ('an', 'eingeschaltet')]])
        >>> a.setAnfangszustand('ausgeschaltet')
        >>> a.initialisieren()
        >>> a.getZustand()
        'ausgeschaltet'
        >>> a.verarbeiten('einschalten')
        'an'
        >>> a.getZustand()
        'eingeschaltet'
        >>> a.verarbeiten('einschalten')
        'an'
        >>> a.getZustand()
        'eingeschaltet'
        """

        if self.aktuellerZustand in self.zustaende and eingabe in self.eingaben:
            indexZustand = list(self.zustaende).index(self.aktuellerZustand)
            indexEingabe = list(self.eingaben).index(eingabe)
            (ausgabe, neuerZustand) = self.automatentafel[indexZustand][indexEingabe]
            if ausgabe in self.ausgaben and neuerZustand in self.zustaende:
                self.aktuellerZustand = neuerZustand
            else:
                ausgabe = 'keine Verarbeitung möglich'
        else:
            ausgabe = 'keine Verarbeitung möglich'
        return ausgabe

if __name__=='__main__':
    import doctest
    doctest.testmod(verbose=True)
