Um neue, formatierte Zeichenketten zu erzeugen, verwendet Python die String-Formatierung im Stil von C. Der "%"-Operator wird verwendet, um einen Satz von Variablen zu formatieren, die in einem "Tupel" (einer Liste fester Größe) eingeschlossen sind, zusammen mit einer Formatzeichenkette, die normalen Text zusammen mit "Argument-Spezifizierern", speziellen Symbolen wie "%s" und "%d", enthält.
Eine Variable namens "name" mit dem Namen des Benutzers darin, und du möchtest dann eine Begrüßung an diesen Benutzer ausgeben.
name = "Mike"
print("Hallo, %s!" % name)
Um zwei oder mehr Argumente zu verwenden, verwende ein Tupel (Klammern):
name = "Jeff"
alter = 18
print("%s is %d years old." % (name, alter))
Jedes Objekt, das keine Zeichenkette ist, kann auch mit dem %s-Operator formatiert werden. Die Zeichenkette, die von der "repr"-Methode dieses Objekts zurückgegeben wird, wird als Zeichenkette formatiert. Zum Beispiel:
meine_liste = ['Skill','Talent','Job']
print("Eine Liste: %s" % meine_liste)
Hier sind einige grundlegende Argumente aufgeführt:
%s
- String (oder jedes Objekt mit einer String-Repräsentation, wie z. B. Zahlen)
%d
- Integers
%f
- Floats bzw. Fließkommazahlen
%.<Anzahl der Ziffern>f
- Fließkommazahlen mit einer festen Anzahl von Ziffern rechts vom Punkt.
%x/%X
- Ganzzahlen in Hex-Darstellung (Klein-/Großbuchstaben)
Übung
Du musst einen Formatstring schreiben, der die Daten mit der folgenden Syntax ausgibt: Hallo John Doe. Ihr aktueller Kontostand beträgt 53,44 $.
daten = ("John", "Doe", 53.44)
format_zeichenkette = "Hallo"
print(format_zeichenkette % daten)
daten = ("John", "Doe", 53.44)
format_zeichenkette = "Hallo %s %s. Ihr aktueller Kontostand beträgt $%s."
print(format_zeichenkette % daten)
test_object('daten')
success_msg("Hervorragend!")
String-Operationen
Um den String in diesen Klammern (einfache Anführungszeichen sind ' ') zuzuordnen, kannst du nur doppelte Anführungszeichen wie folgt verwenden
einstring = "Hello World!"
print("Einfache Anführungszeichen sind ' '")
print(einstring)
Die Länge des String kann mit der Funktion len() ermittelt werden
einstring = "Hello World!"
print(len(einstring))
Er gibt 12 aus, weil "Hello World!" 12 Zeichen lang ist, einschließlich Satzzeichen und Leerzeichen.
einstring = "Hello World!"
print(einstring.index("o"))
Das gibt 4 aus, weil die Position des ersten Vorkommens des Buchstaben "o" 4 Zeichen vom ersten Zeichen entfernt ist. Beachte, dass es eigentlich zwei "o" in der Phrase gibt - diese Methode erkennt nur das erste.
Aber warum hat es nicht 5 ausgegeben? Ist "o" nicht das fünfte Zeichen in der Zeichenkette? Der Einfachheit halber beginnt Python (und die meisten anderen Programmiersprachen) die Dinge bei 0 statt bei 1. Der Index von "o" ist also 4.
einstring = "Hello World!"
print(einstring.count("l"))
Dies zählt die Anzahl der l's in der Zeichenkette. Daher sollte es 3 ausgeben.
einstring = "Hello World!"
print(einstring[3:7])
Dies gibt ein Segment der Zeichenkette aus, das bei Index 3 beginnt und bei Index 6 endet. Aber warum 6 und nicht 7? Auch hier gilt, dass die meisten Programmiersprachen dies tun - es macht das Rechnen innerhalb dieser Klammern einfacher.
Wenn du nur eine Zahl in den Klammern hast, bekommst du das einzelne Zeichen bei diesem Index. Wenn du die erste Zahl weglässt, aber den Doppelpunkt beibehältst, bekommst du ein Segment vom Anfang bis zu der Zahl, die du drin gelassen hast. Wenn du die zweite Zahl weglässt, erhältst du einen Ausschnitt von der ersten Zahl bis zum Ende.
Du kannst sogar negative Zahlen in die Klammern setzen. Sie sind ein einfacher Weg, um am Ende der Zeichenkette zu beginnen, anstatt am Anfang. Auf diese Weise bedeutet -3 "3. Zeichen vom Ende".
einstring = "Hello World!"
print(einstring[3:7:2])
Dies gibt die Zeichen der Zeichenkette von 3 bis 7 aus, wobei ein Zeichen übersprungen wird. Dies ist eine erweiterte Slice-Syntax. Die allgemeine Form ist [Start:Stop:Schritt].
einstring = "Hello World!"
print(einstring[3:7])
print(einstring[3:7:1])
Beide erzeugen die gleiche Ausgabe
Es gibt keine Funktion wie strrev in C, um einen String umzukehren. Aber mit der oben erwähnten Art von Slice-Syntax kannst du einen String leicht umkehren, z. B. so
einstring = "Hello World!"
print(einstring[::-1])
upper() und lower() Funktionen
Diese erzeugen einen neuen String, bei der alle Buchstaben in Groß- bzw. Kleinbuchstaben umgewandelt werden.
einstring = "hello world!"
print(einstring.upper())
print(einstring.lower())
startswith() und endswith() Funktionen
Damit wird ermittelt, ob der String mit etwas beginnt bzw. mit etwas endet. Die erste wird True
ausgeben, da die Zeichenkette mit "Hello" beginnt. Die zweite wird False
ausgeben, da die Zeichenkette sicher nicht mit "foo" endet.
einstring = "Hello World!"
print(einstring.startswith("Hello"))
print(einstring.endswith("foo"))
split() Funktion
Dadurch wird der String in eine Reihe von Zeichenketten aufgeteilt, die in einer Liste zusammengefasst werden. Da in diesem Beispiel an einem Leerzeichen geteilt wird, wird das erste Element in der Liste "Hello" und das zweite " World!" sein.
einstring = "Hello World!"
einpaarworte = einstring.split(" ")
Übung
Versuche, den Code so zu ändern, dass er die richtigen Informationen ausgibt, indem du die Zeichenfolge änderst.
s = "Hallo und Guten Tag!"
# Die Länge sollte 20 betragen
print("Länge von s = %d" % len(s))
# Das erste Vorkommen von "a" sollte bei Index 8 sein
print("Das erste Vorkommen des Buchstabens a = %d" % s.index("a"))
# Anzahl der a's sollte 2 sein
print("a tritt %d mal auf" % s.count("a"))
# Slicing der Zeichenkette in Bits
print("Die ersten fünf Zeichen sind '%s'" % s[:5]) # Start bis 5
print("Die nächsten fünf Zeichen sind '%s'" % s[5:10]) # 5 bis 10
print("Das dreizehnte Zeichen ist '%s'" % s[12]) # Nur Nummer 12
print("Die Zeichen mit ungeradem Index sind '%s'" %s[1::2]) #(0-basierte Indizierung)
print("Die letzten fünf Zeichen sind '%s'" % s[-5:]) # Fünftletzter bis Ende
# Alles in Großbuchstaben umwandeln
print("String in Großbuchstaben: %s" % s.upper())
# Alles in Kleinbuchstaben umwandeln
print("String in Kleinbuchstaben: %s" % s.lower())
# Prüfen, wie ein String beginnt
if s.startswith("Str"):
print("String beginnt mit 'Str'. Gut!")
# Prüfen, wie ein String endet
if s.endswith("ome!"):
print("String endet mit 'ome!'. Gut!")
# Teile den String in drei separate Strings auf,
# die jeweils nur ein Wort enthalten
print("Teile die Worte des Strings auf: %s" % s.split(" "))
s = "Strings sind genial!"
# Die Länge sollte 20 betragen
print("Länge von s = %d" % len(s))
# Das erste Vorkommen von "a" sollte bei Index 8 sein
print("Das erste Vorkommen des Buchstabens a = %d" % s.index("a"))
# Anzahl der a's sollte 2 sein
print("a tritt %d mal auf" % s.count("a"))
# Slicing der Zeichenkette in Bits
print("Die ersten fünf Zeichen sind '%s'" % s[:5]) # Start bis 5
print("Die nächsten fünf Zeichen sind '%s'" % s[5:10]) # 5 bis 10
print("Das dreizehnte Zeichen ist '%s'" % s[12]) # Nur Nummer 12
print("Die Zeichen mit ungeradem Index sind '%s'" %s[1::2]) #(0-basierte Indizierung)
print("Die letzten fünf Zeichen sind '%s'" % s[-5:]) # Fünftletzter bis Ende
# Alles in Großbuchstaben umwandeln
print("String in Großbuchstaben: %s" % s.upper())
# Alles in Kleinbuchstaben umwandeln
print("String in Kleinbuchstaben: %s" % s.lower())
# Prüfen, wie ein String beginnt
if s.startswith("Str"):
print("String beginnt mit 'Str'. Gut!")
# Prüfen, wie ein String endet
if s.endswith("ome!"):
print("String endet mit 'ome!'. Gut!")
# Teile den String in drei separate Strings auf,
# die jeweils nur ein Wort enthalten
print("Teile die Worte des Strings auf: %s" % s.split(" "))
test_output_contains("Länge von s = 20")
test_output_contains("Das erste Vorkommen des Buchstabens a = 8")
test_output_contains("a tritt 2 mal auf")
test_output_contains("String beginnt mit 'Str'. Gut!")
test_output_contains("String endet mit 'ome!'. Gut!")
success_msg("Hervorragend!")