User Tools

Site Tools


burim:python:python-labs:loesung_blatt10_aufgabe1_fifo_klasse_kommentiert.py
class MyFifo(): # Definition der Klasse 'MyFifo'
    """
    Demo für eine FIFO Struktur, nicht zur produktiven Anwendung konzipiert!
    """
    def __init__(self, content=[]): # Kontruktor enthaelt neben dem Schluessel-
                                    # wort 'self', welcher auf das Objekt
                                    # selbst verweist, den Inhalt (per Default
                                    # als leere Liste)
        if isinstance(content, (tuple, list, str)): # verweist das Eingabe-
                                                    # argument 'content' auf
                                                    # etwas vom Typ Tuple,
                                                    # Liste oder String
            self.content = [i for i in content] # dann wird dieses Elementweise
                                                # in das Klassenattribut 
                                                # 'content' einsortiert. 
                                                # Die List-Comprehension
                                                # liefert eine Liste. 
        else: # ansonsten
            self.content = [] # verweist das Klassenattribut 'content' auf eine 
                              # leere Liste. 

    def __repr__(self): # Ueberschreiben der __repr__()-Funktion zum 
        return str(self.content) # Spezifizieren einer selbstgewaehlten 
                                 # Darstellung. 

    def __add__(self, fifo): # Spezifizieren der Verknuefung zweier Objekte vom 
                             # Typ 'MyFifo'. 
        return MyFifo(self.content[:] + fifo.content[:]) # Nutzung der bereits
                                                         # definierten Ver-
                                                         # knuepfung von
                                                         # Listen, Tuple und
                                                         # Strings. 

    def put_in(self, item): # Klassenmethode fuer das Hinzufuegen von 
                            # Elementen. Fuegt das mit 'item' uebergebene 
                            # Element hinzu
        self.content.append(item) # und nutzt hierfuer die append()-Funktion. 

    def take_out(self): # Klassenmethode zum Entfernen des ersten Elementes.
        if len(self.content) > 0: # wenn die Liste nicht bereits leer ist
            return self.content.pop(0) # entferne das erste Element mit pop(0)

    def interactive(self): # Klassenmethode zum Starten des interaktiven Modus
        while True: # Endlosschleife
            k = input("> ") # Eingabe des Nutzers
            if k == "": # wenn es sich bei der Eingabe um eine leere
                        # Zeichenfolge handelt (also Enter)
                break # wird die Schleife mit 'break' abgebrochen. 
            if k != "?": # wenn es sich bei der Eingabe um kein '?' handelte
                self.put_in(k) # wird die Klassenmethode put_in(k) aufgerufen
                print(self.__repr__()) # Aufruf der Darstellung von MyFifo
            else: # ansonsten
                out = self.take_out() # wird das erste Element entfernt
                if out: # wenn ein Element entfernt wurde
                    print(out) # wird dieses ausgegeben
                else: # ansonsten
                    print('The Queue is empty.') # ist die Queue leer


def main(): # Hauptmethode main() zum Testen
    print('Selftest for Class MyFifo:')
    f0 = MyFifo(1)
    print(f0)
    # f1 = MyFifo((1, 2, 3))
    # f1 = MyFifo('123')
    f1 = MyFifo([1, 2, 3])
    f2 = MyFifo((3, 4, 5))
    print(f1, f2)
    f3 = f1 + f2
    print(f3)
    print(f3.take_out())
    print(f1, f2, f3)
    f3.interactive()

if __name__ == '__main__':
    main() # Aufruf der Hauptmethode main()
burim/python/python-labs/loesung_blatt10_aufgabe1_fifo_klasse_kommentiert.py.txt · Last modified: 2019/01/21 20:55 by 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki