315
12
Wörterbücher, Dateien
und der alte Cäsar
Nachdem du im vorigen Kapitel den Umgang mit Objekten und ihren Me-
thoden kennen gelernt hast, wirst du es hier mit zwei weiteren nützlichen
Objekttypen zu tun bekommen, die für die Programmierpraxis unentbehr-
lich sind.
In diesem Kapitel wirst du ...
$
mit dem Datentyp
Dictionary
erfahren, was Wörterbücher wirklich sind,
$
sehen, wie man diese zum Beispiel für das Verschlüsseln von Daten mit
der Methode des alten Cäsar anwenden kann
$
und schließlich auch noch lernen, Text von
Dateien
zu
lesen
und in Da-
teien zu
schreiben
.
316
Wörterbücher, Dateien und der alte Cäsar
Kapitel
12
Dictionaries
Dictionary
heißt Wörterbuch. Python hat einen zusammengesetzten Daten-
typ, der heißt
dictionary
. Dictionaries sind
mappings
, wieder englisch:
Abbildungen. (Kennst du den Begriff aus der Mathematik?) Jedem Element
einer Menge von so genannten
Schlüsseln
(keys) wird ein
Wert
(value) zu-
geordnet. Im Deutschen werden Dictionaries manchmal als »assoziative
Felder« bezeichnet, weil sie Verbindungen (Assoziationen) von Schlüsseln
mit Werten beinhalten – nur, falls dir der Begriff einmal über den Weg
laufen sollte.
Dictionaries bestehen daher aus einer Menge von Paaren von Objekten, so
genannten Schlüssel-Wert-Paaren. Dabei ist zu beachten, dass die Schlüs-
sel unveränderliche Objekte sein müssen. Die Werte können dagegen belie-
bige Objekte sein.
In diesem Kapitel kommen keine Grafik-Anwendungen vor. Es ist daher
sinnvoll, mit der Standard-IDLE zu arbeiten.
>
Starte die IDLE (Python GUI) und mach mit!
>>> berufe = {"Guido":"Computer-Guru", "Eva":"Model",
"Fritz":"Lehrer", "Katja":"Lektorin"}
Achte gut auf die Syntax für das Anschreiben von Dictionaries. Die Schlüs-
sel-Wert-Paare werden durch Beistriche voneinander getrennt. Zwischen
Schlüssel und zugehörigem Wert steht ein Doppelpunkt. Das ganze Dictio-
nary wird in
geschwungene
Klammern eingeschlossen. Unseres hat den
Namen
beruf
. Zeig her, was in dir steht:
>>> berufe
{'Eva': 'Model', 'Fritz': 'Lehrer', 'Katja': 'Lektorin',
'Guido': 'Computer-Guru'}
Beachte, dass die Einträge im Wörterbuch hier in einer anderen Reihenfol-
ge auftauchen. Wörterbücher sind
ungeordnet
. Du hast keinen Einfluss auf
irgendeine Art von Reihenfolge der Einträge!
>
Frage nun nach den Werten im Dictionary
berufe
, die zu einzelnen
Schlüsseln gehören:
>>> berufe["Fritz"]
'Lehrer'
>>> berufe["Katja"]
'Lektorin'
>
Füge einen neuen Eintrag hinzu:
317
Dictionaries
>>> berufe["Buffi"] = "Programmierer"
>>> berufe
{'Eva': 'Model', 'Fritz': 'Lehrer', 'Buffi':
'Programmierer',
'Katja': 'Lektorin', 'Guido': 'Computer-Guru'}
Der Datentyp
Dictionary
hat die beiden Methoden
keys()
und
values()
. Sie haben keine Parameter und geben die Folgen der Schlüssel
beziehungsweise der Werte zurück:
>>> berufe.keys()
dict_keys(['Eva', 'Fritz', 'Buffi', 'Katja', 'Guido'])
>>> beruf.values()
dict_values(['Model', 'Lehrer', 'Programmierer', 'Lektorin',
'Computer-Guru'])
dict_keys
und
dict_values
sind wieder einmal so dynamische Werte-
vorrat-Objekte. Du kannst fragen, ob sie ein Objekt enthalten:
>>> "Eva" in berufe.keys()
True
>>> "Model" in berufe.values()
True
>>> "Skater" in berufe.values()
False
(Leider kein Beruf!)
Für Dictionaries hat der Operator
in
eine besondere Bedeutung: Mit ihm
prüfst du kürzer als oben, ob ein Objekt ein Schlüssel in einem Dictionary
ist.
>>> "Eva" in berufe
True
>>> for name in berufe:
print("Der Beruf von {0} ist {1}".
format(name, berufe[name]))
Der Beruf von Eva ist Model
Der Beruf von Fritz ist Lehrer
Der Beruf von Buffi ist Programmierer
Der Beruf von Katja ist Lektorin
Der Beruf von Guido ist Computer-Guru
>>> berufe["Inge"]
Traceback (most recent call last):
File "<pyshell#23>", line 1, in <module>
beruf["Inge"]
KeyError: 'Inge'
318
Wörterbücher, Dateien und der alte Cäsar
Kapitel
12
Diese Fehlermeldung solltest du dir merken:
KeyError
– Schlüsselfehler.
Sie tritt auf, wenn du nach einem Wert für einen Schlüssel suchst, den es
im Wörterbuch nicht gibt.
"Inge"
kommt als Schlüssel im Dictionary
berufe
nicht vor!
Zuletzt stelle ich dir noch die Methode
items()
von Dictionaries vor. Sie
gibt eine Liste der Schlüssel-Wert-Paare, also der Einträge im Dictionary,
als Zweier-Tupel zurück:
>>> berufe.items()
dict_items([('Eva', 'Model'), ('Fritz', 'Lehrer'),
('Buffi', 'Programmierer'), ('Katja', 'Lektorin'),
('Guido', 'Computer-Guru')])
Mit ihr kannst du die letzte
print
-Ausgabe auch so erzeugen:
>>>
for name, beruf in berufe.items():
print ("Der Beruf von {0} ist {1}.".
format(name, beruf))
Wir wollen den Umgang mit Wörterbüchern zuerst in einem ganz kleinen
Programm üben:
>
Öffne ein Editor-Fenster der IDLE und schreibe einen Kopfkommentar
für
passwort.py
.
Wir nehmen an, es ist ein Wörterbuch mit Benutzername-Passwort-Paaren
gegeben. Schreibe folgendes Dictionary in die Datei
passwort.py
:
passwort = { "griemer" : "elli007",
"kkrahl" : "Susim1",
"kschrei" : "gottogott" }
Nun wollen wir eine Funktion
login
definieren, die folgendermaßen funk-
tioniert:
Funktion login():
Parameterliste: leer
wiederhole immerfort:
name
Ö
Eingabe »Benutzername:«
pwd
Ö
Eingabe »Passwort:«
Wenn das Paar name, pwd im Wörterbuch passwort vorkommt:
Ausgabe: Begrüßung
Ausstieg aus der Schleife
Ausgabe: »Anmeldung misslungen«

Get Python für Kids now with O’Reilly online learning.

O’Reilly members experience live online training, plus books, videos, and digital content from 200+ publishers.