Zum Inhalt springen
Python Anfänger 3 min

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.

Aktualisiert:

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

ZeichenBedeutung
\nZeilenumbruch
\tTabulator
\\Backslash
\"Doppeltes Anfuehrungszeichen
\'Einfaches Anfuehrungszeichen
\0Null-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.

Zurück zum Python Kurs