Modul: Programmierung B-PRG Grundlagen der Programmierung 1 – Teil 1 – V5 Zeichenketten, Strings und Listen Prof. Dr. Detlef Krömker Professur für Graphische Datenverarbeitung Institut für Informatik Fachbereich Informatik und Mathematik (12) Hier wird Wissen Wirklichkeit Rückblick Kodierung numerischer Datentypen Ganze Zahlen (Integer) als Dualzahlen Gleitkommazahlen (floating point numbers) Alternative Dezimalzahlendarstellungen Objekte in Python Elementare numerische Datentypen in Python Numerische Datentypen Operationen auf Zahlen Vergleichsoperatoren Ausdrücke 2 Programmieren 1 – Teil 1 – V5 WS 2005/2006 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit Unser heutiges Lernziel Zeichenketten als elementare Datentypen sollen verstanden werden - einschließlich ihrer Besonderheiten. 3 Programmieren 1 – Teil 1 – V5 WS 2005/2006 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit Übersicht Was ist Text? Welche Schriftarten existieren? Was sind Zeichenketten? Was sind Zeichensätze? Wie werden diese im Computer codiert? 4 Programmieren 1 – Teil 1 – V5 WS 2005/2006 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit Text = geschriebene Sprache (im engeren Sinne) kommt von lat. textus = Gewebe Geflecht Stoff 5 Programmieren 1 – Teil 1 – V5 WS 2005/2006 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit Funktionale Verbindung zwischen Text und Gewebe Semantisches Netzwerk Text linear-temporäre Aneinanderreihung von Zeichen und Worten kann in eine semantische Netzwerkrepräsentation transformiert werden => Text „verstrickt“ und „verflechtet“ Objekte und Akteure (Knoten) miteinander. 6 Programmieren 1 – Teil 1 – V5 WS 2005/2006 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit Mythologische Verbindung zwischen Gewebe und Text Über die 3 Parzen (lat.), 3 Moiren (griech.), 3 Nornen (germ.) bzw. 3 Raunende (nord.) z.B. Griechische Mythologie: Klotho (Faden-Spinnerin), Lachesis (Erzählende) und Atropos (Faden-Schneiderin) weben zusammen den „roten Faden“ des Schicksals zur „Lebensgeschichte“. z.B. Germanische Mythologie: Urd (Vergangenheit), Verdandi (Gegenwart) und Skuld (Zukunft) stricken Schicksalsfäden und -gewebe. Sie benutzen Buchen-Stäbe (Buchstaben) und werfen es auf dieses Stück Stoff, um Schicksal vorherzubestimmen. 7 Programmieren 1 – Teil 1 – V5 WS 2005/2006 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit Darstellung des Textes benötigt eine Schrift, deren Zeichen wahlweise Phoneme Silben Wörter bzw. Begriffe kodieren. 8 Programmieren 1 – Teil 1 – V5 WS 2005/2006 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit Klassifikation der Schriften Alphabetschrift Zeichen ~ Laut Silbenschrift Zeichen ~ Silbe Logogramme Zeichen ~ Wort, Aussage, Anweisung 9 Programmieren 1 – Teil 1 – V5 WS 2005/2006 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit Alphabetschrift Alphabet (von gr. αλφάβητο [alfáwito] - Alpha & Beta) Beispiele: Lateinische Schriften: IPA-Lautschrift: Kyrillisch: Griechische Schrift: Tengwar, Sindarin, Elfisch... : 10 Programmieren 1 – Teil 1 – V5 WS 2005/2006 Den største skriften [alfáwito] Ду бист кайн Весси! αλφάβητο Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit Silbenschrift Beispiele: Cherokee (siehe rechts) Kyprisch Linear B Akkadische Keilschrift 11 Programmieren 1 – Teil 1 – V5 WS 2005/2006 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit Wortbildschrift, Logogrammschrift Beispiele: Hanzi (chinesisch – siehe rechts) Hanja (koreanisch) Maja-Schrift Jurjen Tangut 12 Programmieren 1 – Teil 1 – V5 WS 2005/2006 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit Sonderformen der Logogramme Ziffernsysteme & Symbolik der Mathematik Piktogramme 13 Programmieren 1 – Teil 1 – V5 WS 2005/2006 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit Klassifikation der Schriften (Besonderheiten) Hybride Systeme z.B. Japanisch = Kombination aus Silbenschrift (Hiragana, Katagana) und Logogrammschrift (Kanji) Modifizierte Alphabetschriften z.B. Arabisch (codiert i.d.R. nur Konsonanten und lange Vokale) 14 Programmieren 1 – Teil 1 – V5 WS 2005/2006 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit Schriftsysteme der Welt http://de.wikipedia.org/wiki/Schrift 15 Programmieren 1 – Teil 1 – V5 WS 2005/2006 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit Begriff: Alphabet in der Informatik Ist in der Informatik weiter gefasst als in der Lingustik Unter Alphabet versteht man (z.B. nach DIN 44300) eine total geordnete endliche Menge (oft nichtleere endliche Menge) von unterscheidbaren Symbolen (Zeichen). Häufig Σ als Zeichen 16 Programmieren 1 – Teil 1 – V5 WS 2005/2006 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit Begriff: Zeichenreihe Zeichenreihen = endliche lineare Reihen von Zeichen eines Alphabets Σ Übrigens: Auch die Zeichenreihe, die keine Zeichen enthält, ist ein Wort - das leere Wort. Es wird mit ε bezeichnet. 17 Programmieren 1 – Teil 1 – V5 WS 2005/2006 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit Begriff: Kleensche Hülle Unter der Kleeneschen Hülle Σ* versteht man die Menge aller Wörter (i.d.F. Zeichenreihen) über dem Alphabet Σ. 18 Programmieren 1 – Teil 1 – V5 WS 2005/2006 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit Beispiel Dezimalsystem: Σ = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 } Σ* = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, ... } 19 Programmieren 1 – Teil 1 – V5 WS 2005/2006 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit Begriff: Zeichensatz Die Zuordnung von alphanumerischen Zeichen (Buchstaben und Ziffern) sowie Sonderzeichen zu einem Zahlencode. Beispiele: ASCII (meist verwendet) IBM EBCDIC (verliert an Bedeutung) 20 Programmieren 1 – Teil 1 – V5 WS 2005/2006 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit Problematik Zeichensatz früher nur 7 oder 8 Bit für ein Zeichen verwendet => Unzählige nationale Varianten z.B. Umlaute und scharfes S im Deutschen Lösungsversuch: Unicode mit 16 Bit 21 Programmieren 1 – Teil 1 – V5 WS 2005/2006 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit Begriff: Schriftart Synonyme: font, typeface Bekannte Schriftarten: Arial Times New Roman Frutiger light Courier New Impact Century Gothic 22 Programmieren 1 – Teil 1 – V5 WS 2005/2006 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit Proportionale vs. Nicht-proportionale Schriften Nichtproportionale Schriften (fixe Typenbreite) Proportionale Schriften (Courier New, Lucida Console, ...) (Arial, Times, Frutiger, ..) 23 Programmieren 1 – Teil 1 – V5 WS 2005/2006 (veränderliche Typenbreite) Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit Grotesk vs. Antiqua Grotesten-Schriften (ohne Serifen) Antiqua-Schriften (mit Serifen) (Arial, Frutiger, Lucida Console, ...) (Times, Courier New, ..) 24 Programmieren 1 – Teil 1 – V5 WS 2005/2006 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit Internationale Zeichensätze ASCII Einer der ältesten ComputerZeichensätze – 7 Bit 1963 Sehr weit verbreitet, (Programmiersprac hen, InternetAdressen, etc.) ISO/IEC 8859 15 verschiedenen Kodierungen zur Abdeckung europäischer Sprachen sowie arabisch, hebräisch, thailändisch und türkisch Internationaler Standard – (7) 8, 16 oder 32 Bit 1986 u.a. in Linux und MS Windows verwendet. 1991 nimmt an Bedeutung stark zu Unicode ISO/IEC 10646 -– 1991 25 Programmieren 1 – Teil 1 – V5 WS 2005/2006 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit ISO 646 Nationale 7 Bit Varianten der ASCII Codierung IA5 (Internationales Alphabet Nr. 5) Für die nationalen Versionen sind 12 Positionen im Zeichensatz für national definierte Zeichen freigegeben. Die deutsche Variante ist in DIN 66003 festgelegt und ist als Variante 21 registriert veraltet 26 Programmieren 1 – Teil 1 – V5 WS 2005/2006 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit Weitere nationale Zeichensätze ARMSCII Armenisch Big5 Chinesisch (Taiwan) Guojia Biaozhun Zeichensatz für vereinfachte chinesische Schriftzeichen HKSCS Chinesisch (Hong Kong) ISCII Alle indischen Sprachen KOI8-R Russisch KOI8-U Ukrainisch TIS-620 Thailändisch, ähnlich ISO 8859-11 (1990) TSCII Tamil VISCII Vietnamesisch SJIS Japanisch, entworfen von Microsoft EUC „Extended UNIX Coding“ Mehrere ostasiatische Sprachen 27 Programmieren 1 – Teil 1 – V5 WS 2005/2006 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit Proprietäre Zeichensätze von Computerfirmen EBCDIC Von IBM entwickelter Zeichensatz MacRoman, MacCyrillic für Apple Mac Computer vor Mac OS X (seit OS X wird Unicode verwendet) Windows- und DOS-Codepages Windows-1252; MS-DOS Codepage 437, Codepage 850 Windows Glyph List 4 28 Programmieren 1 – Teil 1 – V5 WS 2005/2006 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit ASCII genauer unter die Lupe genommen American Standard Code for Information Interchange Entwickelt von: 1963 als 6-Bit-Code (ohne Kleinbuchstaben) von Bob Bemer Eingeführt 1968 29 Programmieren 1 – Teil 1 – V5 WS 2005/2006 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit ASCII genauer unter die Lupe genommen ASCII Cod e …0 …1 …2 …3 …4 …5 …6 …7 …8 …9 …A …B …C …D …E …F 0… NUL SOH STX ETX EOT ENQ ACK BEL BS HT LF VT FF CR SO SI 1… DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC FS GS RS US 2… SP ! " # $ % & ' ( ) * + , - . / 3… 0 1 2 3 4 5 6 7 8 9 : ; < = > ? 4… @ A B C D E F G H I J K L M N O 5… P Q R S T U V W X Y Z [ \ ] ^ _ 6… ` a b c d e f g h i j k l m n o 7… p q r s t u v w x y z { | } ~ DEL 30 Programmieren 1 – Teil 1 – V5 WS 2005/2006 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit ASCII-Anekdote APPLE ÜÄ 31 Programmieren 1 – Teil 1 – V5 WS 2005/2006 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit ASCII-Anekdote APPLE ÅÆ 32 Programmieren 1 – Teil 1 – V5 WS 2005/2006 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit ASCII genauer unter die Lupe genommen Problem: ASCII enthält keine diakritischen Zeichen! 1972 Einführung von ISO 646-IRV Internationale Kompatibilitätsprobleme APPLE ÜÄ APPLE ][ APPLE ÅÆ APPLE ÕÃ 33 Programmieren 1 – Teil 1 – V5 WS 2005/2006 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit ASCII genauer unter die Lupe genommen (ISO 646-IRV) 23 24 40 5B 5C 5D 5E 60 7B 7C 7D 7E ISO 646-IRV # ¤ @ [ \ ] ^ ` { | } ~ Deutschland # $ § Ä Ö Ü ^ ` ä ö ü ß Schweiz ù $ à é Ç ê î ô ä ö ü û USA (ASCII) # $ @ [ \ ] ^ ` { | } ~ UK £ $ @ [ \ ] ^ ` { | } ~ Frankreich £ $ à ° Ç § ^ ` é ù é ¨ Kanada # $ à â Ç ê î ô é ù é û Finnland # $ @ Ä Ö Å Ü é ä ö å ü Norwegen # $ @ Æ Ø Å ^ ` æ ø å ~ Schweden # $ É Ä Ö Å Ü é ä ö å ü Italien £ $ § ° Ç é ^ ù à ò ù ì Niederlande £ $ ¾ ÿ ½ | ^ ` ¨ ƒ ¼ ´ Spanien £ $ § ¡ Ñ ¿ ^ ` ° ñ ç ~ Portugal # $ @ Ã Ç Õ ^ ` ã ç õ ~ 34 Programmieren 1 – Teil 1 – V5 WS 2005/2006 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit ASCII genauer unter die Lupe genommen Internationale Kompatibilitätsprobleme Proprietäre 8-Bit Formate Codepage 473 (IBM-PC unter MS-DOS) Auch heute noch bei Eingabeaufforderungs-Fenstern unter Windows 35 Programmieren 1 – Teil 1 – V5 WS 2005/2006 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit ISO IEC 8859 8-Bit-Zeichensatz aufbauend auf ASCII (erste 7 Bits) Halbherzig => Wieder mehrere Varianten (z.B. ISO 8859-1 für westeuropäische Länder) => 15 verschiedene Zeichensätze (1 bis 16 ohne 12) 36 Programmieren 1 – Teil 1 – V5 WS 2005/2006 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit ISO IEC 8859 -1 Latin-1 Latin-2 Latin-3 Latin-4 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -13 -14 -15 -16 Latin-5 Latin-6 Latin-7 Latin-8 Latin-9 Latin-10 37 Programmieren 1 – Teil 1 – V5 WS 2005/2006 Westeuropäisch Osteuropäisch Südeuropäisch Baltisch Kyrillisch Arabisch Griechisch Hebräisch Türkisch Nordisch Thai Baltisch Keltisch Westeuropäisch Südosteuropäisch Prof. Dr. Detlef Krömker Veränderung an 8 Positionen (u.a. €-Zeichen) Hier wird Wissen Wirklichkeit Unicode - Identisch mit Universal Character Set (UCS nach ISO 10646) 42 Bit / Zeichen => über vier Milliarden Möglichkeiten Aber nur ~1 Million prinzipiell erlaubte Code-Werte - 38 Unicode provides a unique number for every character, no matter what the platform, no matter what the program, no matter what the language. Programmieren 1 – Teil 1 – V5 WS 2005/2006 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit Unicode - Die Codes von Unicode-Zeichen werden hexadezimal mit vorangestelltem U+ notiert. - ursprünglich 65.536 Zeichen (UCS-2, 16 Bit) - In Version 2.0 wurde der Codebereich um weitere 16 gleichgroße Bereiche, sogenannte Planes erweitert. Somit sind nun maximal 1.114.112 (220+216) Zeichen bzw. Codepoints (=eindeutige Zeichennummer )im Codebereich von U+00000 bis U+10FFFF vorgesehen (UCS-4, 32 Bit). - Bislang, in Unicode 4.0, sind bisher 96.382 Codes individuellen Zeichen zugeordnet. Das entspricht nur etwa erst 9% des Coderaumes. 39 Programmieren 1 – Teil 1 – V5 WS 2005/2006 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit Unicode - Die Codes von Unicode-Zeichen werden hexadezimal mit vorangestelltem U+ notiert. - ursprünglich 65.536 Zeichen (UCS-2, 16 Bit) - In Version 2.0 wurde der Codebereich um weitere 16 gleichgroße Bereiche, sogenannte Planes erweitert. Somit sind nun maximal 1.114.112 (220+216) Zeichen bzw. Codepoints (=eindeutige Zeichennummer )im Codebereich von U+00000 bis U+10FFFF vorgesehen (UCS-4, 32 Bit). - Bislang, in Unicode 4.0, sind bisher 96.382 Codes individuellen Zeichen zugeordnet. Das entspricht nur etwa erst 9% des Coderaumes. 40 Programmieren 1 – Teil 1 – V5 WS 2005/2006 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit Unicode Transformation Format (UTF), 256 „Variation Selectors“ für Glyphenvarianten (Fraktur, Handschrift, Antiqua, etc.) Für die unteren 256 Zeichen die weit verbreitete ISO 8859-1Kodierung (Latin1) beibehalten 41 Programmieren 1 – Teil 1 – V5 WS 2005/2006 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit Erstellen von Unicode-Zeichen Beispiel „⊕ ⊕“ Suche in entsprechender Tabelle (hier: Mathematische Symbole) => hexadezimale Zeichennummer Python: Voranstellen von \uHHHH (vier Hexadezimale Ziffern (0 .. 65.536) in Python hier \u2295 HTML oder XML: „&#x2295;“ Die Zeichennummer kann auch dezimal, dann ohne führendes „x“, angegeben werden, zum Beispiel „&#8853;“ für das gleiche Zeichen. 42 Programmieren 1 – Teil 1 – V5 WS 2005/2006 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit Erstellen von Unicode-Zeichen Die Text Encoding Initiative TEI hat Empfehlungen erarbeitet, Unicode in XML-Dateien in leichter verständlicher Form einzugeben. Hier handelt es sich um einen Satz benannter Zeichen (engl.: named entites), der in das Stylesheet integriert wird. Allgemein übliche benannte Zeichen sind z.B. die Umlaute wie „&Auml;“ statt „&#196;" für Ä. 43 Programmieren 1 – Teil 1 – V5 WS 2005/2006 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit Zeichenketten in Python Python implementiert zwei verschiedene Basis-Typen für Zeichenketten (strings): · Strings (8-Bit, ein Oktett, ein Byte) · Unicode-Strings (variable Codelänge von 8-32 Bits) 44 Programmieren 1 – Teil 1 – V5 WS 2005/2006 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit Zeichenketten in Python Strings können in einfachen, doppelten oder dreifachen Anführungszeichen geschrieben werden => Unterschiede 45 Programmieren 1 – Teil 1 – V5 WS 2005/2006 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit Zeichenketten in Python >>> "Hello World“ "Hello World“ >>> 'Python ist toll!‚ 'Python ist toll!‚ >>> """Python ist toll!""„ >>> print _ Python ist toll! >>>'Python ist toll!' SyntaxError: EOL while scanning single-quoted string 46 Programmieren 1 – Teil 1 – V5 WS 2005/2006 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit Zeichenketten in Python >>> 'Python ist \ toll!‚ \ (Backslash) verlängert die physische Zeile zu einer logischen Zeile. 'Python ist toll!‚ >>> """Auch Möchtegerne müssen 0,00€ für Python bezahlen""„ 'Auch M\xf6chtegerne m\xfcssen 0,00\x80 f\xfcr Python bezahlen‚ >>> print ­_ Auch Möchtegerne müssen 0,00€ für Python bezahlen 47 Programmieren 1 – Teil 1 – V5 WS 2005/2006 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit Zeichenketten in Python Strings sind Zeichen-Sequenzen, die mit ganzen Zahlen, beginnend bei Null, indiziert werden. Um auf ein einzelnes Zeichen davon zuzugreifen, verwendet man den Index-Operator s[ i ] wie folgt: a = "Hello World" b = a[4] # b = 'o' 48 Programmieren 1 – Teil 1 – V5 WS 2005/2006 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit Zeichenketten in Python Um einen Teilstring zu erhalten, benutzt man den Teilbereichsoperator (engl. slice) s[i:j]. Dieser extrahiert alle Elemente von s, deren Index k im Intervall i <= k < j liegt. Falls einer der beiden Indizes weggelassen wird, so wird entweder der Anfang oder das Ende des Strings angenommen: a c d e 49 = = = = “Hello a[0:5] a[6:] a[3:8] Programmieren 1 – Teil 1 – V5 WS 2005/2006 World” World” # c = "Hello" # d = "World" # e = "lo "lo Wo" Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit Zusammenfassung Jetzt müssen Sie üben, direkt mit dem Interpreter! 50 Programmieren 1 – Teil 1 – V5 WS 2005/2006 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit Anmerkung zur Übung Aufgabe 3.2.C Statt x*log10(4) x+log10(4) 51 Programmieren 1 – Teil 1 – V5 WS 2005/2006 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit Fragen und (hoffentlich) Antworten 52 Programmieren 1 – Teil 1 – V5 WS 2005/2006 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit Ausblick Zeichenketten in Listen Listen Listenoperatoren u.v.m. Danke für Ihre Aufmerksamkeit 53 Programmieren 1 – Teil 1 – V5 WS 2005/2006 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit