Kapitel 6:
Grundlagen der Programmierung Datenstrukturen
Einführung in die Informatik
Wintersemester 2007/08
Prof. Bernhard Jung
Übersicht
Einleitung
EBNF – Ein Darstellungsmittel für den syntaktischen Aufbau von
Programmiersprachen
Datentypen in Python
Hauptlernziele:
• Die grundlegenden Datentypen in Python kennen lernen
(ähnlich zu vielen anderen Programmiersprachen)
• Syntaktischen Aufbau der Literale verschiedener Datentypen verstehen
• Operationen kennen lernen, die auf Objekte verschiedener
Datentypen angewendet werden können
Prof. B. Jung
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
1
Daten, Datentypen, Datenstrukturen
Daten: Objekte, mit denen ein Programm umgehen soll
Datentypen
z.B. Zahlen, Zeichenketten, Wahrheitswerte, Felder, …
(Æ in vielen Programmiersprachen vordefiniert)
z.B. Bilder, Musikstücke, Videos, …
(Æ definierbar; z.Tl. in Programmbibliotheken definiert)
Unterstützung unterschiedlicher Operationen
z.B. Addition von Zahlen, aber nicht von Bildern
z.B. Komprimierung von Bildern, aber nicht von Zahlen
Datenstruktur: Datentyp + Operationen
Datenstruktur: Eine Menge gleichartiger Daten, auf denen eine Sammlung
von Operationen definiert ist. Eine Operation ist dabei eine Verknüpfung,
die einer festen Anzahl von Eingabedaten ein Ergebnis zuordnet.
Prof. B. Jung
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
Bsp: Datentypen und Operationen
(am Beispiel Python)
Eingabe-Prompt
Ausgabe: Wert
des Ausdrucks
Eingabe eines Ausdrucks
>>> 1 + 2
3
>>> '1' + '2'
'12'
>>>
>>> 5 / 2
2
>>> 5.0 / 2
2.5
Prof. B. Jung
Additionvon
vonZahlen
Zahlen
Addition
Konkatenationvon
vonZeichenketten
Zeichenketten
Konkatenation
Divisionvon
vonInteger-Zahlen
Integer-Zahlen
Division
Divisionvon
vonGleitkommazahlen
Gleitkommazahlen
Division
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
2
Wdh: Einfache Datentypen
(am Beispiel Python; ähnlich in vielen anderen Programmiersprachen)
Ganze Zahlen ("integer"):
Reelle Zahlen ("float"):
0.1, 3.14, 10.0, -33.33, ...
auch in Exponentialschreibweise: 1.0e-5, 0.5e10, …
Zeichenketten ("string"):
1, 2, 5, -100, ...
auch im Hexadezimalsystem spezifizierbar: 0xA1, 0xFF, 0x3B, …
"TU Bergakademie Freiberg", ...
'Grundlagen der Informatik'
Listen: [1,2,3], ["eins", "zwei", drei"], ...
Boolean: true, false
...
Prof. B. Jung
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
EBNF
Notation zur Beschreibung von Grammatiken
insbesondere Syntax von Programmiersprachen
EBNF – Extended Backus Naur Form
John Backus (1956) – Beschreibung von der Syntax von Fortran
Peter Naur (1958) – Beschreibung von der Syntax von Algol
Niklas Wirth (1976) – Erweiterte BNF zur Beschreibung von Pascal
ISO/ICE-Norm 14977 (1996) – Standard für EBNF Grammatiken
Prof. B. Jung
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
3
EBNF
Komponenten von EBNF-Grammatiken
Terminalsymbole
in Python z.B. "1", "2", "print", "for", "if"
Nichtterminalsymbole
ein Startsymbol (aus der Menge der Nichtterminalsymbole)
Regeln
der Form: LHS ::= RHS, wobei
LHS (left-hand-side) ist Nichtterminalsymbol
RHS (right-hand-side) ist Ausdruck aus Terminal, Nichtterminalsymbolen,
Operatoren und Klammern
Bedeutung: LHS kann durch RHS ersetzt werden
z.B. Regel
digit ::= "0"|"1"|"2"|"3"|"4"|"5"|"6"|"7"|"8"|"9"
d.h. digit kann durch eines der Zeichen "0" ... "9" ersetzt werden
Prof. B. Jung
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
EBNF - Operatoren
Auswahl
senkrechter Strich | bezeichnet Auswahlmöglichkeit
lies als "oder"
z.B.
digit ::= "0"|"1"|"2"|"3"|"4"|"5"|"6"|"7"|"8"|"9"
oder abkürzend
digit ::= "0" … "9"
Prof. B. Jung
d.h. eine Ziffer (digit) ist das Zeichen 0, oder das Zeichen 1, oder
das Zeichen 2, usw.
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
4
EBNF - Operatoren
Wiederholung +
Pluszeichen + bezeichnet das mehrfache Vorkommen eines Symbols
Sternoperator *
Der Stern * bedeutet, dass ein Symbol n-mal, n≥0, vorkommt
z.B. ba* steht für b, ba, baa, baaa, baaaa, …
Option []
z.B. ba+ steht für ba, baa, baaa, baaaa, …
Kennzeichnung optionaler Symbole in einem Ausdruck
z.B. a[b]c steht für ac oder abc
Gruppierung ()
Runde Klammern dienen der Gruppierung von Symbolen
z.B. a(b|B)c steht für abc oder aBc
Prof. B. Jung
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
EBNF - Beispiel
Gegeben seien die Regeln
(R1) fraction ::= "." digit+
(R2) digit ::= "0"|"1"|"2"|"3"|"4"|"5"|"6"|"7"|"8"|"9"
Ableitung von ".14" aus fraction
Start:
fraction
Anwendung von (R1): "." digit+
Expansion +-Operator:
"." digit digit
Anwendung von (R2): "." "1" digit
Anwendung von (R2): "." "1" "4"
Vereinfachte Schreibweise:
".14"
Prof. B. Jung
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
5
Übersicht: Die wichtigsten Datentypen in Python
Datentypen
Kollektionen
Zahlen
Ganze
Zahlen
float
complex
12.852
1+2j
Unveränderbar
int
123
long
123456789L
Sequenzen
NoneType
True, False
None
Abbildungen
Mengen
Veränderbar
str
unicode
tuple
‘Wort‘
u‘Wort‘
(1, ‘a‘, [2])
Prof. B. Jung
bool
list
[1, ‘a‘, [2]]
Einführung in die Informatik, WS 2007/08
set
dict
set( [1,2])
(‘A‘:65, ‘B‘:66)
frozenset
frozenset( [1,2])
TU Bergakademie Freiberg
Datentyp bool
Darstellung von Wahrheitswerten
Literale
Operationen
True
False
and, or, not
gleich (==), ungleich (!=)
Verwendung oft in Bedingungen
Prof. B. Jung
>>> True
True
>>> not True
False
>>> True and True
True
>>> True and False
False
>>> True or True
True
>>> True or False
True
>>> 12 > 9
True
>>> 2*3 == 6
True
>>> 2*3 == 5
False
>>> if 2 == 2:
...
print 'gleich'
...
gleich
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
6
Datentyp bool
and
False
True
or
False
True
Prof. B. Jung
False
False
False
True
False
True
False
False
True
>>> True
True
>>> not True
False
>>> True and True
True
>>> True and False
False
True
True
True
>>> True or True
True
>>> True or False
True
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
Datentypen int und long
Darstellung ganzer Zahlen
Datentyp int
Werte repräsentiert durch mind. 32 Bit
(neue Prozessoren auch 64 Bit)
Wertebereich
-2 147 483 648 … 2 147 483 647
(oder höher bei 64 Bit)
Datentyp long
beliebig lange Zahlen
Syntax: Ziffernfolge mit angehängtem
'l' oder 'L'
Ganze Zahlen größer als
2147483647 (bzw. kleiner als
-2147483648) werden von Python
automatisch als long interpretiert
Prof. B. Jung
>>> 12
12
>>> 12L
12L
Die Standardfunktion type()
liefert den
Datentyp eines
Ausdrucks oder
einer Variable.
>>> type(12)
<type 'int'>
>>> type(12l)
<type 'long'>
>>> 2147483647
2147483647
>>> 2147483648
2147483648L
>>> type(-2147483648)
<type 'int'>
>>> type(-2147483648-1)
<type 'long'>
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
7
Darstellung ganzer Zahlen: Datentypen int und long
Darstellung ganzer Zahlen in
unterschiedlichen Zahlensystemen
Dezimalsystem
Literale fangen nie mit 0 an
>>> 011
9
außer 0 selbst
z.B. 11, 9
>>> 09
Traceback ( File
"<interactive input>",
line 1
09
^SyntaxError: invalid
token
Oktalsystem
>>> 9
9
Literale beginnen mit 0
Ziffern 0 … 7
z.B. 011
Hexadezimalsystem
Literale beginnen mit 0x oder 0X
Ziffern 0 … 9, A … F
z.B. 0x11, 0xA9
Prof. B. Jung
>>> 0xA
10
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
Datentypen int und long
EBNF
longinteger ::=
integer ("l" | "L")
integer ::=
decimalinteger | octinteger | hexinteger
decimalinteger ::=
nonzerodigit digit* | "0"
octinteger ::=
"0" octdigit+
hexinteger ::=
"0" ("x" | "X") hexdigit+
digit ::=
"0"..."9"
nonzerodigit ::=
"1"..."9"
octdigit ::=
"0"..."7"
hexdigit ::=
Prof. B. Jung
digit
| "a"..."f"
| "A"..."F" TU Bergakademie Freiberg
Einführung
in die Informatik,
WS 2007/08
8
Darstellung rationaler Zahlen: Datentyp float
Darstellung rationaler Zahlen
Darstellungsformen:
als Dezimalbruch (pointfloat)
z.B. 3.12, 0.1, 1.0
in Exponentialschreibweise
>>> 0.2
0.20000000000000001
>>> 0.6
0.59999999999999998
>>> 3.14
3.1400000000000001
"Gleitkommazahlen"
falls Zahl sehr nahe bei Null oder sehr groß
z.B. 1.0e-5 (entspricht 0.00001)
z.B. 1e2 (entspricht 100)
begrenzte Genauigkeit
interne Darstellung von Gleitkommazahlen
ist begrenzt auf feste Anzahl von Stellen
Prof. B. Jung
>>> 1e8
100000000.0
>>> 1e+8
100000000.0
>>> 1e-8
1e-008
>>> 0.00000001
1e-008
>>> 1.234567890123456789
1.2345678901234567
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
Datentypen float
EBNF
floatnumber ::=
pointfloat | exponentfloat
pointfloat ::=
[intpart] fraction | intpart "."
exponentfloat ::=
(intpart | pointfloat)
exponent
intpart ::=
digit+
fraction ::=
"." digit+
exponent ::=
("e" | "E") ["+" | "-"] digit+
Prof. B. Jung
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
9
Datentyp complex
Darstellung komplexer Zahlen
in Mathematik: Summe aus Real- und Imaginärteil, z.B. 1+2i
Buchstabe i bezeichnet Wurzel von -1
in Python: 1 + 2j
Realteil kann weggelassen werden, falls 0
imagnumber
EBNF
(Imaginärteil)
Beispiele
Prof. B. Jung
::= (floatnumber | intpart) ("j" | "J")
>>> 10 + 0.3j
(10+0.29999999999999999j)
>>> 20j
20j
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
Operationen auf Zahlen
Operator
Erläuterung
Beispielterm
Ergebnis
**
Potenz
2**3
8
-
Negatives Vorzeichen (unär)
-1
-1
+
Positives Vorzeichen (unär)
+1
1
*
Multiplikation
2.0*2
4.0
/
Division
4.0 / 2.0
2.0
%
Rest der ganzzahligen Division (modulo)
5%3
2
+
Addition
(2+2j) + (3+4j)
(5 + 6j)
-
Subtraktion
6.0 – 3.5
2.5
Prof. B. Jung
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
10
Sequenzen
Sequenz
Container-Objekt (Kollektion), in dem eine Folge von Objekten zusammengefasst
ist
Elemente sind von 0 beginnend durchnummeriert
s[2]
s[5]
s
59
19
-1
-111
-30
18
18
index
0
1
2
3
4
5
6
Arten von Sequenzen in Python: Zeichenketten, Tupel, Listen
Prof. B. Jung
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
Darstellung von Zeichenketten: Datentyp str
Darstellung von Zeichenketten
Kurze Zeichenketten
nur ASCII-Zeichen erlaubt
Definition in einer Programmzeile
eingeschlossen in Hochkommata ' oder
Anführungszeichen "
Lange Zeichenketten
>>> "eins zwei drei"
'eins zwei drei'
>>> 'vier fuenf sechs'
'vier fuenf sechs'
>>> type("vier fuenf sechs")
<type 'str'>
können sich über mehrere
Programmzeichen erstrecken
eingeschlossen in dreifache
Hochkommata ''' oder
Anführungszeichen """
>>> """Die Ewigkeit dauert lange,
besonders gegen Ende. (Woody Allen)"""
'Die Ewigkeit dauert lange,\nbesonders gegen Ende. (Woody Allen)'
Prof. B. Jung
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
11
Darstellung von Zeichenketten: Datentyp unicode
Darstellung von Zeichenketten mit
Unicode-Strings
auch nicht-ASCII-Zeichen erlaubt
Darstellung von Literalen wie bei
str-Zeichenketten, mit
vorangestelltem u
>>> type(u'Unicode-String')
<type 'unicode'>
>>> print u"\N{CYRILLIC CAPITAL LETTER ZHE}"
Ж
Prof. B. Jung
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
Datentyp tuple
Tupel
fasst mehrere Objekte, u.U. unterschiedlichen Typs, zu einem komplexen Objekt zusammen
mathematische Schreibweise: z.B. (1,2,3)
Beispiele
>>> (1,2,3)
(1, 2, 3)
>>> ("Ampel", 3, ("rot", "gelb", "gruen") )
('Ampel', 3, ('rot', 'gelb', 'gruen'))
>>> type( (1,2,3) )
<type 'tuple'>
>>> ()
()
Prof. B. Jung
# leerer Tupel
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
12
Datentyp list
Darstellung von Listen
Listen enthalten oft Elemente vom gleichen Typ
Inhalt von Listen kann zur Laufzeit verändert werden
Darstellung in Python durch eckige Klammern []
können aber auch Elemente unterschiedlichen Typs enthalten
i.Ggs. zu Tupeln, Zeichenketten
Beispiele
>>> [1,2,3,4,5]
[1, 2, 3, 4, 5]
>>> ["Morgen", "Mittag", "Abend"]
['Morgen', 'Mittag', 'Abend']
>>> ["Abend", 2, 1.0, ['a', 'b'] ]
['Abend', 2, 1.0, ['a', 'b']]
>>> type([1,2])
<type 'list'>
Prof. B. Jung
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
Einige Operationen auf Sequenzen
Zugriff auf Elemente
Konkatenation
>>> 'Berg' + 'akademie'
'Bergakademie'
>>> [1,2,3]+[4]
[1, 2, 3, 4]
mittels Operator +
Bestimmung der Länge
mittels Index in eckigen
Klammern
mittels Standardfunktion len()
Vervielfältigung
mittels Multiplikations-operator *
Prof. B. Jung
>>> rgb = ("rot", "gruen", "blau")
>>> rgb[1]
'gruen'
>>> "Informatik"[0]
'I'
>>> primzahlen = [2,3,5,7,11,13]
>>> primzahlen[5]
13
>>> len( [1,2,3] )
3
>>> len('Bergakademie')
12
>>> 20*'.'
'....................'
>>> ('an','aus') * 3
('an', 'aus', 'an', 'aus', 'an', 'aus')
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
13
Datentypen set und frozenset
Darstellung von Mengen
Operationen
Menge = ungeordnete Kollektion ohne Duplikate
set-Objekte sind veränderbar
frozenset-Objekte sind unveränderbar
Durchschnitt &
Vereinigung |
Differenz –
>>> set( [1,2])
set([1, 2])
Beispiele
>>> set([1,2,1,2]) # Duplikate?
set([1, 2])
>>> set([1,2]) & set([2,3]) # Durchschnitt
set([2])
Prof. B. Jung
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
Datentyp dict
Dictionary
Kollektion von Schlüssel-Wert-Paaren
d.h. Abbildung von Schlüsseln auf Werte
Zugriff auf Elemente der Kollektion über Schlüssel
>>> woerterbuch = {"sun":"Sonne", "moon":"Mond", "star":"Stern"}
>>> woerterbuch["sun"]
'Sonne'
>>> type(woerterbuch)
<type 'dict'>
Prof. B. Jung
Einführung in die Informatik, WS 2007/08
TU Bergakademie Freiberg
14