
# Bitte fügen Sie hier Ihren Namen ein:

# Bitte schreiben Sie Ihre Lösung unter die betreffende Aufgabenstellung.
# Sie dürfen die Aufgaben zu zweit bearbeiten. Bitte tragen Sie dann beide Namen oben ein.
# Lösen Sie mindestens *eine* der folgenden Aufgaben vollständig. Bitte benennen Sie Ihre Hauptfunktion wie in den Beispielaufrufen angegeben:

import re

# 1) Schreiben Sie eine Funktion, die einen String darauf überprüft, ob er ein Palindrom ist.

# Beispielaufrufe:
# >>> test_palindrom('otto')
# True
# >>> test_palindrom('mia')
# False

def test_palindrom(string):
    string_as_list = list(string)
    reverse = list()
    while len(string_as_list) > len(string)/2:
        reverse.append(string_as_list.pop())
	# bei ungerader Zeichenanzahl wird das mittlere Zeichen ignoriert
    if len(reverse) > len(string_as_list):
        reverse.pop()
	# string ist ein Palindrom, wenn die erste Hälfte und die umgekehrte zweite Hälfte der Zeichenkette identisch sind
    if string_as_list == reverse:
        return True
    else:
        return False

# 2) Schreiben Sei eine Funktion, die zwei Strings daraufhin überprüft, ob der
# eine ein Anagram des anderen ist.

# Beispielaufrufe:
# >>> test_anagram('otto','toto')
# True
# >>> test_anagram('mia','main')
# False

def test_anagram(string1, string2):
    string_as_list1 = list(string1)
    string_as_list2 = list(string2)
    string_as_list1.sort()
    string_as_list2.sort()
	# wenn die beiden Strings sortiert werden und Anagramme sind, enthalten sie genau die gleichen Elemente in genau der gleichen Reihenfolge - wenn sie keine Anagramme sind, unterscheiden sich die sortierten Listen
    if string_as_list1 == string_as_list2:
        return True
    else:
        return False
    
    

# 3) Schreiben Sie eine Funktion, die für einen übergebenen String die enthaltenen Ziffern (0-9) zählt und die Anzahl der Ziffern zurückgibt.

# Beispielaufrufe:
# >>> count_nums("Alice hatte bereits 2 Stunden und 30 Minuten gewartet.")
# 3
# >>> count_nums("Alice war schon fast eingeschlafen.")
# 0

def count_nums(string):
    regex = re.compile("[0-9]")
	# Um die Anzahl der Ziffern im String zu ermitteln, genügt es, die Anzahl der Matches des regulären Ausdrucks [0-9] zu bestimmen
    return len(regex.findall(string))

# 4)  Schreiben Sie ein Programm, dass aus der übergebenen token_list
# die ersten n Tokens ausgibt, die auf "en" enden.


# Beispielaufruf:
# >>> liste = ['Der', 'Tisch', 'stand', 'zwischen', 'den', 'Wänden']
# >>> get_entokens(liste, 1)
# ['zwischen']
# >>> get_entokens(liste, 2)
# ['zwischen', 'den']


token_list = ['Erstes','Kapitel','Hinunter','in','den','Kaninchenbau','Alice','fing','an','sich','zu','langweilen','sie','saß','schon','lange','bei','ihrer','Schwester','am','Ufer','und','hatte','nichts','zu','thun','Das','Buch','das','ihre','Schwester','las','gefiel','ihr','nicht','denn','es','waren','weder','Bilder','noch','Gespräche','darin','Und','was','nützen','Bücher','dachte','Alice','ohne','Bilder','und','Gespräche','','Sie','überlegte','sich','eben','so','gut','es','ging','denn','sie','war','schläfrig','und','dumm','von','der','Hitze','ob','es','der','Mühe','werth','sei','aufzustehen','und','Gänseblümchen','zu','pflücken','um','eine','Kette','damit','zu','machen','als','plötzlich','ein','weißes','Kaninchen','mit','rothen','Augen','dicht','an','ihr','vorbeirannte','','Dies','war','grade','nicht','sehr','merkwürdig','Alice','fand','es','auch','nicht','sehr','außerordentlich','daß','sie','das','Kaninchen','sagen','hörte','O','weh','o','weh','Ich','werde','zu','spät','kommen','Als','sie','es','später','wieder','überlegte','fiel','ihr','ein','daß','sie','sich','darüber','hätte','wundern','sollen','doch','zur','Zeit','kam','es','ihr','Alles','ganz','natürlich','vor','Aber','als','das','Kaninchen','seine','Uhr','aus','der','Westentasche','zog','nach','der','Zeit','sah','und','eilig','fortlief','sprang','Alice','auf','denn','es','war','ihr','doch','noch','nie','vorgekommen','ein','Kaninchen','mit','einer','Westentasche','und','eine','Uhr','darin','zu','sehen','Vor','Neugierde','brennend','rannte','sie','ihm','nach','über','den','Grasplatz','und','kam','noch','zur','rechten','Zeit','um','es','in','ein','großes','Loch','unter','der','Hecke','schlüpfen','zu','sehen','','Den','nächsten','Augenblick','war','sie','ihm','nach','in','das','Loch','hineingesprungen','ohne','zu','bedenken','wie','in','aller','Welt','sie','wieder','herauskommen','könnte','','Der','Eingang','zum','Kaninchenbau','lief','erst','geradeaus','wie','ein','Tunnel','und','ging','dann','plötzlich','abwärts','ehe','Alice','noch','den','Gedanken','fassen','konnte','sich','schnell','festzuhalten','fühlte','sie','schon','daß','sie','fiel','wie','es','schien','in','einen','tiefen','tiefen','Brunnen','','Entweder','mußte','der','Brunnen','sehr','tief','sein','oder','sie','fiel','sehr','langsam','denn','sie','hatte','Zeit','genug','sich','beim','Fallen','umzusehen','und','sich','zu','wundern','was','nun','wohl','geschehen','würde','Zuerst','versuchte','sie','hinunter','zu','sehen','um','zu','wissen','wohin','sie','käme','aber','es','war','zu','dunkel','etwas','zu','erkennen','Da','besah','sie','die','Wände','des','Brunnens','und','bemerkte','daß','sie','mit','Küchenschränken','und','Bücherbrettern','bedeckt','waren','hier','und','da','erblickte','sie','Landkarten','und','Bilder','an','Haken','aufgehängt','Sie','nahm','im','Vorbeifallen','von','einem','der','Bretter','ein','Töpfchen','mit','der','Aufschrift','Eingemachte','Apfelsinen','aber','zu','ihrem','großen','Verdruß','war','es','leer','Sie','wollte','es','nicht','fallen','lassen','aus','Furcht','Jemand','unter','sich','zu','tödten','und','es','gelang','ihr','es','in','einen','andern','Schrank','an','dem','sie','vorbeikam','zu','schieben','','Nun','dachte','Alice','bei','sich','nach','einem','solchen','Fall','werde','ich','mir','nichts','daraus','machen','wenn','ich','die','Treppe','hinunter','stolpere','Wie','muthig','sie','mich','zu','Haus','finden','werden','Ich','würde','nicht','viel','Redens','machen','wenn','ich','selbst','von','der','Dachspitze','hinunter','fiele','Was','sehr','wahrscheinlich','war','','Hinunter','hinunter','hinunter','Wollte','denn','der','Fall','nie','endigen','Wie','viele','Meilen','ich','wohl','jetzt','gefallen','bin','sagte','sie','laut','Ich','muß','ungefähr','am','Mittelpunkt','der','Erde','sein','Laß','sehen','das','wären','achthundert','und','funfzig','Meilen','glaube','ich','','denn','ihr','müßt','wissen','Alice','hatte','dergleichen','in','der','Schule','gelernt','und','obgleich','dies','keine','sehr','gute','Gelegenheit','war','ihre','Kenntnisse','zu','zeigen','da','Niemand','zum','Zuhören','da','war','so','übte','sie','es','sich','doch','dabei','ein','','ja','das','ist','ungefähr','die','Entfernung','aber','zu','welchem','Länge','und','Breitegrade','ich','wohl','gekommen','sein','mag','Alice','hatte','nicht','den','geringsten','Begriff','was','weder','Längegrad','noch','Breitegrad','war','doch','klangen','ihr','die','Worte','großartig','und','nett','zu','sagen','','Bald','fing','sie','wieder','an','Ob','ich','wohl','ganz','durch','die','Erde','fallen','werde','Wie','komisch','das','sein','wird','bei','den','Leuten','heraus','zu','kommen','die','auf','dem','Kopfe','gehen','die','Antipathien','glaube','ich','Diesmal','war','es','ihr','ganz','lieb','daß','Niemand','zuhörte','denn','das','Wort','klang','ihr','gar','nicht','recht','Aber','natürlich','werde','ich','sie','fragen','müssen','wie','das','Land','heißt','Bitte','liebe','Dame','ist','dies','NeuSeeland','oder','Australien','Und','sie','versuchte','dabei','zu','knixen','','denkt','doch','knixen','wenn','man','durch','die','Luft','fällt','Könntet','ihr','das','fertig','kriegen','Aber','sie','werden','mich','für','ein','unwissendes','kleines','Mädchen','halten','wenn','ich','frage','Nein','es','geht','nicht','an','zu','fragen','vielleicht','sehe','ich','es','irgendwo','angeschrieben','','Hinunter','hinunter','hinunter','Sie','konnte','nichts','weiter','thun','also','fing','Alice','bald','wieder','zu','sprechen','an','Dinah','wird','mich','gewiß','heut','Abend','recht','suchen','Dinah','war','die','Katze','Ich','hoffe','sie','werden','ihren','Napf','Milch','zur','Theestunde','nicht','vergessen','Dinah','Mies','ich','wollte','du','wärest','hier','unten','bei','mir','Mir','ist','nur','bange','es','giebt','keine','Mäuse','in','der','Luft','aber','du','könntest','einen','Spatzen','fangen','die','wird','es','hier','in','der','Luft','wohl','geben','glaubst','du','nicht','Und','Katzen','fressen','doch','Spatzen','Hier','wurde','Alice','etwas','schläfrig','und','redete','halb','im','Traum','fort','Fressen','Katzen','gern','Spatzen','Fressen','Katzen','gern','Spatzen','Fressen','Spatzen','gern','Katzen','Und','da','ihr','Niemand','zu','antworten','brauchte','so','kam','es','gar','nicht','darauf','an','wie','sie','die','Frage','stellte','Sie','fühlte','daß','sie','einschlief','und','hatte','eben','angefangen','zu','träumen','sie','gehe','Hand','in','Hand','mit','Dinah','spazieren','und','frage','sie','ganz','ernsthaft','Nun','Dinah','sage','die','Wahrheit','hast','du','je','einen','Spatzen','gefressen','da','mit','einem','Male','plump','plump','kam','sie','auf','einen','Haufen','trocknes','Laub','und','Reisig','zu','liegen','','und','der','Fall','war','aus','','Alice','hatte','sich','gar','nicht','weh','gethan','Sie','sprang','sogleich','auf','und','sah','in','die','Höhe','aber','es','war','dunkel','über','ihr','Vor','ihr','lag','ein','zweiter','langer','Gang','und','sie','konnte','noch','eben','das','weiße','Kaninchen','darin','entlang','laufen','sehen','Es','war','kein','Augenblick','zu','verlieren','fort','rannte','Alice','wie','der','Wind','und','hörte','es','gerade','noch','sagen','als','es','um','eine','Ecke','bog','O','Ohren','und','Schnurrbart','wie','spät','es','ist','Sie','war','dicht','hinter','ihm','aber','als','sie','um','die','Ecke','bog','da','war','das','Kaninchen','nicht','mehr','zu','sehen','Sie','befand','sich','in','einem','langen','niedrigen','Corridor','der','durch','eine','Reihe','Lampen','erleuchtet','war','die','von','der','Decke','herabhingen','','Zu','beiden','Seiten','des','Corridors','waren','Thüren','aber','sie','waren','alle','verschlossen','Alice','versuchte','jede','Thür','erst','auf','einer','Seite','dann','auf','der','andern','endlich','ging','sie']

def get_entokens(liste, zahl):
    ergebnis = []
    for wort in liste:
		# der Slice vom vorletzten bis letzten Zeichen des aktuellen Worts muss gleich "en" sein, sonst wird das Wort ignoriert
        if wort[0-2:] == "en":
			# Wenn die gewünschte Zahl erreicht ist, wird die Schleife beendet - das spart Rechnerleistung und vermeidet Fehler!
            if len(ergebnis) > zahl-1:
                break
			# falls die gewünschte Zahl nicht erreicht wird, werden so viele Wörter wie möglich ausgegeben
            ergebnis.append(i)
			# das Ergänzen des aktuellen Wortes passiert erst hier, damit bei Angabe von zahl = 0 direkt die leere Liste zurückgegeben wird
    return ergebnis


# 5) Schreiben Sie eine Funktion, die in einem übergebenen String alle vorkommenden Vokale
# und Diphthonge durch einen einzigen, ebenfalls angegebenen Vokal oder Diphthong ersetzt.

# Beispielaufrufe:
# >>> replace_vowels("Alice hatte bereits 2 Stunden und 30 Minuten gewartet.", "a")
# "Alaca hatta barats 2 Standan and 30 Manatan gawartat."
# >>> replace_vowels("Alice hatte bereits 2 Stunden und 30 Minuten gewartet.", "eu")
# "Euleuceu heutteu beureuts 2 Steundeun eund 30 Meuneuteun geuweurteut."

def replace_vowels(string, letter):
    regex = re.compile("[[AEIOUÄÖÜaeiouäöü]|eu|au|ei|ie|äu|Eu|Au|Ei|Ie|Äu]")
    # Jedes Vorkommen von irgendeinem Vokal oder Diphthong (definiert als regex) wird durch das angegebene Zeichen letter ersetzt
	ausgabe = re.sub(regex, letter, string)
    return ausgabe
    
    
