Schreiben Sie eine Python-Funktion, die eine Liste aller Worte aus Kleinbuchstaben (keine Umlaute) erzeugt, die aus genau 4 Buchstaben bestehen und die keine drei direkt aufeinanderfolgenden Konsonanten enthält.
Ich würde anfangen die Aufgabe in kleinere Teile zu unterteilen (Funktionen).
Code: Alles auswählen
def no_umlauts(word):
"""
Diese Funktion liefert True zurück, wenn keine Umlaute vorhanden sind.
Ansonsten wird False ausgegeben.
"""
def no_double_consonants(word):
"""
Diese Funktion ist von Schwierigkeitsgrad schon etwas höher.
Letztendlich soll die Funktion True zurück liefern, wenn das Wort keine aufeinander folgenden Konsonanten hat.
Mögliche Ansätze:
- 2 Iteratoren
- oder index-zugriff mit ein bisschen rechnen +1
"""
def erstelle_liste(woerterbuch):
"""
Das 'woerterbuch' ist ein zusammenhängender Text (str).
Kriterien:
- alles Kleinbuchstaben (umwandeln oder nach den Rechtschreibregeln?)
- Länge des Wortes == 4 Zeichen
- Keine Umlaute
- Keine Doppelkonsonanten
"""
words = woerterbuch.lower() # Aufgabe 1, alles in Kleinbuchstaben
# da der ganze Text jetzt in Kleinbuchstaben ist, muss später nichts mehr geändert werden.
# falls die Rechtschreibung damit gemeint ist, wäre dieser Ansatz falsch
# dann lässt man words = woerterbuch.lower() einfach weg,
# weil es wird ja eh später gerprüft ob die Zeichen des Wortes in string.ascii_lowercase enthalten sind.
results = []
for wort in words.split():
if len(wort) != 4:
# zum nächsten Wort, wenn das Wort nicht aus 4 Zeichen besteht.
continue
if no_umlauts(wort) and no_double_consonants(wort): # Der Test
results.append(wort)
return results
Für die Funktion
no_umlauts kann man sich bei string.ascii_lowercase bedienen. Der
str enthält die Zeichen
a-z.
Entweder kann man das ganz klassisch in einer for-schleife testen, ob jedes Zeichen aus dem Wort in string.ascii_lowercase enthalten ist.
Natürlich könntest du die Zeichenkette auch selbst angeben. Ich würde jedenfalls die Funktion
all mit einer Generator Expression nutzen.
So prüft man, ob ein Zeichen oder mehrere Zeichen in einem String vorkommen:
Code: Alles auswählen
gesucht = "Nadel"
heuhaufen = "heuhaufenheuhaufenNadelheuhaufenheuhaufen"
gefunden = gesucht in heuhaufen
if gefunden:
print("Nadel gefunden")
else:
print("Keine Nadel :-/")
Es muss nun Zeichen für Zeichen geprüft werden, ob dieses in string.ascii_lowercase vorkommt, dass auch vorher nicht in eine Liste umgewandelt werden muss, da str bereits eine Sequenz ist.
Die Funktion
no_double_consonants ist schwieriger umzusetzen, wenn man mit iteratoren arbeiten möchte und noch nicht so ganz weiß, was die machen.
Anfänger tendieren eher zu gucken wie lang das Wort ist, um dann mit einer Zählschleife auf die Indices zuzugreifen und das letzte Element mit dem aktuellen vergleichen wird usw.
Code: Alles auswählen
word = "tesst"
wlen = len(word)
is_ok = True
for idx in range(wlen - 1): # 0, ... len - 2
if word[idx] == word[idx + 1]:
is_ok = False
break # wir wissen jetzt, dass zwei Zeichen aufeinander folgen
# wenn jetzt zwei Vokale aufeinander folgen, wird auch erkannt
# Deswegen brauchst du auch eine Liste mit Konsonanten, um das mit jeden Buchstaben zu prüfen
Da ich faul bin, mache ich keine Liste, sondern ein set.
Code: Alles auswählen
vokale = set("aeiou")
konsonanten= set(string.ascii_lowercase) - vokale
print(konsonanten)
print(sorted(konsonanten))
Sortieren braucht man die Konsonanten nicht. Man prüft einfach nur, ob der Buchstabe in dem set vorkommt.
Ich hoffe, dass ich nicht zuviel gemacht habe. Falls doch, einfach löschen...
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server