Strings in Python meistern
Alles ueber Strings in Python -- von der Erstellung ueber Indizierung und Slicing bis hin zu f-Strings, Methoden und praktischen Beispielen.
Strings erstellen
Strings (Zeichenketten) sind einer der wichtigsten Datentypen in Python. Du kannst sie auf drei Arten erstellen:
Einfache Anfuehrungszeichen
text = 'Hallo Welt'
print(text) # Hallo Welt
Doppelte Anfuehrungszeichen
text = "Hallo Welt"
print(text) # Hallo Welt
Einfache und doppelte Anfuehrungszeichen sind gleichwertig. Verwende die eine Art, wenn der Text die andere enthaelt:
satz1 = "Er sagte: 'Hallo!'"
satz2 = 'Sie fragte: "Wie geht es dir?"'
Dreifache Anfuehrungszeichen
Dreifache Anfuehrungszeichen (""" oder ''') erlauben mehrzeilige Strings:
gedicht = """Roses are red,
Violets are blue,
Python is awesome,
And so are you."""
print(gedicht)
Das ist auch nuetzlich fuer laengere Texte oder Docstrings:
def berechne_summe(a, b):
"""
Berechnet die Summe zweier Zahlen.
Parameter:
a: Erste Zahl
b: Zweite Zahl
Rueckgabe:
Die Summe von a und b
"""
return a + b
String-Indizierung
Jedes Zeichen in einem String hat eine Position (Index). Python zaehlt dabei ab 0:
text = "Python"
# P y t h o n
# 0 1 2 3 4 5
text = "Python"
print(text[0]) # P -- erstes Zeichen
print(text[1]) # y -- zweites Zeichen
print(text[5]) # n -- sechstes (letztes) Zeichen
Negative Indizes
Python erlaubt auch negative Indizes — sie zaehlen vom Ende:
text = "Python"
# P y t h o n
# 0 1 2 3 4 5
# -6 -5 -4 -3 -2 -1
text = "Python"
print(text[-1]) # n -- letztes Zeichen
print(text[-2]) # o -- vorletztes Zeichen
print(text[-6]) # P -- erstes Zeichen
Index ausserhalb des Bereichs
text = "Python"
# print(text[10]) # IndexError: string index out of range
Slicing — Teile eines Strings extrahieren
Mit Slicing kannst du Teilstrings (Substrings) herauschneiden. Die Syntax ist string[start:stop:step].
Grundlagen
text = "Programmieren"
print(text[0:6]) # Progra -- Index 0 bis 5 (6 ist NICHT enthalten!)
print(text[7:13]) # mieren
print(text[:4]) # Prog -- von Anfang bis Index 3
print(text[4:]) # rammieren -- von Index 4 bis Ende
print(text[:]) # Programmieren -- Kopie des gesamten Strings
Mit Schrittweite
text = "Programmieren"
print(text[::2]) # Pormirn -- jedes zweite Zeichen
print(text[1::2]) # rgamee -- jedes zweite ab Index 1
print(text[::-1]) # nereimargorP -- String umkehren!
Praktische Beispiele
datum = "15.03.2026"
tag = datum[:2] # "15"
monat = datum[3:5] # "03"
jahr = datum[6:] # "2026"
print(f"Tag: {tag}, Monat: {monat}, Jahr: {jahr}")
# String umkehren -- ein Python-Klassiker
wort = "Hallo"
print(wort[::-1]) # ollaH
# Ist es ein Palindrom?
wort = "otto"
print(wort == wort[::-1]) # True -- ein Palindrom!
String-Methoden
Strings haben zahlreiche eingebaute Methoden (Funktionen). Hier die wichtigsten:
Gross- und Kleinschreibung
text = "Hallo Welt"
print(text.upper()) # HALLO WELT
print(text.lower()) # hallo welt
print(text.title()) # Hallo Welt
print(text.capitalize()) # Hallo welt
print(text.swapcase()) # hALLO wELT
Leerzeichen entfernen
text = " Hallo Welt "
print(text.strip()) # "Hallo Welt" -- beide Seiten
print(text.lstrip()) # "Hallo Welt " -- nur links
print(text.rstrip()) # " Hallo Welt" -- nur rechts
# Auch andere Zeichen entfernen:
text = "---Hallo---"
print(text.strip("-")) # "Hallo"
Aufteilen und Zusammenfuegen
# split() -- String in Liste aufteilen
satz = "Python ist fantastisch"
woerter = satz.split()
print(woerter) # ['Python', 'ist', 'fantastisch']
# Mit benutzerdefiniertem Trennzeichen
csv_zeile = "Max,25,Berlin"
felder = csv_zeile.split(",")
print(felder) # ['Max', '25', 'Berlin']
# join() -- Liste zu String zusammenfuegen
woerter = ["Python", "ist", "fantastisch"]
satz = " ".join(woerter)
print(satz) # "Python ist fantastisch"
# Mit anderem Trennzeichen
pfad = "/".join(["home", "benutzer", "dokumente"])
print(pfad) # "home/benutzer/dokumente"
Ersetzen
text = "Ich mag Java. Java ist toll."
# Alle Vorkommen ersetzen
neu = text.replace("Java", "Python")
print(neu) # "Ich mag Python. Python ist toll."
# Nur das erste Vorkommen ersetzen
neu = text.replace("Java", "Python", 1)
print(neu) # "Ich mag Python. Java ist toll."
Suchen
text = "Hallo Welt, Hallo Python"
# find() -- Position des ersten Vorkommens (-1 wenn nicht gefunden)
print(text.find("Hallo")) # 0
print(text.find("Python")) # 19
print(text.find("Java")) # -1
# count() -- Anzahl der Vorkommen
print(text.count("Hallo")) # 2
print(text.count("l")) # 4
Pruefen
text = "Hallo"
# startswith() und endswith()
datei = "bericht.pdf"
print(datei.startswith("bericht")) # True
print(datei.endswith(".pdf")) # True
print(datei.endswith((".pdf", ".doc"))) # True -- mehrere pruefen
# Weitere Pruefmethoden
print("12345".isdigit()) # True -- nur Ziffern?
print("Hallo".isalpha()) # True -- nur Buchstaben?
print("hallo".islower()) # True -- alles klein?
print("HALLO".isupper()) # True -- alles gross?
print("Hallo 123".isalnum()) # False -- Leerzeichen!
print(" ".isspace()) # True -- nur Leerzeichen?
f-Strings — Moderne String-Formatierung
f-Strings (ab Python 3.6) sind die modernste und lesbarste Art, Werte in Strings einzufuegen:
name = "Anna"
alter = 28
# f-String (empfohlen!)
print(f"Hallo, ich bin {name} und {alter} Jahre alt.")
Ausdruecke in f-Strings
Du kannst beliebige Python-Ausdruecke in die geschweiften Klammern schreiben:
a = 5
b = 3
print(f"{a} + {b} = {a + b}") # 5 + 3 = 8
print(f"{a} * {b} = {a * b}") # 5 * 3 = 15
print(f"Name: {'Max'.upper()}") # Name: MAX
print(f"Laenge: {len('Hallo')}") # Laenge: 5
Formatierung
# Dezimalstellen festlegen
pi = 3.14159265
print(f"Pi ist ungefaehr {pi:.2f}") # Pi ist ungefaehr 3.14
print(f"Pi ist ungefaehr {pi:.4f}") # Pi ist ungefaehr 3.1416
# Breite und Ausrichtung
for produkt, preis in [("Apfel", 1.2), ("Banane", 0.8), ("Kirsche", 3.5)]:
print(f"{produkt:<10} {preis:>6.2f} EUR")
# Apfel 1.20 EUR
# Banane 0.80 EUR
# Kirsche 3.50 EUR
# Tausender-Trennzeichen
einwohner = 83190556
print(f"Deutschland hat {einwohner:,} Einwohner")
# Deutschland hat 83,190,556 Einwohner
# Prozentzahlen
anteil = 0.856
print(f"Erfolgsquote: {anteil:.1%}") # Erfolgsquote: 85.6%
Die .format() Methode
Vor f-Strings war .format() die gaengige Methode. Du wirst sie in aelterem Code finden:
# Positionsbasiert
print("Hallo, {}! Du bist {} Jahre alt.".format("Max", 25))
# Mit Index
print("{0} mag {1}. {1} mag {0}.".format("Anna", "Python"))
# Mit Namen
print("Name: {name}, Alter: {alter}".format(name="Max", alter=25))
Empfehlung: Verwende in neuem Code immer f-Strings. Sie sind schneller und lesbarer.
String-Operationen
Verkettung mit +
vorname = "Max"
nachname = "Mustermann"
vollname = vorname + " " + nachname
print(vollname) # Max Mustermann
Wiederholung mit *
trennlinie = "-" * 40
print(trennlinie) # ----------------------------------------
rahmen = "=" * 30
print(rahmen)
print(" Willkommen in Python!")
print(rahmen)
Mitgliedschaftstest mit in
text = "Python ist eine tolle Sprache"
print("Python" in text) # True
print("Java" in text) # False
print("python" in text) # False -- Gross-/Kleinschreibung beachten!
print("Python" not in text) # False
# Praktisch in if-Abfragen:
email = "max@beispiel.de"
if "@" in email:
print("Gueltige Email-Adresse (hat ein @)")
Escape-Zeichen
Manche Zeichen haben in Strings eine besondere Bedeutung. Du kennzeichnest sie mit einem Backslash (\):
# Zeilenumbruch
print("Zeile 1\nZeile 2")
# Zeile 1
# Zeile 2
# Tabulator
print("Name:\tMax")
# Name: Max
# Backslash selbst
print("C:\\Users\\Max\\Dokumente")
# C:\Users\Max\Dokumente
# Anfuehrungszeichen im String
print("Er sagte: \"Hallo!\"")
# Er sagte: "Hallo!"
print('Es heisst \'Python\'')
# Es heisst 'Python'
Haeufige Escape-Zeichen
| Zeichen | Bedeutung |
|---|---|
\n | Zeilenumbruch |
\t | Tabulator |
\\ | Backslash |
\" | Doppeltes Anfuehrungszeichen |
\' | Einfaches Anfuehrungszeichen |
\0 | Null-Zeichen |
Raw Strings
Mit dem Praefix r erstellst du einen Raw String, in dem Backslashes nicht als Escape-Zeichen interpretiert werden:
# Normaler String
print("C:\neuer_ordner")
# C:
# euer_ordner -- \n wurde als Zeilenumbruch interpretiert!
# Raw String
print(r"C:\neuer_ordner")
# C:\neuer_ordner -- so gewollt!
Raw Strings sind besonders nuetzlich fuer:
# Windows-Dateipfade
pfad = r"C:\Users\Max\Dokumente\projekt"
# Regulaere Ausdruecke
import re
muster = r"\d{3}-\d{4}" # z.B. "123-4567"
Strings sind unveraenderlich (immutable)
Ein sehr wichtiges Konzept: Strings in Python sind unveraenderlich. Du kannst einzelne Zeichen nicht direkt aendern:
text = "Hallo"
# Das geht NICHT:
# text[0] = "h" # TypeError: 'str' object does not support item assignment
# Stattdessen: Neuen String erstellen
text = "h" + text[1:]
print(text) # hallo
# Oder mit replace():
text = "Hallo"
text = text.replace("H", "h")
print(text) # hallo
Das bedeutet auch: Jede String-Methode gibt einen neuen String zurueck und veraendert den urspruenglichen nicht:
text = "Hallo Welt"
ergebnis = text.upper()
print(text) # Hallo Welt -- unveraendert!
print(ergebnis) # HALLO WELT -- neuer String
Praxis-Beispiele
Beispiel 1: Benutzername bereinigen
eingabe = " Max.Mustermann "
# Leerzeichen entfernen, Kleinbuchstaben, Punkt durch Unterstrich ersetzen
benutzername = eingabe.strip().lower().replace(".", "_")
print(benutzername) # max_mustermann
Beispiel 2: Woerter zaehlen
text = "Python ist eine tolle Programmiersprache und Python macht Spass"
woerter = text.split()
anzahl = len(woerter)
print(f"Der Text hat {anzahl} Woerter.") # Der Text hat 10 Woerter.
# Bestimmtes Wort zaehlen
python_count = text.lower().count("python")
print(f"'Python' kommt {python_count} mal vor.") # 'Python' kommt 2 mal vor.
Beispiel 3: Email-Validierung (einfach)
email = input("Email-Adresse: ")
if "@" in email and "." in email:
name, domain = email.split("@")
if len(name) > 0 and len(domain) > 3:
print(f"Email '{email}' sieht gueltig aus!")
else:
print("Email-Adresse zu kurz.")
else:
print("Ungueltige Email-Adresse!")
Beispiel 4: Text-Statistik
text = """Python wurde von Guido van Rossum entwickelt.
Die erste Version erschien 1991.
Python ist heute eine der beliebtesten Programmiersprachen."""
zeilen = text.count("\n") + 1
woerter = len(text.split())
zeichen = len(text)
zeichen_ohne_leer = len(text.replace(" ", "").replace("\n", ""))
print(f"Zeilen: {zeilen}")
print(f"Woerter: {woerter}")
print(f"Zeichen (gesamt): {zeichen}")
print(f"Zeichen (ohne Leer): {zeichen_ohne_leer}")
Beispiel 5: Caesar-Verschluesselung (einfach)
def caesar_verschluesseln(text, verschiebung):
ergebnis = ""
for zeichen in text:
if zeichen.isalpha():
basis = ord("A") if zeichen.isupper() else ord("a")
verschoben = (ord(zeichen) - basis + verschiebung) % 26
ergebnis += chr(basis + verschoben)
else:
ergebnis += zeichen
return ergebnis
geheim = caesar_verschluesseln("Hallo Welt", 3)
print(geheim) # Kdoor Zhow
# Entschluesseln: gleiche Funktion mit negativer Verschiebung
original = caesar_verschluesseln(geheim, -3)
print(original) # Hallo Welt
Uebungen
Uebung 1: String-Manipulation
Gegeben ist folgender String. Fuehre die Aufgaben durch:
text = " Python Programmierung ist TOLL! "
# 1. Entferne Leerzeichen am Anfang und Ende
# 2. Wandle alles in Kleinbuchstaben um
# 3. Ersetze "toll" durch "fantastisch"
# 4. Zaehle, wie oft der Buchstabe "i" vorkommt
bereinigt = text.strip()
klein = bereinigt.lower()
ersetzt = klein.replace("toll", "fantastisch")
anzahl_i = ersetzt.count("i")
print(ersetzt)
print(f"Der Buchstabe 'i' kommt {anzahl_i} mal vor.")
Uebung 2: Palindrom-Pruefung
Schreibe Code, der prueft, ob ein Wort ein Palindrom ist (vorwaerts und rueckwaerts gleich):
wort = input("Gib ein Wort ein: ").lower().strip()
if wort == wort[::-1]:
print(f"'{wort}' ist ein Palindrom!")
else:
print(f"'{wort}' ist kein Palindrom.")
# Teste mit: otto, anna, level, hallo
Uebung 3: Initialen extrahieren
Extrahiere die Initialen aus einem vollstaendigen Namen:
name = "Max Peter Mustermann"
initialen = ""
for teil in name.split():
initialen += teil[0].upper()
print(f"Initialen von '{name}': {initialen}") # MPM
# Bonus: Als Einzeiler
initialen = "".join(teil[0].upper() for teil in name.split())
print(initialen) # MPM
Uebung 4: Passwort-Staerke pruefen
Schreibe ein Programm, das die Staerke eines Passworts prueft:
passwort = input("Passwort eingeben: ")
hat_gross = any(z.isupper() for z in passwort)
hat_klein = any(z.islower() for z in passwort)
hat_zahl = any(z.isdigit() for z in passwort)
hat_sonder = any(not z.isalnum() for z in passwort)
lang_genug = len(passwort) >= 8
punkte = sum([hat_gross, hat_klein, hat_zahl, hat_sonder, lang_genug])
staerke = {0: "Sehr schwach", 1: "Schwach", 2: "Maessig",
3: "Gut", 4: "Stark", 5: "Sehr stark"}
print(f"Passwort-Staerke: {staerke[punkte]} ({punkte}/5)")
Pro-Tipp: Strings effizient zusammenbauen
Wenn du viele Strings in einer Schleife zusammenfuegst, verwende nicht den + Operator — das ist langsam, weil bei jeder Verkettung ein neuer String erstellt wird. Nutze stattdessen join() oder eine Liste:
# Langsam (bei vielen Iterationen):
ergebnis = ""
for i in range(10000):
ergebnis += str(i)
# Schnell:
ergebnis = "".join(str(i) for i in range(10000))
# Auch gut:
teile = []
for i in range(10000):
teile.append(str(i))
ergebnis = "".join(teile)
Der Unterschied wird bei grossen Datenmengen deutlich spuerbar. join() ist die idiomatische Python-Loesung und sollte immer bevorzugt werden.