Teil 4 - Elementare Datentypen II Zeichenketten (Strings)
Prof. Dr. Franziska Matthäus Giersch Professur Zelluläre
Bioinformatik Prof. Dr. Matthias Kaschube
Computational Neuroscience and Computational Vision
Dr. Karsten Tolle Direktor Big Data Lab
Modul Einführung in die Praktische Informatik (EPI)
Grundlagen der Programmierung (GPR)
Einführung in die Praktische Informatik (EPI)
Grundlagen der Programmierung
Teil 4
Elementare Datentypen - II Prof. Dr. Matthias Kaschube Prof. Dr. Franziska Matthäus Dr. Karsten Tolle
Teil 4 - Lernziel
§ Ziel ist es, den Datentyp String als Programmierer*in beherrschen zu lernen und seine Eigenarten kennen zu lernen.
§ Unicode kennen lernen. Eigenschaften und Nutzen!
§ Strings als ersten Sequenzdatentyp (iterierbar) kennen lernen und
§ den Umgang mit der Indexierung und dem Slicing bei Sequenztypen Wissen und Können ;-)
§ Weitere Escape-Sequenzen kennen lernen
§ … und allgemein die Nutzung von Strings kennen lernen.
Einführung in die Praktische Informatik (EPI)
Grundlagen der Programmierung
Teil 4
Elementare Datentypen - II Prof. Dr. Matthias Kaschube Prof. Dr. Franziska Matthäus Dr. Karsten Tolle
Was ist das: Zeichen – Text – Alphabet?
Einführung in die Praktische Informatik (EPI)
Grundlagen der Programmierung
Teil 4
Elementare Datentypen - II Prof. Dr. Matthias Kaschube Prof. Dr. Franziska Matthäus Dr. Karsten Tolle
Der Begriff Text
Text = geschriebene Sprache (im engeren Sinne) kommt aus dem Lateinischen. textus =
• Gewebe
• Geflecht
• Stoff
Einführung in die Praktische Informatik (EPI)
Grundlagen der Programmierung
Teil 4
Elementare Datentypen - II Prof. Dr. Matthias Kaschube Prof. Dr. Franziska Matthäus Dr. Karsten Tolle
Funktionale Verbindung zwischen Gewebe und Text
linear-temporäre Aneinanderreihung von Zeichen und Worten, wird mental in eine semantische Netzwerkrepräsentation transformiert
è Text „verstrickt“ und „verflechtet“ Objekte, Akteure und Handlungen miteinander,
Text Semantisches
Netzwerk
Einführung in die Praktische Informatik (EPI)
Grundlagen der Programmierung
Teil 4
Elementare Datentypen - II Prof. Dr. Matthias Kaschube Prof. Dr. Franziska Matthäus Dr. Karsten Tolle
Die Darstellung des Textes
benötigt eine Schrift, deren Zeichen wahlweise
• Phoneme (≈Laute)
• Silben
• Wörter bzw. Begriffe kodieren.
Einführung in die Praktische Informatik (EPI)
Grundlagen der Programmierung
Teil 4
Elementare Datentypen - II Prof. Dr. Matthias Kaschube Prof. Dr. Franziska Matthäus Dr. Karsten Tolle
Alphabetschrift
Alphabet (von gr. αλφάβητο [alfáwito] - Alpha & Beta)
Beispiele:
• Lateinische Schriften: Den småne skriften
• IPA-Lautschrift: [alfáwito]
• Kyrillisch: Ду бист кайн Весси!
• Griechische Schrift:
αλφάβητο
Einführung in die Praktische Informatik (EPI)
Grundlagen der Programmierung
Teil 4
Elementare Datentypen - II Prof. Dr. Matthias Kaschube Prof. Dr. Franziska Matthäus Dr. Karsten Tolle
Wortbildschrift, Logogrammschrift
Beispiele:
Hanzi (chinesisch) Hanja (koreanisch) Maja-Schrift
Jurjen Tangut
Einführung in die Praktische Informatik (EPI)
Grundlagen der Programmierung
Teil 4
Elementare Datentypen - II Prof. Dr. Matthias Kaschube Prof. Dr. Franziska Matthäus Dr. Karsten Tolle
Sonderformen / Logogramme als Zeichen
• Ziffernschrift arabisch 0 1 2 3 .. 9 römisch I II III IV …
• Symbolik der Mathematik oder der Chemie
• Piktogramme
• Emojis &
• Emoticons
𝜕𝑢
𝜕𝑡 = ∇!𝑢
Einführung in die Praktische Informatik (EPI)
Grundlagen der Programmierung
Teil 4
Elementare Datentypen - II Prof. Dr. Matthias Kaschube Prof. Dr. Franziska Matthäus Dr. Karsten Tolle
Begriff: Alphabet in der Informatik
Alphabet: ist in der Informatik weiter gefasst als in der Lingustik:
Unter Alphabet versteht man (z.B. nach DIN 44300) eine (i.d.R.
nichtleere) total geordnete endliche Menge von unterscheidbaren Symbolen (Zeichen).
Wird häufig symbolisiert durch Σ (großes Sigma).
Einführung in die Praktische Informatik (EPI)
Grundlagen der Programmierung
Teil 4
Elementare Datentypen - II Prof. Dr. Matthias Kaschube Prof. Dr. Franziska Matthäus Dr. Karsten Tolle
Begriff: Zeichenreihe oder Zeichenkette
Zeichenreihe (Zeichenkette) = endliche lineare Reihe von Zeichen aus einem Alphabet Σ .
Übrigens: Auch die Zeichenreihe, die keine Zeichen enthält, ist ein Wort - das leere Wort. Es wird oft mit ε bezeichnet.
Einführung in die Praktische Informatik (EPI)
Grundlagen der Programmierung
Teil 4
Elementare Datentypen - II Prof. Dr. Matthias Kaschube Prof. Dr. Franziska Matthäus Dr. Karsten Tolle
Zusammenfassung
§ Strings sind Zeichenketten, bestehen aus Zeichen aus einem Alphabet.
§ Schriften werden genutzt, um Zeichen, Laute, Silben oder Wörter zu repräsentieren.
§ Es gibt viele verschiedene Schriften.
Einführung in die Praktische Informatik (EPI)
Grundlagen der Programmierung
Teil 4
Elementare Datentypen - II Prof. Dr. Matthias Kaschube Prof. Dr. Franziska Matthäus Dr. Karsten Tolle
Wichtige Zeichensätze: ASCII, ISO/IEC 8859, Unicode
Einführung in die Praktische Informatik (EPI)
Grundlagen der Programmierung
Teil 4
Elementare Datentypen - II Prof. Dr. Matthias Kaschube Prof. Dr. Franziska Matthäus Dr. Karsten Tolle
Begriff: Zeichensatz (character set)
Zeichensatz:
Die Zuordnung von alphanumerischen Zeichen (Buchstaben und Ziffern) sowie Sonderzeichen und Symbolen zu einem Zahlencode (oder Binärvektor).
§ = Menge der verfügbaren Zeichen
§ kann (muss aber nicht) aus einem Alphabet kommen.
§ Achtung unterschiedliche Definitionen: „Ein Zeichensatz ist weniger als ein Zeichencode, der zusätzlich noch eine definierte Abbildung eines Zeichens auf einen Binärvektor/Natürliche Zahl benötigt."
Beispiele:
§ ASCII (traditionell bis heute sehr häufig verwendet)
= American Standard Code for Information Interchange.
Einführung in die Praktische Informatik (EPI)
Grundlagen der Programmierung
Teil 4
Elementare Datentypen - II Prof. Dr. Matthias Kaschube Prof. Dr. Franziska Matthäus Dr. Karsten Tolle
Internationale Zeichensätze
ASCII
American
Standard Code for Information Interchange
Einer der ältesten Computer-
Zeichensätze – 7 Bit Code 1963 Sehr weit verbreitet, (Basis für Programmier- sprachen,
Internet-Adressen, etc.)
ISO/IEC 8859 15 verschiedenen
Kodierungen zur Abdeckung europäischer Sprachen sowie Arabisch, Hebräisch,
Thailändisch und Türkisch 8 Bit Code
1986 u.a. in Linux und MS Windows verwendet.
Unicode ISO/IEC
10646 – 1991 Internationaler Standard –
(7) 8, 16 oder 32 Bit 1991 Ist heute die dominierende Repräsentation
Einführung in die Praktische Informatik (EPI)
Grundlagen der Programmierung
Teil 4
Elementare Datentypen - II Prof. Dr. Matthias Kaschube Prof. Dr. Franziska Matthäus Dr. Karsten Tolle
-1 Latin-1 Westeuropäisch
-2 Latin-2 Osteuropäisch
-3 Latin-3 Südeuropäisch
-4 Latin-4 Baltisch
-5 Kyrillisch
-6 Arabisch
-7 Griechisch
-8 Hebräisch
-9 Latin-5 Türkisch
-10 Latin-6 Nordisch
-11 Thai
-13 Latin-7 Baltisch
-14 Latin-8 Keltisch
-15 Latin-9 Westeuropäisch
-16 Latin-10 Südosteuropäisch
Veränderung an 8 Positionen (u.a. €-Zeichen)
ISO IEC 8859 (fast nur noch historisch bedeutsam!)
8 Bit Code (Latin-9 mit Umlauten)
Einführung in die Praktische Informatik (EPI)
Grundlagen der Programmierung
Teil 4
Elementare Datentypen - II Prof. Dr. Matthias Kaschube Prof. Dr. Franziska Matthäus Dr. Karsten Tolle
ASCII-Anekdote
Startbildschirm des Apple II (1983) Bei aktiviertem deutschen Zeichensatz zeigte er das eher komische „APPLE ÜÄ ;-) oder nordisch (links).
Beim Übergang von ASCII (keine diakri- tischen Zeichen) zum ISO 646-IRV.
Einführung in die Praktische Informatik (EPI)
Grundlagen der Programmierung
Teil 4
Elementare Datentypen - II Prof. Dr. Matthias Kaschube Prof. Dr. Franziska Matthäus Dr. Karsten Tolle
Unicode (1)
Internationale Norm (privates Konsortium und ISO/IEC), aktuell ist Version 14
§ Identisch mit Universal Character Set (UCS nach ISO 10646)
§ Ziel: Langfristig soll für jedes sinntragende „Schriftzeichen“ oder
„Textelement“ (Symbole, Emoticons, …) aller bekannten Schriftkulturen und Zeichensysteme ein digitaler Code festgelegt werden.
§ Es werden nur „abstrakte Zeichen“ (characters) kodiert, nicht dagegen die grafische Darstellung (Glyphen)
§ Unicode wird ständig um weitere Zeichen ergänzt, gepflegt und gewartet.
Einführung in die Praktische Informatik (EPI)
Grundlagen der Programmierung
Teil 4
Elementare Datentypen - II Prof. Dr. Matthias Kaschube Prof. Dr. Franziska Matthäus Dr. Karsten Tolle
Unicode – Das Konzept zur Codierung
1. Schritt: Jedem Unicode-Zeichen wird eineindeutig ein sogenannter Codepunkt (engl. code point) zugeordnet.
§ der Coderaum des Unicode-Zeichensatzes umfasst dezimal 0 –1.114.111 (hexadezimal: 0 –10FFFF).
§ Dies sind 17 sogenannten „Ebenen“ à je 65536 codepoints
§ Von diesen gut 1 Mio code points sind aktuell nur etwas mehr als 100.000 genutzt.
§ Benannt werden diese Codepunkte üblicherweise durch ihren Hexcode, teils mit dem Präfix U+, jedes Zeichen hat aber auch einen Namen mit dem sich darauf zugreifen lässt
Siehe: unicode.org/charts/ oder unicode-table.com
Einführung in die Praktische Informatik (EPI)
Grundlagen der Programmierung
Teil 4
Elementare Datentypen - II Prof. Dr. Matthias Kaschube Prof. Dr. Franziska Matthäus Dr. Karsten Tolle
Unicode – Das Konzept zur Codierung
2. Schritt: Mit Hilfe eines Unicode Transformation Formats (UTF) werden Unicode-Zeichen auf Folgen von Bytes abgebildet.
Es gibt sehr viele Encodings. Üblich sind:
§ UTF-8 kodiert Zeichen mit variabler Byte-Anzahl (1-4 Bytes). Die Codepoints 0 bis 127, die dem ASCII-Zeichensatz entsprechen, werden in einem Byte kodiert.
§ UTF-16 ist das älteste Kodierungsverfahren, bei dem ein oder zwei 16-Bit- Einheiten (2 oder 4 Bytes) verwendet werden. ACHTUNG: Bytereihenfolge beachten: UTF-32BE und UTF-32LE
§ UTF-32 kodiert ein Zeichen immer in genau 32 Bit.
Auch hier Byte-Reihenfolge beachten.
Einführung in die Praktische Informatik (EPI)
Grundlagen der Programmierung
Teil 4
Elementare Datentypen - II Prof. Dr. Matthias Kaschube Prof. Dr. Franziska Matthäus Dr. Karsten Tolle
Erste Programmiererfahrungen mit String:
Literale und Operatoren
Einführung in die Praktische Informatik (EPI)
Grundlagen der Programmierung
Teil 4
Elementare Datentypen - II Prof. Dr. Matthias Kaschube Prof. Dr. Franziska Matthäus Dr. Karsten Tolle
Zeichenketten in Python
Python implementierte in der Version 2.X zwei verschiedene Basis-Typen für Zeichenketten (strings):
§ strings (8-Bit, ein Oktett, ein Byte)
§ Unicode-Strings (variable Codelänge von 8-32 Bits)
Ab Python Version 3.0 gibt es nur noch Strings
(UTF-8 kodiert variable Codelänge von 8-32 Bits, intern 16/32 Bit)
§ Python kennt den Datentyp eines Zeichens (Character) nicht: Ein einzelnes Zeichen, z.B. “a“ wird als ein-elementiger String repräsentiert.
§ Auch Python-Programme werden im Default in UTF-8 kodiert!
(Erlaubt sind aber nur sehr wenige Zeichen außer in Strings.)
Einführung in die Praktische Informatik (EPI)
Grundlagen der Programmierung
Teil 4
Elementare Datentypen - II Prof. Dr. Matthias Kaschube Prof. Dr. Franziska Matthäus Dr. Karsten Tolle
String-Literale in Python
§ Zeichenketten (als Daten) werden in (obenstehenden) “Anführungs- zeichen“ geschrieben, gleichgültig ob einfache ʹ oder doppelte ".
§ Hier erlebt wohl jede Programmierer*in einmal Überraschungen, weil es ein Chaos an Zeigen gibt, die Anführungszeichen ähnlich sind
§ Der Python Interpreter akzeptiert nur
Gedrucktes
Zeichen Unicode Name Unicode Codepoint
' Apostrophe 0x0027 = 39
" Quotation Mark 0x0022 = 34
Die Python Syntax Sagt schlicht
single quote (') or double quote (") --
„Anführungszeichen“
Einführung in die Praktische Informatik (EPI)
Grundlagen der Programmierung
Teil 4
Elementare Datentypen - II Prof. Dr. Matthias Kaschube Prof. Dr. Franziska Matthäus Dr. Karsten Tolle
Welches „Chaos“ genau?
Typografisch korrektes (grün) und gerades (rot) Apostroph sowie Minutenzeichen (Prime, blau), I, i mit Akut-Akzent.
Es gibt noch diverse weitere Varianten, siehe z.B. in der Wikipedia:
de.wikipedia.org/wiki/Apostroph oder de.wikipedia.org/wiki/Anführungszeichen
Die Programmiersprachen-Editoren (z.B. Idle) machen das natürlich immer richtig, aber wenn man Code aus Word, PowerPoint, o.ä.
Programme übernimmt, dann kommt es i.d.R. zu Problemen.
Arial Calibri Tahoma Times Linux New Roman Libertine
aus:
de.wikipedia.org/wiki/Apostroph:
Einführung in die Praktische Informatik (EPI)
Grundlagen der Programmierung
Teil 4
Elementare Datentypen - II Prof. Dr. Matthias Kaschube Prof. Dr. Franziska Matthäus Dr. Karsten Tolle
String-Literale
1.'…' Standard
2."…" nimmt man, wenn 'im String vorkommt
3.'''…''' der String darf mehrzeilig sein
4."""…"""
Immer nur als Paar nutzen! - '…" ist unzulässig … erlaubt ist aber:
"hello" ' world'. Das ist äquivalent zu "hello world"
Zwischen den „Anführungszeichen“ können alle Unicode-Zeichen stehen
§ Eingabe durch die Tastatur, auch ß, ö, … Einschränkung:
Der Backslash \ (Rückstrich, umgekehrter Schrägstrich, …) hat eine besondere Bedeutung. Er wird benutzt um
§ bestimmte Steuerzeichen durch eine ESCAPE-Sequenz darzustellen
§ um Unicode Codepunkte einzugeben (damit beliebige Zeichen)
§ als Fluchtsymbol (Markierungssymbol) um diese spezielle Bedeutung abzustellen (dieser zu entfliehen): ' " / newline
Einführung in die Praktische Informatik (EPI)
Grundlagen der Programmierung
Teil 4
Elementare Datentypen - II Prof. Dr. Matthias Kaschube Prof. Dr. Franziska Matthäus Dr. Karsten Tolle
Escape-Sequenzen als „Ersatz“ für „Steuerzeichen“
Escape
Sequence Meaning Bedeutung wie
\a ASCII Bell (BEL) (Tonsignal) \x07
\b ASCII Backspace (BS) (Rückschritt) \x08
\f ASCII Formfeed (FF) (Seitenvorschub) \x0C
\n ASCII Linefeed (LF) (Zeilenvorschub) \x0A
\r ASCII Carriage Return (CR)
(Wagenrücklauf) \x0D
\t ASCII Horizontal Tab (TAB)
(Horizontales Tabulatorzeichen) \x09
\v ASCII Vertical Tab (VT)
(VertikalesTabulatorzeichen) \x0B
Einführung in die Praktische Informatik (EPI)
Grundlagen der Programmierung
Teil 4
Elementare Datentypen - II Prof. Dr. Matthias Kaschube Prof. Dr. Franziska Matthäus Dr. Karsten Tolle
Unicode Escape- (=Flucht) Sequenzen
Escape
Sequence Meaning Notes
\N{name} Character name in the Unicode database 1)
\uxxxx Character with 16-bit hex value xxxx exakt 4 Hex
\Uxxxxxxxx Character with 32-bit hex value xxxxxxxx exakt 8 Hex
\ooo Character with octal value ooo exakt 3 Oct
\xhh Character with hex value hh exakt 2 Hex
1) Siehe z.B. http://unicode.org/Public/UNIDATA/NamesList.txt Achtung: Es kann sein, dass Sie ein gültiges Unicode Zeichen
eingegeben haben, Sie es aber trotzdem nicht drucken können, weil es dieses Zeichen in den ausgewählten Schriften (Fonts) nicht gibt.
Einführung in die Praktische Informatik (EPI)
Grundlagen der Programmierung
Teil 4
Elementare Datentypen - II Prof. Dr. Matthias Kaschube Prof. Dr. Franziska Matthäus Dr. Karsten Tolle
Weitere zulässige Escape (echte) Flucht-Sequenzen
Escape Sequence Meaning
\newline Backslash and newline ignored 1)
\\ Backslash (\)
\' Single quote (')
\" Double quote (")
1) Mit newline ist hier eine „neue Zeile“ gemeint, die regulär durch die Return-Taste eigegeben wird. Genau dieses wird hier ignoriert!
Ist nötig, weil newline \ ' und \" besondere Bedeutungen haben.
Einführung in die Praktische Informatik (EPI)
Grundlagen der Programmierung
Teil 4
Elementare Datentypen - II Prof. Dr. Matthias Kaschube Prof. Dr. Franziska Matthäus Dr. Karsten Tolle
Beispiele
>>> 'Hallo\nLeute' # A regular string with escape \n.
'Hallo\nLeute'
>>> print ('Hallo\nLeute') # print puts a „line feed“.
Hallo Leute
>>> print ('Hallo\\nLeute') Hallo\nLeute
Einführung in die Praktische Informatik (EPI)
Grundlagen der Programmierung
Teil 4
Elementare Datentypen - II Prof. Dr. Matthias Kaschube Prof. Dr. Franziska Matthäus Dr. Karsten Tolle
Spezielle String-Typen
§ String-Literale können mit den die Präfixe ‚r‘ oder ‚R‘ ausgestattet werden und sind dann Raw-Strings.
§ Hier haben Backslashes keine ausgezeichnete Bedeutung. Es gibt kein Fluchtsymbol! Der \ wird also wie normales Zeichen behandelt.
§ Ausnahme: \' ist ein Escape-Symbol für raw strings, raw strings können daher keinen einzelnen Backslash darstellen, auch keine ungerade Anzahl an Backslashes..
Einführung in die Praktische Informatik (EPI)
Grundlagen der Programmierung
Teil 4
Elementare Datentypen - II Prof. Dr. Matthias Kaschube Prof. Dr. Franziska Matthäus Dr. Karsten Tolle
Beispiele
>>> r'Hallo\nLeute' # the same string as raw string, notice \\
'Hallo\\nLeute'
>>> print (r'Hallo\nLeute') # in a print statement Hallo\nLeute
>>> type (r'Hallo\nLeute') # stored as a regular string
<class 'str'>
>>> r' \' ' # two characters '\\"'
>>> r'\' # not a valid string literal
SyntaxError: EOL while scanning string literal
Einführung in die Praktische Informatik (EPI)
Grundlagen der Programmierung
Teil 4
Elementare Datentypen - II Prof. Dr. Matthias Kaschube Prof. Dr. Franziska Matthäus Dr. Karsten Tolle
String Operatoren
Die Operatoren + und * haben für Strings S, T eine besondere Bedeutung S + T: Konkatenation (Verkettung, Hintereinanderfügen der Operanden) n * S; S * n: Wiederholung (n ist Integer)
>>> a = 'tic-'
>>> b = 'toc, '
>>> a + b 'tic-toc, '
>>> c = a + b
>>> c * 3
'tic-toc, tic-toc, tic-toc, '
>>> 3 * c
'tic-toc, tic-toc, tic-toc, '
Einführung in die Praktische Informatik (EPI)
Grundlagen der Programmierung
Teil 4
Elementare Datentypen - II Prof. Dr. Matthias Kaschube Prof. Dr. Franziska Matthäus Dr. Karsten Tolle
Vergleichsoperatoren für Strings (1)
Die Vergleichsoperatoren
x > y, x >= y, x == y, x is y (Objekt-Identität) x < y, x <= y, x != y x is not y
funktionieren auch für Strings.
Achtung: <, >, <=, >= ordnen die Zeichen (einschließlich Ziffern, Leerzeichen,
Satz- und Sonderzeichen) nach dem Zahlenwert der dem Codepoint im Unicode entspricht, d.h.
§ alle lateinischen Großbuchstaben werden vor dem kleinen „a“ eingeordnet
§ Ö,ö,Ü,ü,Ä,ä,ß stehen dagegen ganz hinten.
Einführung in die Praktische Informatik (EPI)
Grundlagen der Programmierung
Teil 4
Elementare Datentypen - II Prof. Dr. Matthias Kaschube Prof. Dr. Franziska Matthäus Dr. Karsten Tolle
Vergleichsoperatoren für Strings (2)
§ Ansonsten wird lexikographisch verglichen, d.h. die Strings werden zunächst nach ihren Anfangsbuchstaben verglichen,
§ dann bei gleichen Anfangsbuchstaben nach dem jeweils zweiten Buchstaben, usw.
§ Ist ein Wort ganz in einem anderen als Anfangsteil enthalten (wie beispielsweise „kann“ in „kannst“), so ist das kürzere Wort kleiner.
Einführung in die Praktische Informatik (EPI)
Grundlagen der Programmierung
Teil 4
Elementare Datentypen - II Prof. Dr. Matthias Kaschube Prof. Dr. Franziska Matthäus Dr. Karsten Tolle
Zusammenfassung
§ Strings als Literal werden in einfache, oder dreifache Anführungszeichen eingebettet, die paarweise zu nutzen sind.
§ \ ist das Fluchtsymbol (Escape Sequence), welches es erlaubt, beliebige Unicode-Zeichen einzufügen oder auch Sonderzeichen des ASCII-
Zeichensatzes.
§ R oder r vor dem Quote erlaubt es, als Literale sogenannte Raw Strings zu benutzen: Dort hat \ keine Wirkung, sondern wird als Zeichen genommen.
Gedrucktes
Zeichen Unicode Name Code Point Python Phrase ' Apostrophe 0x0027 = 39 Single Quote
" Quotation Mark 0x0022 = 34 Double Quote
Einführung in die Praktische Informatik (EPI)
Grundlagen der Programmierung
Teil 4
Elementare Datentypen - II Prof. Dr. Matthias Kaschube Prof. Dr. Franziska Matthäus Dr. Karsten Tolle
Indexierung und Slicing bei Sequenztypen
Einführung in die Praktische Informatik (EPI)
Grundlagen der Programmierung
Teil 4
Elementare Datentypen - II Prof. Dr. Matthias Kaschube Prof. Dr. Franziska Matthäus Dr. Karsten Tolle
Indexierung
Konzeptionelles Modell des Strings: Zeichen stehen in „Zellen“. Diese Zellen sind nummeriert. Jedes Zeichen ist unter seinem eigenen Index i zugreifbar: S[i] in eckigen Klammern.
Index 0 1 2 3 4 5 6 7 8 9 10 11 12
Wert E P R i s t t o l l
Negativer
Index -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1
>>> S = 'EPR ist toll'
>>> S[0]
'E'>>> S[-4]
't' >>> len('EPR ist toll')
12
Auch negative Indexwerte sind erlaubt.
Zu negativen Indexwerten werden len(S) hinzuaddiert.
Einführung in die Praktische Informatik (EPI)
Grundlagen der Programmierung
Teil 4
Elementare Datentypen - II Prof. Dr. Matthias Kaschube Prof. Dr. Franziska Matthäus Dr. Karsten Tolle
Slicing (= Teilbereichbildung)
§ Extrahiert zusammenhängende (Zellen-)bereiche.
§ Regel: S[i:j] S[i] ist das erste Element im Teilbereich S[j-1] ist das letzte Element im Teilbereich
§ S[1:5] geht von 1 bis 4 (ausschließlich 5)
§ Bereichsgrenzen sind mit 0 und der Sequenzlänge len(String)vorbelegt
§ S[1:] geht von Index 1 bis zum letzten Element
§ S[:-1] nimmt alles mit Ausnahme des letzten Elements
§ S[:] erzeugt eine Kopie von S (S sei ein String)
Index 0 1 2 3 4 5 6 7 8 9 10 11 12
Wert E P R i s t t o l l
Index -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1
Einführung in die Praktische Informatik (EPI)
Grundlagen der Programmierung
Teil 4
Elementare Datentypen - II Prof. Dr. Matthias Kaschube Prof. Dr. Franziska Matthäus Dr. Karsten Tolle
Slicing (= Teilbereichbildung)
Index 0 1 2 3 4 5 6 7 8 9 10 11 12
Wert E P R i s t t o l l
Index -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1
>>> S = 'EPR ist toll'
>>> S[1:5]
'PR i'
>>> S[1:]
'PR ist toll'
>>> S[:-3]
'EPR ist t'
>>> S[:]
'EPR ist toll'
Einführung in die Praktische Informatik (EPI)
Grundlagen der Programmierung
Teil 4
Elementare Datentypen - II Prof. Dr. Matthias Kaschube Prof. Dr. Franziska Matthäus Dr. Karsten Tolle
Indizes und Slicing-Indizes außerhalb der „Feldgrenzen“
Indexwerte außerhalb des Werte-bereichs [0,11] oder [-12,-1] führen zu einem “IndexError“.
Anders beim Slicing, dort werden die mit roten Pfeilen markierten Indexwerte auf ± len(S) „gecasted“
Index 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
Wert E P R i s t t o l l
Index -14 -13 -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1
>>> S[-12]
'E'
>>> S[-13]
Traceback (most recent call last):
File "<pyshell#204>", line 1, in … IndexError: string index out of range
>>> S[9:14]
'oll'
>>> S[-9:-12]
''
>>> S[-14:3]
'EPR'
Einführung in die Praktische Informatik (EPI)
Grundlagen der Programmierung
Teil 4
Elementare Datentypen - II Prof. Dr. Matthias Kaschube Prof. Dr. Franziska Matthäus Dr. Karsten Tolle
Slicing-Indizes mit strides (Schritten)
Erweiterte Teilbereichsbildung S[i:j:k]
Das dritte Element k in S[i,j,k] gibt den <stride> („Schritt“) an (Erhöhung / Erniedrigung des Index, bisher war das +1):
§ Als erstes werden die zu großen j oder zu kleinen i auf die zulässigen Werte gecasted, dann in positive Werte gemäß der Grafik gewandelt, ergibt m ≥ 0, n ≤ len(S)
§ wenn <stride> > 0: Ergebnis: S [m] bis S [n] mit <stride> Schritten; S [n]
gehört nicht zum Slice; wenn m ≥ n ist das Ergebnis der leere String;
§ wenn <stride> < 0: Ergebnis S [n] bis S [m]; S [m] gehört nicht zum Slice; wenn m ≤ n ist das Ergebnis der leere String.
Einführung in die Praktische Informatik (EPI)
Grundlagen der Programmierung
Teil 4
Elementare Datentypen - II Prof. Dr. Matthias Kaschube Prof. Dr. Franziska Matthäus Dr. Karsten Tolle
Beispiele zur erweiterte Teilbereichsbildung S[i:j:k]
wenn <stride> = 0: ,ValueError: slice step cannot be zero’
Index 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
Wert E P R i s t t o l l
Index -14 -13 -12 -
11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1
>>> S[::2]
'ERittl'
>>> S[6:0:-1]
'tsi RP'
>>> S[6::-1]
'tsi RPE'
>>> S[0:6:-1]
''
>>> S[6:6:-1]
''
>>> S[-6:-12:-1]
'tsi RP'
Einführung in die Praktische Informatik (EPI)
Grundlagen der Programmierung
Teil 4
Elementare Datentypen - II Prof. Dr. Matthias Kaschube Prof. Dr. Franziska Matthäus Dr. Karsten Tolle
Beispiele: Erweiterte Teilbereichsbildung S[i:j:k]
S[::2] von Anfang bis Ende jedes zweite Element S[::-1] ergibt die Umkehrung der Sequenz S
S[0:12:-1] ergibt den leeren String
S[15:0:-1] ergibt die Umkehrung der Sequenz, bis auf S[0} gehört nicht dazu S[4::-2) holt jedes zweite Element von rechts nach links ab Position 4 bis 0 S[-4:-12:-2] = 'ttiR'
Einführung in die Praktische Informatik (EPI)
Grundlagen der Programmierung
Teil 4
Elementare Datentypen - II Prof. Dr. Matthias Kaschube Prof. Dr. Franziska Matthäus Dr. Karsten Tolle
Iterables
§ In Python ist ein String-Objekt ein Iterable.
§ Jedes iterable (iterierbare Objekt) ist in der Lage, ein Mitglied (member) nach dem anderen in einer „for-each-Schleife“ bereit zu stellen.
§ Beispiel:
ham = 'Test' for i in ham:
print(i)
======= RESTART =======
T e s t
>>>
Übrigens: Strings sind nicht die einzigen Iterables:
Listen, Tuple, Set, Dictionarys, … sind auch iterables!
Einführung in die Praktische Informatik (EPI)
Grundlagen der Programmierung
Teil 4
Elementare Datentypen - II Prof. Dr. Matthias Kaschube Prof. Dr. Franziska Matthäus Dr. Karsten Tolle
Zusammenfassung
§ Wie für jeden iterierbaren Datentyp ist beim String ein indexierter Zugriff (gekennzeichnet durch s[i]) möglich.
§ Indizes können auch negativ sein: Dann errechnet sich der natürliche Indexwert aus negativen Index + length(string).
§ Andere Indexwerte außerhalb des genutzten Bereichs erzeugen einen Indexfehler.
§ Durch Slicing können Teilbereiche des Strings s erzeugt werden.
Regel: S[i : j : k] S[i] ist das erste Element im Teilbereich S[j-1] ist das letzte Element im Teilbereich k gibt den stride („Schritt“) an.
§ Beim Slicing sind Indexwerte außerhalb des gültigen Bereichs erlaubt. Diese werden auf das jeweilige „Ende“ gecastet.
Einführung in die Praktische Informatik (EPI)
Grundlagen der Programmierung
Teil 4
Elementare Datentypen - II Prof. Dr. Matthias Kaschube Prof. Dr. Franziska Matthäus Dr. Karsten Tolle
String-Funktionen und String-Methoden
Einführung in die Praktische Informatik (EPI)
Grundlagen der Programmierung
Teil 4
Elementare Datentypen - II Prof. Dr. Matthias Kaschube Prof. Dr. Franziska Matthäus Dr. Karsten Tolle
Funktionen
Wir kennen bisher erst wenige Funktionen
sie liefern entweder einen Wert und können damit an jeder Stelle stehen, wo eine Variable stehen kann, z.B. len(s) oder
sie lösen ein bestimmtes Verhalten (eine Operation oder Funktion) aus, z.B. print(s)
Schreibweise: funktionsname(x, y, …), z.B. len(s)
Einführung in die Praktische Informatik (EPI)
Grundlagen der Programmierung
Teil 4
Elementare Datentypen - II Prof. Dr. Matthias Kaschube Prof. Dr. Franziska Matthäus Dr. Karsten Tolle
Einige spezielle Funktionen für Strings (1)
chr(i) (character)
liefert die String Repräsentation des Characters dessen Unicode code point der Integer i ist.
Beispiele:
chr(97) liefert den String 'a', chr(8364)liefert den String '€'.
Gültiges Intervall für das Argument ist 0 bis 1,114,111 (0x10FFFF).
ValueError wird ausgegeben für i ausserhalb dieses Intervalls.
ord(c) (ordinal)
Für einen String c der einen
Unicode Character repräsentiert, ergibt ord(c) den Integer der den Unicode code point dieses
Zeichens repräsentiert.
Beispiele:
ord('a')ergibt 97, und ord('€') ergibt 8364.
ord(c) ist somit die
Umkehrung von chr(i).
Einführung in die Praktische Informatik (EPI)
Grundlagen der Programmierung
Teil 4
Elementare Datentypen - II Prof. Dr. Matthias Kaschube Prof. Dr. Franziska Matthäus Dr. Karsten Tolle
Einige spezielle Funktionen für Strings (2)
eval(expression[, globals[, locals]])
Haben wir schon genutzt, lesen Sie bitte die Beschreibung nach!
exec(object[, globals[, locals]])
Unterstützt die dynamische Ausführung von Python code.
format(value[, format_spec])
Konvertiert einen Wert (value) in eine “formatierte” Repräsentation, je nach Format (format_spec).
Dies schauen wir uns später noch an!
Viele weitere der built in-Funktionen sind auch für String-Objekte nutzbar. Verschaffen Sie sich einen Überblick
https://docs.python.org/3/library/functions.html.
Einführung in die Praktische Informatik (EPI)
Grundlagen der Programmierung
Teil 4
Elementare Datentypen - II Prof. Dr. Matthias Kaschube Prof. Dr. Franziska Matthäus Dr. Karsten Tolle
Attribut-(Punkt-)schreibweise für Methoden
§ Python ist im Kern eine objektorientierte Programmiersprache. In diesem Kontext nennt man Funktionen Methoden.
§ Methoden werden mit der Attribut-(Punkt-)schreibweise aktiviert:
s.Methodenname(); s ist eine Variable/ein Objekt
§ Dies sind (zunächst) einmal „nur“ unterschiedliche Schreibweisen desselben:
§ Anstelle von <function_name>(x, y, z) schreibt man x.<methode_name>(y, z).
§ String-Methoden bieten vielfältige Möglichkeiten zur
Textbearbeitung. Insgesamt ca. 45 String Methoden u.a. zum Suchen, zum Aufteilen und Zusammenfügen, zum Formatieren usw. und ca. 25 String Funktionen.
Einführung in die Praktische Informatik (EPI)
Grundlagen der Programmierung
Teil 4
Elementare Datentypen - II Prof. Dr. Matthias Kaschube Prof. Dr. Franziska Matthäus Dr. Karsten Tolle
String Methoden (1)
Method Description
s.capitalize() Converts first character to Capital Letter
s.casefold() converts to casefolded strings
s.center() Pads string with specified character s.count() returns occurrences of substring in
string
s.endswith() Checks if String Ends with the Specified Suffix
s.xpandtabs() Replaces Tab character With Spaces s.encode() returns encoded string of given string s.find() Returns the index of first occurrence of
substring
s.format() formats string into nicer output s.index() Returns Index of Substring s.isalnum() Checks Alphanumeric Character
s.isalpha() Checks if All Characters are Alphabets s.isdigit() Checks Digit Characters
s.isidentifier() Checks for Valid Identifier
s.islower() Checks if all Alphabets in a String are Lowercase
s.isnumeric() Checks Numeric Characters s.isprintable() Checks Printable Character
Method Description
s.isspace() Checks Whitespace Characters s.istitle() Checks for Titlecased String s.isupper() returns if all characters are
uppercase characters
s.join() Returns a Concatenated String s.ljust() returns left-justified string of given
width
s.rjust() returns right-justified string of given width
s.lower() returns lowercased string s.upper() returns uppercased string s.swapcase() swap uppercase characters to
lowercase; vice versa
s.lstrip() Removes Leading Characters s.rstrip() Removes Trailing Characters
s.strip() Removes Both Leading and Trailing Characters
s.partition() Returns a Tuple
s.maketrans() returns a translation table s.rpartition() Returns a Tuple
s.translate() returns mapped charactered string s.replace() Replaces Substring Inside
Einführung in die Praktische Informatik (EPI)
Grundlagen der Programmierung
Teil 4
Elementare Datentypen - II Prof. Dr. Matthias Kaschube Prof. Dr. Franziska Matthäus Dr. Karsten Tolle
String Funktionen
Method Description
any() Checks if any Element of an Iterable is True
all() returns true when all elements in iterable is true
ascii() Returns String Containing Printable Representation
bool() Converts a Value to Boolean
bytearray() returns array of given byte size
bytes() returns immutable bytes object
compile() Returns a s.code object
complex() Creates a Complex Number
enumerate() Returns an Enumerate Object
filter() constructs iterator from elements which are true
float() returns floating point number from number, string
input() reads and returns a line of string
int() returns integer from a number or string
iter() returns iterator for an object
len() Returns Length of an Object
max() returns largest element
Method Description min() returns smallest element
map() Applies Function and Returns a List
ord() returns Unicode code point for Unicode character
reversed() returns reversed iterator of a sequence
slice() creates a slice object specified by range()
sorted() returns sorted list from a given iterable
sum() Add items of an Iterable
zip() Returns an Iterator of Tuples
>>> sorted('Beste Grüße:')
[' ', ':', 'B', 'G', 'e', 'e', 'e', 'r', 's', 't', 'ß', 'ü']
Einführung in die Praktische Informatik (EPI)
Grundlagen der Programmierung
Teil 4
Elementare Datentypen - II Prof. Dr. Matthias Kaschube Prof. Dr. Franziska Matthäus Dr. Karsten Tolle
Der Unterschied zwischen str(), repr() und ascii()
§ Alle drei Funktionen erzeugen Werte vom Typ String.
§ Alle drei Funktionen sind zumindest bei allen Basistypen anwendbar.
Was ist der Unterschied?
§ str() erzeugt einen String mit dem Ziel: möglichst gute Lesbarkeit für Menschen: Diese Funktion wird zum Beispiel bei print () ausgeführt und liefert damit „gut“ lesbare Ausgaben.
§ repr() erzeugt einen String mit dem Ziel auf Eindeutigkeit und
Unmissverständlichkeit. Es kann für Programmierer*innen bei der Fehlersuche hilfreich sein.
§ ascii() erzeugt einen String wie repr() jedoch mit Unicode-escapes, wo nötig.
Einführung in die Praktische Informatik (EPI)
Grundlagen der Programmierung
Teil 4
Elementare Datentypen - II Prof. Dr. Matthias Kaschube Prof. Dr. Franziska Matthäus Dr. Karsten Tolle
Byte Objects
Byte Object = encodierte Strings
String: Sequenz von Zeichen -> lesbar durch Menschen, braucht Enkodierung zum Speichern
Byte Object: Sequenz von Bytes -> Maschinenlesbar, direkt speicherbar
Methoden zum konvertieren:
encode(): String -> Byte decode(): Byte -> String
PNG, JPEG, MP3, WAV, ASCII, UTF-8 sind alles verschiedene Formen der Encodierung um Audio, Bilder oder Text in Bytes zu verwandeln.
Einführung in die Praktische Informatik (EPI)
Grundlagen der Programmierung
Teil 4
Elementare Datentypen - II Prof. Dr. Matthias Kaschube Prof. Dr. Franziska Matthäus Dr. Karsten Tolle
Beispiele
>>> s = 'alpha' # s is a string,
>>> b = b'beta' # b is a byte object
>>> print(s,b) alpha b'beta'
>>> t = s.encode('utf-8') # the encodung method
>>> print (t) b'alpha'
>>> t = 'Gemüse'‚ # handling of non-ASCII character
>>> t.encode('utf-8') b'Gem\xc3\xbcse'
>>> u = b.decode('utf-8') # the decode method
>>> print (u)
beta>>> s + b # never mix up string and byte types Traceback (most recent call last):
File "<pyshell#104>", line 1, in <module>
s + b
TypeError: Can't convert 'bytes' object to str implicitly
Einführung in die Praktische Informatik (EPI)
Grundlagen der Programmierung
Teil 4
Elementare Datentypen - II Prof. Dr. Matthias Kaschube Prof. Dr. Franziska Matthäus Dr. Karsten Tolle
Dunder-Methoden
Für jeden Operator und für jede built-in Funktion gibt es in Python eine zugehörige Methode, die diese Operation implementiert:
Operator x + y è Methode __add__
è Aufruf x.__add__(y)
Funktion len(x) è Methode __len__
è Aufruf x.__len__()
Diese Methoden nennt man Dunder-Methoden („Dunder“ ist Jargon für „DoubleUnder (Underscores)“) und zeigen an; dass sie entweder für einen Operator oder eine Funktion stehen!
Einführung in die Praktische Informatik (EPI)
Grundlagen der Programmierung
Teil 4
Elementare Datentypen - II Prof. Dr. Matthias Kaschube Prof. Dr. Franziska Matthäus Dr. Karsten Tolle
Zusammenfassung
§ Python verfügt über sehr mächtige und reichhaltige String-Funktionen und String-Methoden:
§ Funktionen werden mit <Funktionsname>(p1, p2, …) aufgerufen.
Methoden werden mit p1.<Methodenname>(p2, …) aufgerufen.
§ Bitte aufpassen: String-Sortieren erfolgt gemäß des Unicode Codepunkts:
ASCII-Sonderzeichen, Großbuchstaben, Kleinbuchstaben, Umlaute
Einführung in die Praktische Informatik (EPI)
Grundlagen der Programmierung
Teil 4
Elementare Datentypen - II Prof. Dr. Matthias Kaschube Prof. Dr. Franziska Matthäus Dr. Karsten Tolle
Enkodierungen
Zwölf Zeichen mit Code Points & Byte Repräsentation (in hex) in sieben verschiedenen Enkodierungen (Stern bedeutet, dass das Zeichen in dieser Enkodierung nicht repräsentiert werden kann):
Aus: Luciano Ramalho: Fluent Python Published by O'Reilly Media, Inc., 2015
Einführung in die Praktische Informatik (EPI)
Grundlagen der Programmierung
Teil 4
Elementare Datentypen - II Prof. Dr. Matthias Kaschube Prof. Dr. Franziska Matthäus Dr. Karsten Tolle
Zusammenfassung
§ Strings sind Zeichenketten zusammengesetzt aus Characters (Buchstaben, Zahlen, Symbole, etc.)
§ In Python durch Anführungsstriche gekennzeichnet: s='Hello'
§ Unicode: heute dominierender Zeichensatz-Standard
§ Verschiedene Kodierungen mögliche, z.B. UTF-8
§ Kennen jetzt Escape-Sequenzen, raw strings & Byte Objects
§ Sind vertraut mit Indexierung & Slicing
§ Python verfügt über zahlreiche Funktionen und Methoden zum Handling von Strings (mehr dazu in EPR)
Einführung in die Praktische Informatik (EPI)
Grundlagen der Programmierung
Teil 4
Elementare Datentypen - II Prof. Dr. Matthias Kaschube Prof. Dr. Franziska Matthäus Dr. Karsten Tolle
Ausblick
Nächste Woche: Der Datentyp Float
bis dahin
Auf Wiedersehen!