Die Schleife while | Python-Kurs | Die Schleife for |
Inhalt dieser Seite
- Operatoren für Zeichenketten
- Die rechteckigen Klammern: Ausschnitte aus Strings
- Codierung von Zeichen in Strings
- Stringfunktionen
- Konvertierung Zahlen und Zeichenketten
- Steuer- und Sonderzeichen
- Ausgabe mit print
- Formatierte Ausgabe
- Übungsaufgaben
Stringliterale, also die Werte, werden durch Anführungszeichen oder Hochkommata eingeschlossen. Mehrzeilige Literale können durch dreifache Anführungszeichen gebildet werden.
gruss = "Hallo!" name = 'Arnold' lyrik = """When I see a bird that walks like a duck and swims like a duck and quacks like a duck, I call that bird a duck. (James Whitcomp Riley)"""
Wurde eine Variable mit einem String belegt, liefert die Funktion type als Typen str zurück.
$ python3 Python 3.10.12 (main, Jun 11 2023, 05:26:28) [GCC 11.4.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> gruss = "Hallo!" >>> type(gruss)>>> quit()
Operatoren für Zeichenketten
Python bietet zwei Operatoren, die bei Strings eine besondere Bedeutung haben.- + Aneinanderhängen: Zeichenketten werden mit dem Pluszeichen verbunden.
>>> j = "James" >>> b = "Bond" >>> print("My name is" + b + "," + j + b) My name isBond,JamesBond
Ja, da fehlen noch ein paar Leerzeichen. - * Vermehrung durch den Stern: Zeichenkette * 3 erzeugt dreimal die Zeichenkette nacheinander.
>>> b = "Bond" >>> print(b*3) BondBondBond
Die rechteckigen Klammern: Ausschnitte aus Strings
Strings haben eine gewisse Verwandtschaft zu Listen und wie diese die rechteckigen Klammern. Da die Behandlung von Listen und Strings an vielen Stellen gleich ist, lernen Sie hier also auch gleich etwas für das spätere Programmiererleben.Über die rechteckigen Klammern können Sie Teile der Zeichenkette aus einer Zeichenkettenvariablen ausschneiden. Befindet sich zwischen den rechteckigen Klammern nur eine Zahl, wird nur ein Zeichen geholt, welches aber selbst wieder vom Typ str ist. Es gibt also keinen gesonderten Typ für einzelne Zeichen.
Name = "James Bond" print(Name[1])Die Ausgabe liefert ein a, weil der erste Buchstabe auf der Position 0 steht.
Mit zwei durch Doppelpunkt getrennten Werten können Anfangs- und Endposition der gesuchten Zeichenkette festgelegt werden. Der folgende print()-Aufruf liefert also ame.
Name = "James Bond" print(Name[1:3])Mit der rechteckigen Klammer können Sie auf verschiedene Weise Teile eines Textes aus einer Zeichenkette ausschneiden.
s[i] | liefert den i-ten Buchstaben |
s[n:m] | liefert den Bereich vom n-ten bis zum m-ten Element |
s[:n] | liefert den Bereich vom Anfang bis zum n-te Element |
s[n:] | liefert den Bereich ab dem n-ten Element |
Negative Werte zwischen die rechteckigen Klammern indizieren von hinten. -1 liefert den letzten Buchstaben, -2 den vorletzten und so weiter.
Fehler
Ist allerdings ein Wert zwischen den rechteckigen Klammern größer oder gleich der Länge der Zeichenkette, gibt es eine Exception.Über die rechteckigen Klammern können einzelne Buchstaben in einer Zeichenkette nicht verändert werden.
Codierung von Zeichen in Strings
Buchstaben in Strings sind durchnummeriert. In der ursprünglichen Kodierung stand für jeden Buchstaben ein Byte zur Verfügung. Welche Zahl für welchen Buchstaben steht, kann man in ASCII-Tabellen nachschlagen. Für einen Programmierer ist das aber weder notwendig noch empfehlenswert.Der Großbuchstabe A wird beispielsweise mit 65, B mit 66 usw. kodiert. Wichtig ist, dass Buchstaben und Ziffern in allen Kodierungen aufsteigend und lückenlos kodiert werden. Kleinbuchstaben beginnen bei 97 und Ziffern mit der 0 bei 48.
Diese Kodierungen lassen sich mit der Funktion ord("A"), ord("a") und ord("0") ermitteln. Sie erhalten 65, 97 und 48.
Sie können nun beispielsweise den Buchstaben um einen Wert verschieben, also aus dem A ein B, aus dem B ein C usw. machen. Sicher haben Sie als Kind auch schon einmal so geheime Botschaften verschlüsselt. Der Informatiker spricht von der Caesar-Chiffre.
buchstabe = "G" zahlencode = ord(buchstabe) + 1 kodiert = chr(zahlencode)
Wenn Sie buchstabe+1 berechnen, erhalten Sie einen Fehler, weil Python Buchstaben und Zahlen nicht einfach mischen will. Also erzeugen Sie mit ord die Kodierung des Buchstabens, erhöhen diese um 1 und wandeln das Ergebnis mit chr wieder in einen Buchstaben.
- a = ord(z): Gibt den UTF-8-Code des Zeichens zurück. Enthält der String mehrere Zeichen, liefert die Funktion einen TypeError.
- z = chr(a): Erzeugt ein Zeichen aus dem UTF-8-Code in a.
UTF-8
Aber was, um alles in der Welt ist UTF-8? Das ist eine lange, traurige Geschichte, deren Knackpunkt ist, dass ein Byte nur 256 Zustände annehmen kann und die Anzahl der internationalen Sonderzeichen erheblich größer ist. Auf dem Weg zu UTF-8 hat man alle paar Jahre eine andere Lösungen probiert. Und es steht zu erwarten, dass auch Windows dort irgendwann vollständig angekommen sein wird.Python verwendet seit Version 3 standardmäßig UTF-8 im Quelltext, lässt also Umlaute zu. Darauf ist auch IDLE (die mit Python mitgelieferte IDE) eingestellt. Wird unter Windows, das oft noch mit UTF-8 fremdelt, der Standardeditor verwendet, kann es Schwierigkeiten geben.
Stringfunktionen
- z.islower(): sind alle Zeichen in z Kleinbuchstaben?
- z.isupper(): sind alle Zeichen in z Großbuchstaben?
- z.isalpha(): sind alle Zeichen in z Buchstaben (keine Ziffern oder Sonderzeichen)?
- a = len(str): Berechnet die Länge eines Strings
Konvertierung Zahlen und Zeichenketten
Zeichenketten eignen sich nicht zum Rechnen. Aber beispielsweise nach der Eingabe durch die Funktion input() enthält eine Variable eine Zeichenkette.Enthält die Eingabe nur Zahlen, die zum Verrechnen bestimmt sind, müssen sie vorher in Zahlentypen umgewandelt werden. Dabei helfen die Funktionen int() und float() oder die Funktion eval(). Als Parameter erhalten sie jeweils die Zeichenkette. int() liefert einen ganzzahligen Wert zurück, float() eine Fließkommazahl, also eine mit Nachkommastellen.
ganzzahlvar = int(zeichenkette) nachkommavar = float(zeichenkette)Oder allgemeiner: Um aus einer Zeichenkette einen Wert zu ermitteln, verwendet man die Funktion eval(). Die Funktion interpretiert komplette Python-Ausdrücke und ist aus diesem Grund ein potentielles Einfallstor für Befehls-Injection. Darum sollte es mit Bedacht verwendet werden.
zahlvar = eval(zeichenkette) zahlvar = float(zeichenkette) # Alternative für Fließkommazahlen zahlvar = int(zeichenkette) # Alternative für ganzzahlige WerteUm einen Zahlenwert in eine Zeichenkette zu wandeln, wird die Funktion str() verwendet.
zeichenkette = str(zahlvar)
Sonder- und Steuerzeichen
Neben den Buchstaben und Ziffern enthalten Strings auch Sonderzeichen. So kann man innerhalb eines Strings mehrere Zeilen ablegen, indem man das Sonderzeichen für einen Zeilenumbruch \n einfügt.Mit dem Tabulatorzeichen \t können Abstände zwischen Texten gesetzt werden. Dabei wird die nächste durch 8 teilbare Bildschirmposition angesprungen.
Da der Backslash \ zur Einleitung der Sonder- und Steuerzeichen verwendet wird, kann er leider nicht so einfach in den Text eingesetzt werden, ohne interpretiert zu werden. Leider hat Microsoft sehenden Auges dieses als Verzeichnistrenner verwendet. Damit müssen nun Windows-Programmierer einen Backslash verdoppeln, wenn Sie das Zeichen verwenden wollen. Kleiner Trost: Inzwischen kann vom Programm aus auch der Slash / als Verzeichnistrenner verwendet werden.
\n | Zeilenumbruch |
\t | Tabulatorzeichen |
\\ | \ als Zeichen |
Ausgabe mit print
Die Ausgabe erfolgt mit der Funktion print(). Es können mehrere Werte an print() übergeben werden, die dann durch Komma zu trennen sind. Die Ausgabe erfolgt dann in der gleichen Zeile.Soll am Ende kein Zeilenvorschub erfolgen, können Sie den Parameter end der Methode print() in ein Leerzeichen oder in einen leeren String ändern.
print("Anfang", end=" ") print("Ende")Nun erscheinen Anfang und Ende durch ein Leerzeichen getrennt in derselben Zeile.
Formatierte Strings für die Ausgabe
Um bei einer Ausgabe sprechende Tabellen zu erhalten, muss man die Strings aus mehreren Bestandteilen zusammensetzen und miteinander verknüpfen. Das kann sehr kleinteilig werden. Dabei hilft format.Die Methode format() wird durch einen Punkt getrennt an die Zeichenkette gehängt. Innerhalb der Formatierungszeichenkette wird durch ein geschweiftes Klammerpaar die Position der Werte angegeben. Die Werte werden als Parameter an format() übergeben.
print("Das Quadrat von {} ist {}".format(3, 9)
In den geschweiften Klammern können die Anzahl der Vorkommastellen angegeben werden. Darauf folgt ein Doppelpunkt und dann die Anzahl der Nachkommastellen.
Die geschweiften Klammern werden mit den Werten in format nacheinander bestückt. Die Beziehungen können explizit durch die Positionen angegeben werden. Dann stehen in den geschweiften Klammern die Positionsnummern, bei 0 beginnend. Alternativ können auch Namen vergeben werden. Diese werden dann in den Klammern von format referenziert.
zahl = 12 print("Das Quadrat von {0} ist {1}".format(zahl, zahl*zahl)) print("Das Quadrat von {wert} ist {quadrat}".format(wert=zahl, quadrat=zahl*zahl))In den geschweiften Klammern können hinter einem Doppelpunkt auch die Anzahl der Stellen angegeben werden, die die Werte einnehmen. Bei Ganzzahlenwerten können daran auch d für Dezimal und x für Hexadezimal angegeben werden.
zahl = 12 print("Das Quadrat von {0:3} ist {1:4x}".format(zahl, zahl*zahl))
Übungsaufgaben
Mein Name ist ...
Die Variable name soll den String "James Bond" enthalten.
- Die Variable j soll den Vornamen James aus dem String name entnehmen.
- Die Variable b soll die letzten vier Buchstaben des Namens erhalten.
- Es soll aus j und b mit einem Komma und einem Leerzeichen der Spruch "Bond, James Bond" auf dem Bildschirm ausgegeben werden.
Noch ein James Bond
Die Zubereitung des Martinis ist durcheinandergeraten. Es heißt nun "gerüttelt, nicht geschürt". Bilden Sie aus diesem String, den Sie in der Variablen m finden, den Originalspruch "geschüttelt, nicht gerührt" bilden. Sie dürfen nur Ausschnitte aus m zusammensetzen. Das geht auch, weil alle benötigten Buchstaben vorhanden sind.Verschlüsseln mit Caesar
Erstellen Sie eine while-Schleife, die durch den String botschaft läuft und dessen Buchstaben in einem neuen String mit einer Caesar-Chiffre um 1 code ablegt.Der Einfachheit halber benutzen wir nur Kleinbuchstaben. Alle Zeichen außer den Kleinbuchstaben sollen unverändert bleiben. Alle Kleinbuchstaben verwandeln Sie in den nächsten Kleinbuchstaben. Wenn Sie das z verschlüsseln wollen, verwenden Sie a, damit die Verschlüsselung den Buchstabenraum nicht verlässt.