Das Trennen der Wörter könnte man so nachprogrammieren:
Code: Alles auswählen
BUCHSTABEN = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
def gib_worte(text):
worte = []
puffer = []
for zeichen in text:
if zeichen in BUCHSTABEN:
puffer.append(zeichen)
else:
if len(puffer) > 0:
# Inhalt des Puffers als neues Wort anfügen
# (wird nicht ausgeführt, wenn Puffer leer ist,
# z.B. bei Leerzeichen nach einem Komma)
worte.append(''.join(puffer))
# Puffer leeren für das nächste Wort
puffer = []
if len(puffer) > 0:
# Puffer hat noch Inhalt, wenn letztes Zeichen ein Buchstabe war
# -> restlichen Inhalt als neues Wort anfügen
worte.append(''.join(puffer))
return worte
def test():
print(gib_worte("Hallo, na du wie gehts\n"))
print(gib_worte("Hallo na\n"))
print(gib_worte("na wie Wochenende\n"))
if __name__ == '__main__':
test()
Noch ein paar Anmerkungen: Anstatt der Liste mit
join() ginge für einen Anfänger IMHO auch das Plus-Rechnen mit Strings. Das
else-if habe ich bewusst so hingeschrieben, damit es anfängerfreundlicher ist. Eigentlich würde ich da ein
elif verwenden. Anstelle des expliziten
len()-Tests geht in Python auch einfach
if puffer. Weiterhin ginge anstatt einer neuen Liste auch
puffer.clear(), wobei ich
clear() echt selten in Python-Code sehe und man halt eher zum Neuanlegen der Datenstruktur tendiert. Zudem könnte
BUCHSTABEN ein Set sein, weil damit effizienter erkannt wird, ob ein Element (hier: Zeichen) enthalten ist.
Wie man sieht, muss man noch ein paar Sonderfälle beachten, wenn der Puffer nicht befüllt ist sowie wenn er nach Ende der Schleife noch Inhalt hat. Wobei der letzte Test unnötig ist, wenn der zu verarbeitende Text immer ein Newline-Zeichen am Ende hat. Es ist aber IMHO besser, hier auf der sicheren Seite zu sein als wenn sich die Anforderungen später mal ändern und man weiterhin auf die - dann fehlerhafte - Funktionalität vertraut.