7A: Zeichenketten bzw. Strings

Lektion 7 besteht aus drei Teilen A, B und C, die in beliebiger Reihenfolge bearbeitet werden können.

Bislang haben wir Zeichenketten bzw. Strings (Elemente vom Typ str ) nur auf ganz einfache Art und Weise verwendet. In dieser Lektion zeigen wir, wie man Strings manipulieren kann: wie man sie auseinander nehmen kann, wie man sie kombinieren kann und wie man die unterschiedlichen Zeichen betrachten kann, aus denen ein String besteht.

Was ist ein String?

Alle Daten, die auf einem Computer gespeichert sind, werden letztlich als eine Folge von 0-en und 1-en gespeichert. Dazu gehören Texte, digitale Bücher, Bilder, Lieder, Videos und "executable files", also ausführbare Dateien wie Spiele und Anwendungen. Textdaten werden in der Regel als Strings gespeichert:

  • Ein String ist eine Kette (auch: Folge) von Zeichen. Der String "Hello, World!" z.B. enthält 13 Zeichen, darunter Buchstaben wie "H", "e" und Zeichensetzung wie " ", "!".
  • Jedes Zeichen im String entspricht genau genommen einer Zahl. Die Zahl ist der Code des Zeichens; "H" zum Beispiel entspricht der Zahl 72 (bzw. 48 im Hexadezimalsystem), und zwar sowohl im ASCII-Code als auch im Unicode.)

(Zahlen werden vom Computer in einem binären Format gespeichert - eben als Folge von 0-en und 1-en, auch Bitfolge genannt. Für ein Zeichen wird letztlich die binäre Darstellung seines Zahlencodes gespeichert; für das "H" also die Bitfolge 01001000.)

Das Manipulieren von Strings als Folgen von Zeichen: S[]

Um einen String zu manipulieren, müssen wir in der Lage sein, auf die individuellen Zeichen zugreifen zu können, aus denen der String besteht. In Python wird dies folgendermaßen gemacht: für einen String S und eine Ganzzahl index, liefert die Notation

S[index]
das Zeichen von S an der Position index. Nach der Konvention beginnt der String beim Index 0: also ist S[0] das erste Zeichen, S[1] das zweite Zeichen, etc. In "Hello, World!" ist die Liste von Zeichen (engl.: character) folgende:

Index: 0  1  2  3  4  5  6  7  8  9 10 11 12
Char.: H  e  l  l  o  ,     W  o  r  l  d  !
Beachte, dass das Zeichen an der Stelle Index 6 ein Leerzeichen ist.

In vielen anderen Programmiersprachen gibt es eine besondere Kategorie für Zeichen. In Python sind Zeichen das gleiche wie Strings mit Länge 1, also ist ihr Typ str.

Die Anzahl von Zeichen in einem String finden: len

Um die Anzahl von Zeichen in einem String zu finden, benutzen wir die Python Funktion len. Zum Beispiel ist len("Hello, World!") gleich 13.

Multiple-Choice-Übung: Das letzte Zeichen
Welchen Ausdruck kann man verwenden, um das letzte Zeichen in einem String S zu erhalten?
Korrekt! Obwohl len(S) dir die Gesamtzahl an Zeichen in der Zeichenkette herausgibt, da es mit dem Index 0 beginnt, ist das letzte Zeichen beim Index len(S)-1.

Hier ist ein Beispiel der Verwendung von len und [], den beiden Tools, die wir gerade eingeführt haben.

Beispiel: String length and characters

Strings ausschneiden: S[:]

Einen Teil eines Strings auszuschneiden ergibt einen Substring bzw. Teilstring. So sind zum Beispiel die Strings "eat" und "ted" Substrings von "repeated". Um einen Substring in Python auszuwählen, verwenden wir die Syntax:

S[firstIndex:tailIndex]
um den Substring am Index firstIndex beginnen zu lassen und ihn enden zu lassen bei tailIndex-1.  Versuche herauszufinden, was die Ausgabe des folgenden Codes ist, bevor du ihn ausführst.
Beispiel: Substrings

Beachte, dass beim Ausschneiden eines Substrings firstIndex einbegriffen ist, aber der tailIndex nicht. Dies ist eine häufige Fehlerquelle. Sie hat jedoch ein paar nette Auswirkungen. Zum Beispiel ist aufgrund dieser Wahl die Länge des Substrings S[i:j] immer j-i.

Programmierübung: Strings Rasieren
Schreibe ein Programm, das einen String liest, indem es input() verwendet, und den selben String ausgibt, aber mit dem Unterschied, dass das erste und letzte Zeichen gelöscht wird. (Du darfst annehmen, dass der Input String eine Mindestlänge von 2 hat.) Zum Beispiel, bei der Eingabe Fairy wird ein korrektes Program air ausgeben.
Du kannst die Eingabe für das Programm in die Box unten eingeben.

Strings einfügen: +

Wir wissen alle: 1+2=3. Mit Strings bekommen wir stattdessen das folgende Ergebnis:

Beispiel: String Addition

Wie du sehen kannst, erzeugt S+T einen neuen String, der mit  S beginnt, worauf direkt T folgt. Diese "String-Klebe-Operation" nennt man auch Verkettung oder Konkatenation.

Programmierübung: Heads and Tails
Schreibe ein Programm, das einen String liest, indem es input() verwendet und den gleichen String ausgibt, aber mit dem ersten und letzten Zeichen vertauscht. (Du darfst annehmen, dass der Input String eine Mindestlänge von 2 hat.) Zum Beispiel wird bei der Eingabe Fairy ein korrektes Programm yairF ausgeben. Tipp: Verwende deine Lösung aus der vorherigen Programmierübung: Strings Rasieren.
Du kannst die Eingabe für das Programm in die Box unten eingeben.

Wenn du Zahlen verketten möchtest, musst du sie zuerst zu str konvertieren. Sonst erhältst du einen von zwei Fehlern, je nachdem welche Reihenfolge du ausprobiert hast. Führe dieses Programm aus, um zu sehen, welche Fehler auftauchen können.
Beispiel
Arrangiere die Zeilen um, um zwei Verkettungsfehler zu sehen
  • print("high " + 5)
  • print(110 + " percent")
Hier ist ein korrektes Beispiel: die str() Funktion wandelt die Zahl zu einem String um vor der Verkettung.
Beispiel
Eine Zahl zu einem String umwandeln mithilfe von str()

Wie wir bereits in Lektion 4 erwähnt haben, kannst du Strings und Ganzzahlen multiplizieren: S * n ist kurz für S + S + ... + S.

Beispiel
String Multiplikation

Zeichencodes: ord, chr

Wie wir bereits in der Einleitung zu dieser Lektion erwähnten, stellt dein Computer tatsächlich jedes Zeichen als Zahl dar. Welche Zahl entspricht welchem Zeichen? Allgemein gesprochen ist es davon abhängig, welche Kodierung dein Computer verwendet, aber nahezu alle modernen Computer haben eine Standardmenge an Zeichen für die Zahlen zwischen 32 und 255. Hier ist eine Liste der Zeichen mit Zahlen zwischen  32 und 127:

ord: 32  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47
chr:      !   "   #   $   %   &   '   (   )   *   +   ,   -   .   /
ord: 48  49  50  51  52  53  54  55  56  57  58  59  60  61  62  63
chr:  0   1   2   3   4   5   6   7   8   9   :   ;   <   =   >   ?
ord: 64  65  66  67  68  69  70  71  72  73  74  75  76  77  78  79
chr:  @   A   B   C   D   E   F   G   H   I   J   K   L   M   N   O
ord: 80  81  82  83  84  85  86  87  88  89  90  91  92  93  94  95
chr:  P   Q   R   S   T   U   V   W   X   Y   Z   [   \   ]   ^   _
ord: 96  97  98  99  100 101 102 103 104 105 106 107 108 109 110 111
chr:  `   a   b   c   d   e   f   g   h   i   j   k   l   m   n   o
ord: 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
chr:  p   q   r   s   t   u   v   w   x   y   z   {   |   }   ~
Später in Lektion 8 wirst du ein Programm schreiben, das diese Tabelle erzeugt.
Es ist nicht nötig, die ganze Tabelle auswendig zu lernen, aber es gibt einige Fakten, die nützlich zu erinnern sind:

  • Die Kleinbuchstaben a, b, c, ..., z haben fortlaufende Zeichencodes.
  • Die Großbuchstaben A, B, C, ..., Z haben fortlaufende Zeichencodes.
  • Die Zahlen 0, 1, 2, ..., 9 haben fortlaufende Zeichencodes.

Zeichen 32 ist ein Leerzeichen, und Zeichen 127 ist eines von mehreren besonderen "Kontrollzeichen". Einige hilfreiche Kontrollzeichen sind 9, was tab ist, und 10 und 13, die für newlines verwendet werden.

In Python kannst du ein Zeichen in den ihm entsprechenden numerischen Code umwandeln, indem du die ord Funktion verwendest. Die chr Funktion macht das genaue Gegenteil: sie nimmt eine Zahl als Input und gibt das Zeichen mit diesem Code wieder aus.

Beispiel
Beispiele für ord und chr

Programmierübung: Next Letter
Schreibe ein Programm, das ein Zeichen als Input nimmt (ein String der Länge 1), von dem du annehmen solltest, das es ein Großbuchstabe ist. Ausgegeben werden sollte das nächste Zeichen im Alphabet. Wenn der Input 'Z' ist, sollte dein Output 'A' sein. (Du wirst ein if Statement benutzen müssen. Um einen weiteren Tipp zu erhalten, klicke hier.)
Du kannst die Eingabe für das Programm in die Box unten eingeben.

Einige Systeme unterstützen lediglich ausgebbare Zeichen zwischen 32 und 127, andere haben ausgebbare Zeichen bis zu 255 oder 65535; in Unicode gibt es hunderttausende Zeichen. Mehr darüber kannst du hier oder hier erfahren.

Es gibt zwei weitere Übungen zum Abschluss der Lektion.

Programmierübung: Pig Latin
Pig Latin ist eine Nonsenssprache. Um ein Wort aus dem Englischen zu Pig Latin zu transformieren, bewegt man den ersten Buchstaben an das Ende und fügt danach "ay" an. Zum Beispiel verwandelt sich monkey in onkeymay und word wird zu ordway. Schreibe ein Programm, das ein einzelnes Wort als Input nimmt und es in Pig Latin übersetzt. (Eigentlich sind die Regeln von Pig Latin komplizierter als wir es dargestellt haben, aber wir ignorieren diesen Umstand für diese Aufgabe.)
Du kannst die Eingabe für das Programm in die Box unten eingeben.

Programmierübung: The Name Game
Das Namensspiel erlaubt es dir, ein Lied aus dem Namen jeder Person zu machen. Hör dir das folgende Lied an, um zu verstehen, wie es funktioniert:
Dein Programm sollte den Namen einer Person als Input nehmen, zum Beispiel "Pearl" und das Lied folgendermaßen ausgeben

pearl, pearl, bo-bearl
banana-fana fo-fearl
fee-fi-mo-mearl
pearl!
Du siehst, dass der komplette Name dreimal auftaucht; zusätzlich erscheint der Name drei weitere Male, wobei der erste Buchstabe ausgetauscht wurde durch ein b, f oder m.. (Eigentlich sind die Regeln dieses Liedes komplizierter als wir es dargestellt haben, aber wir ignorieren diesen Umstand für diese Aufgabe.)
Du kannst die Eingabe für das Programm in die Box unten eingeben.

Du kannst dich nun der nächsten Lektion widmen!