Skip to main content


Zutaten: Zucker, Kakaomasse (50%), Milchzucker, Weizenmehl, Vollmilchpulver, Magermilchpulver, Butterreinfett, Sahnepulver, Butter (1,4%)
Kann Spuren von Analysis und Geometrie enthalten.

IV_23_tiergarten-titel_02

Wie Lila in TigerJython mit Datenbanken arbeitet

In Berlin ist es recht warm geworden. Nach dem Deutsch-Kurs sitzt Lila mit ihrem Notebook im schattigen Grün des Tiergartens. Sie möchte sich gern auf ihr Studium vorbereiten, ein bisschen Zeit ist ja noch, sich zu entscheiden: Mathe, Informatik, Angewandte Mathe. Sie geht die Files vom Informatik-Lehrbuch für Schüler der Sekundarstufe 1 durch. Am Ende des Kurses gibt es eine Einführung in die Programmierung von Datenbanken mit TigerJython. TigerJython hat sie auf ihrem Notebook installiert, wunderbar, das steht kostenlos zur Verfügung. Datenbanken sind das Mittel, Daten zu sammeln und erneut zu nutzen. Vor allem sind sie vom Programm der Erzeugung entkoppelt. Beispielsweise kann man eine Datenbank zur Organisation eines Volkslaufes benutzen. Doch bei Lila klappt das nicht. Sie erzeugt eine Liste für den Lauf und beim erneuten Aufruf sind alle neuen Einträge weg. Bloß gut, dass sie nicht wirklich beim Volkslauf helfen soll. Sie stellt sich vor, es gibt einen Volkslauf hier im Tiergarten und ihre Datenbank funktioniert nicht. Das wäre schlimm!

Doch sie will das verstehen. Sie geht das Kapitel ganz genau durch. Ihr Deutsch ist noch nicht so toll. So übersetzt sie die Definition einer Datenbank mit Google ins Englische (https://translate.google.com/):

Definition Datenbank (engl.)

“A database is a collection of variables whose values are stored permanently. Thus, the data and not the programs are in the foreground here. The programs come and go, but the data stays.”

Naja, dieses Englisch ist nicht perfekt. Vielleicht hat sie gar keine Datenbank angelegt, wenn ihre Daten gar nicht permanent gespeichert werden? Was bedeuten “collections of variables” und “The programs come and go, but the data stays”?

Erzeugung einer Datenbank (engl)

Lila ist ganz verzweifelt. Sie versteht es nicht. Na gut, das ist die Definition. Aber das Nächste ist die Erzeugung einer Datenbank:

DB = \mathrm{Database}(“meine_datenbank”)

“The second line opens the database and the variable DB assigned. In order to open a new database, we have to enter a file name. Our database has the file name my_database.”

Dieses Google-Englisch kann sie nicht verstehen. Wird die Datenbank zweimal geöffnet? Wie wird der Filename zugewiesen? Welche Dateiendung gibt es und wo liegt das File? So viele Fragen. Alle deutschen Schüler und Schülerinnen schaffen das, aber Lila nicht. Vielleicht war das eine blöde Idee mit dem Studium in Deutschland? Soll sie nicht lieber nach Hause fahren? Jetzt gleich?

Doch dann kommt endlich Max und hilft ihr.

Max Hi Lila, wie geht es Dir?

Lila Schlecht! Hier schau mal, ich kriege nach dem Buch diese Datenbank nicht geöffnet und die Variablen nicht organisiert. Ich verstehe es nicht!

Max Lila, zeig mal! Ach ja, das ist nicht gut beschrieben. Bei uns in der Firma legen wir auch für jedes Projekt eine Datenbank an. Ich darf das nicht, das macht der Admin. Eine Datenbank wird am besten mit einem Programm erzeugt, in a single program, you know, die Variablen vereinbart, und die Daten werden dann mit einem anderen Programm erzeugt. So steht es hier auch, nur ein bisschen umständlich.

Lila Na gut. So einen Volkslauf kriege ich vielleicht noch nicht gleich hin. Lass uns mit Integern anfangen. Ich würde so ein Array von Integern n nennen. Und die Datenbank \mathrm{data}.

Max Gut. So geht es:

IV_23-code_start_01
Erzeugung einer Datenbank \mathrm{data} im File database_hello_world.pydb im selben Verzeichnis wie das erzeugende File datenbank_hello_start_09.py mit dem leeren Array n.

 

Daten in die Datenbank mit append( · )

Lila Jetzt kommen da ein paar Daten hinein. Du sagst, ich soll ein neues Programm schreiben? Ich probiers:

IV_23-code_append_02-0
Anhängen mit \mathrm{append} (\;\cdot\;) von einem Wert (hier 0) an das Array n in der Datenbank \mathrm{data}

Max Hey, das klappt ja!

1. Fall: Löschen von Daten mit remove( · )

Lila Gut, super! Jetzt würde ich gern Daten löschen. Da gibt es den Befehl

\mathrm{remove}(\;\cdot\;)

dafür. Mich wundert, dass nicht konkrete Stellen im Array angesprochen werden, sondern Inhalte gelöscht werden. Ob das gut geht?

IV_23-code_remove_a_02-ok
Entfernen der Stelle mit der Null aus dem Array n in der Datenbank \mathrm{data} mit \mathrm{remove}(\;\cdot\;)

Max Na, siehst Du!

Lila Da sieht man, dass Du schon in einer Firma arbeitest. Da gibt es keinen Luser!

Max Loser, luser?

Lila Deutsch heißt das glaube ich DAU, der dümmste anzunehmende User! Kennst Du den nicht? Den hat mir meine Freundin Maya introduced. Du musst immer ein bisschen DAU sein, sonst geht alles schief!

Max Hahaha!

2. Fall: Löschen von nicht vorhandenen Inhalten

Lila Warte mal, wenn ich ein Array ohne Null habe, und dann den Befehl

\mathrm{remove} (0)

aufrufe, was passiert dann?

Max Das wird wohl schiefgehen!

Lila Okay, hier:

IV_23-code_remove_a_02-failed
Fehlermeldung und Abbruch des Programms

 

Max Hm, Lila, dann musst Du wohl vor dem Löschen immer erst die Inhalte abfragen.

3. Fall: Unvollständiges Löschen in for-Schleifen

Lila Okay, dann gehe ich mein Array n durch, vom Anfang bis zum Schluss, mit der for-Schleife, ich frage jede Stelle im Array ab. Was Null ist, wird gelöscht.

Max Ja, so müsste es klappen!

Lila Just a moment, hier:

IV_23-code_remove_b_01
Prüfen der Inhalte und unvollständiges Entfernen mit \mathrm{remove} (\;\cdot\;) im speziellen Beispiel.

 

Max Hey, das hat nicht vollständig geklappt! Warte, wir gehen das mal Schritt für Schritt durch:

iV_23_remove_06-04
Analyse des speziellen Beispiels

 

(1) Die 1. Stelle im Array wird untersucht. Die kriegt in allen Programmiersprachen die interne Nummer 0.
(2) Es wird eine Null festgestellt und gelöscht.
(3) Die restlichen Stellen rücken auf, die nächste Stelle wird untersucht.

Lila Hey Max, ja, hier liegt das Problem! Am Weiterrücken! Jetzt geht es immer so weiter!

(4) Es wird eine Null festgestellt und gelöscht.
(5) Die restlichen Stellen rücken auf, die nächste Stelle wird untersucht.
(6) Es wird eine Null festgestellt und gelöscht.

Ja, so bleiben auf den Stellen, die gelöscht wurden und Nullen nachgerückt sind, Nullen stehen, weil die nicht erneut getestet wurden. Komisch, dass ich die erste bin, die das feststellt.

Max Ja, DAUs sind manchmal sehr intelligent!

Lila Danke! O Mann, sind diese Datenbanken kompliziert! Dieses \mathrm{remove} (\;\cdot\;) entfernt also nur den ersten gefunden Wert in einer Liste? Und wenn ich Stelle für Stelle hindurchgehe, dann rückt an die gerade geprüfte Stelle der rechte Nachbar und wird nicht wieder geprüft? Shit!!!!!! Was nun?

Löschen mehrerer Inhalte – Lösung

Max Ist doch klar, Du kannst nicht einfach durch das Array durchgehen! Du musst Dir die Stelle merken! Nur, wenn der Inhalt nicht gelöscht werden soll, gehst Du weiter, sonst musst Du immer die gleiche Stelle prüfen.

Lila Oooh, das ist so eine Schleife, die mir Angst macht. Vielleicht komme ich da nicht raus?!

Max Ich glaube, die haben hier nur endlich lange Arrays. Die Länge des Arrays ändert sich natürlich, das musst Du prüfen, das ist auch das Schleifenende.

Lila Na gut. Dann klappt das vielleicht doch mit einer Datenbank für einen Volkslauf.

***

Übungsaufgabe

Schreibe ein Programm, das alle Nullen aus einem Array entfernt!

Lösung

 

IV_23-code_remove_c_01
Entfernen von allen Nullen aus dem Array n in der Datenbank \mathrm{data} im File database_hello_world.pydb

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Wir freuen uns, dass Du einen Kommentar hinterlassen möchtest. Denk bitte daran, dass Du dich durch das Abschicken des Kommentars mit unseren Nutzungsbedingungen einverstanden erklärst.