Ziele
- Einen String umkehren
- Groß-/Kleinschreibung und Leerzeichen sauber behandeln
- Einen Palindromtest als Funktion schreiben
Was ist ein Palindrom?
Ein Wort, das rückwärts gelesen gleich bleibt: otto, reliefpfeiler, rentner.
String umkehren
Am kürzesten mit Slicing:
wort = "Informatik"
print(wort[::-1])[::-1] heißt „alle Zeichen, Schrittweite -1" – also rückwärts.
Einfacher Palindromtest
def ist_palindrom(wort):
return wort == wort[::-1]
print(ist_palindrom("otto"))
print(ist_palindrom("haus"))Groß-/Kleinschreibung und Leerzeichen
„Otto" ist mit großem O kein Palindrom mehr ("Otto"[::-1] ist "ottO"). Und Sätze enthalten Leerzeichen. Beides räumt man vorher weg:
def ist_palindrom(text):
sauber = text.lower().replace(" ", "")
return sauber == sauber[::-1]
print(ist_palindrom("Otto"))
print(ist_palindrom("Erika feuert nur untreue Fakire"))Erklärung
.lower() macht alles klein, .replace(" ", "") entfernt alle Leerzeichen. Erst danach wird verglichen.
Ohne Slicing: mit einer Schleife
Manchmal soll man es „zu Fuß" können – von außen nach innen vergleichen:
def ist_palindrom(wort):
links = 0
rechts = len(wort) - 1
while links < rechts:
if wort[links] != wort[rechts]:
return False
links += 1
rechts -= 1
return True
print(ist_palindrom("reliefpfeiler"))
print(ist_palindrom("reliefpfeiler"))Aufgaben
Löse die folgenden Aufgaben selbstständig oder mit einem Partner oder Partnerin.
Aufgabe 1: Palindrome in einer Liste
Gib aus einer Wortliste nur die Palindrome aus.
woerter = ["otto", "haus", "anna", "python", "reittier"]
# for w in woerter: ...Aufgabe 2: Auch Satzzeichen ignorieren
Erweitere den Test so, dass "Was, muss, das sein?" … (denk dir ein echtes Satz-Palindrom aus) – oder teste "Anna, hol das Kajak, Salonhalona" und ignoriere ,, ., ?, !.
def ist_palindrom(text):
sauber = text.lower()
for zeichen in " ,.?!":
sauber = sauber.replace(zeichen, "")
return sauber == sauber[::-1]
print(ist_palindrom("Eine güldene, gemeine Tugend nie!"))Aufgabe 3: Längstes Palindrom
Gegeben eine Wortliste. Gib das längste Palindrom aus.
woerter = ["otto", "rentner", "haus", "reliefpfeiler", "anna"]
# Akkumulator-Muster: bestes bisher merkenTipp
Wie beim Maximum finden: eine Variable bestes = "", und wenn ein Palindrom länger ist als bestes, ersetzen.