[ Home ] [ Seitenende ]

 

 

 

Micropython, Teil 1

 

In den Micropython Grundlagen, Teil 1Einleitung erste Schritte”, Sprachstruktur, interaktive Konsole, wird das erste Python-Programm "hallo.py" programmiert und im YouTube-Video besprochen:

 

 

(Zum Vergrößern bitte auf das Bild klicken!)

 

Dabei stellt sich heraus, dass das obenstehende Programm “hallo.py” für einen Python-Einsteiger leider gleich auf einmal zu viele Dinge, wie z.B. die Liste “namen” mit Vornamen, die Funktion “sage_hallo()” zum Anzeigen eines einzelnen Vornamens und eine “for”-Schleife mit dem Funktionsaufruf “sage_hallo()” zwecks Anzeige aller Vornamen, enthält, die dem Python-Anfänger noch gänzlich unbekannt sein dürften, sodass er zwar die Funktionsweise des Programms, wenn sie im YouTube-Video besprochen wird, logisch nachvollziehen kann, aber eben nicht wirklich versteht bzw. verstehen kann, um dieses jederzeit fehlerfrei auf dem eigenen Desktop-PC bzw. dem “HELTEC WiFi kit 32”-Mikrorechner reproduzieren zu können.

 

Das für den Python-Einsteiger schwer zu verstehende Programm hat mich deshalb motiviert, das Programm zu analysieren und in mehreren, aufeinander aufbauenden Schritten neu zusammenzusetzen, sodass man die Dinge Schritt für Schritt lernen und besser verstehen kann. 

 

Beginnen wir deshalb mit dem ganz einfachen (Micro-) Python-Programm “micro_python-hallo_01.py”,

 

 

(Zum Vergrößern bitte auf das Bild klicken!)

 

das nichts anderes tut, als den Schriftzug “Hello World!” in der Python-Konsole der “Thonny”-Programmier- und Entwicklungsumgebung anzuzeigen:

 

 

(Zum Vergrößern bitte auf das Bild klicken!)

 

Und, weil das so einfach war und so gut geklappt hat, übersetzen wir im Python-Programm “micro_python-hallo_02.py” die Zeichenkette (= String) “Hello World!” direkt ins Deutsche mit dem String (= Zeichenkette) “Hallo Welt!”:

 

 

(Zum Vergrößern bitte auf das Bild klicken!)

 

Interessant ist dabei, dass mit jedem weiteren “print”-Befehl eine Zeilenschaltung ausgeführt wird, sodass die nächste Ausgabe bzw. String-Anzeige in einer neuen Zeile beginnt:

 

 

(Zum Vergrößern bitte auf das Bild klicken!)

 

Wichtig ist dabei, dass es sich bei der Zeilenschaltung nicht um eine Absatzschaltung handelt!

 

Eine Absatzschaltung ist nämlich eine Zeilenschaltung plus Leerzeile, wie man das im Python-Programm “micro_python-hallo_03.py” ausprobieren kann:

 

 

(Zum Vergrößern bitte auf das Bild klicken!)

 

Nachfolgend die Anzeige mit Absatzschaltung:

 

 

(Zum Vergrößern bitte auf das Bild klicken!)

 

Wie man sieht, werden zwischen “Hello World” und “Hallo Welt!” insgesamt zwei Leerzeilen eingefügt. Die erste Zeilenschaltung wird vom bzw. nach dem Befehl print("Hello World!") veranlasst und die zweite Zeilenschaltung plus einer Leerzeile vom Befehl print(“\n”). Optisch werden deshalb zwei Leerzeilen veranlasst bzw. angezeigt. 

 

Beim Python-Programm “micro_python-hallo_04.py“ wurde die Zeilenschaltung, engl. “new line”, ans Ende des Befehls print("Hello World!\n”) gesetzt,

 

 

(Zum Vergrößern bitte auf das Bild klicken!)

 

sodass nur eine Zeilenschaltung plus eine Leerzeile veranlasst, d.h. ausgegeben wird:

 

 

(Zum Vergrößern bitte auf das Bild klicken!)

 

Beim Python-Programm “micro_python-hallo_05.py“ verwenden wir erstmals eine Variable namens “variable_1” mit dem zugewiesenen Variableninhalt “Hello World!”:

 

 

(Zum Vergrößern bitte auf das Bild klicken!)

 

 

(Zum Vergrößern bitte auf das Bild klicken!)

 

Diesbezüglich verhält es sich bei Programmiersprachen allgemein so, dass eine Variable zunächst deklariert wird, wobei dieser einfach nur gesagt wird, um welchen Typ von Variable es sich handeln soll: Buchstabe, engl. “char(acter)”, Zeichenkette, engl. “str(ing)”, ganzzahliger Wert, engl. “int(eger)”, Fließkommazahl, engl. “float”. 

 

Das Angenehme bei (Micro-) Python ist nun, dass der Typ einer Variablen automatisch anhand der Zuweisung wie z.B. “Hello World!” erkannt wird. Nämlich der Typ “str” für engl. “string”, d.h. Zeichenkette. Das Zuweisen der Zeichenkette “Hello World!” an die Variable “variable_1” nennt man initialisieren (siehe Programm „micro_python-hallo_06.py“): 

 

 

(Zum Vergrößern bitte auf das Bild klicken!)

 

 

(Zum Vergrößern bitte auf das Bild klicken!)

 

Mit dem Statement variable_1 = "Hello World!" wird bei Python und Micropython die Variable “variable_1” deklariert und mit “Hello World!” gleichzeitig initialisiert!

 

Wenn man wissen will, von welchem Typ die Variable “variable_1” ist, dann muss man das Python-Programm “micro_python-hallo_07.py“ aufrufen und ausführen,

 

 

(Zum Vergrößern bitte auf das Bild klicken!)

 

sodass man nachfolgende Bildschirmanzeige erhält:

 

 

(Zum Vergrößern bitte auf das Bild klicken!)

 

Beim Python-Programm “micro_python-hallo_08.py“ wird die erste Initialisierung der Variablen “variable_1” von der zweiten überschrieben:

 

 

(Zum Vergrößern bitte auf das Bild klicken!)

 

Angezeigt wird also der Variablentyp “int”, engl. “integer”, d.h. ganzzahlig:

 

 

(Zum Vergrößern bitte auf das Bild klicken!)

 

Interessant ist auch das Python-Programm “micro_python-hallo_09.py“ bei dem der Variablen “variable_1” eine Dezimal-/Fließkommazahl zugewiesen wird:

 

 

(Zum Vergrößern bitte auf das Bild klicken!)

 

Hier noch die Bildschirmanzeige vom obenstehenden Python-Programm

 

 

(Zum Vergrößern bitte auf das Bild klicken!)

 

Übrigens: Kennen Sie den Unterschied zwischen Zahlen und Ziffern? 

 

Mit Zahlen kann man rechnen, mit Ziffern z.B. nur die Uhrzeit anzeigen. Bei einer Ziffernfolge handelt es sich also um eine Zeichenkette vom Typ “str”, engl. “string”.

 

Beim Python-Programm “micro_python-hallo_10.py“ wird die Variable “variable_1” zunächst mit einem leeren Textstring versehen. Und zwar mit dem Statement “variable_1 = str()”:

 

 

(Zum Vergrößern bitte auf das Bild klicken!)

 

Im zweiten Schritt erfolgt dann die Wertzuweisung in Form des Textstrings “Hello World!”, sodass sich nachfolgende Bildschirmanzeige ergibt:

 

 

(Zum Vergrößern bitte auf das Bild klicken!)

 

Beim Python-Programm “micro_python-hallo_11.py“ soll die Variable “variable_1” zunächst mit einer Fließkommazahl versehen werden, die allerdings gleich durch das Statement “str()” in eine Zeichenkette mit den Ziffern “0.12345” umgewandelt wird:

 

 

(Zum Vergrößern bitte auf das Bild klicken!)

 

Die Bildschirmanzeige zum Programm „micro_python-hallo_11.py“ ist, wie man sieht, nicht spektakulär: 

 

 

(Zum Vergrößern bitte auf das Bild klicken!)

 

Wir wissen inzwischen, dass man mit einer Zeichenfolge, die aus Ziffern besteht, wie z.B. “012345”, nicht rechnen kann. Eben weil Ziffern keine Zahlen sind.

 

Wenn man aber trotzdem mit Ziffern rechnen will, dann muss man diese vor dem Rechnen in einen ganzzahlige Wert, engl. “int(eger)” oder in eine Fließkommazahl, engl. “float”, umwandeln (siehe Programm „micro_python-hallo_12.py“):

 

 

(Zum Vergrößern bitte auf das Bild klicken!)

 

Von außen betrachtet, d.h. ausgehend von der Anzeige auf dem Display, sieht man es dem Programm nicht an, ob es sich bei der Zeichenfolge “12345” in Wirklichkeit um einen String handelt oder um die Zahl 12345 selbst, die im Dezimalzahlensystem zur Basis 10 den (Zahlen-) Wert zwölftausenddreihundertfünfundvierzig, kurz 12 345 hat. 

 

Nur wenn man sich den Typ der Variablen “variable_1” anzeigen lässt, erfährt man, dass der Variableninhalt vom Typ “int(eger)”, d.h. ganzzahlig ist, sodass es sich bei der Zeichenfolge “12345” in Wirklichkeit um eine Zahl handelt:

 

 

(Zum Vergrößern bitte auf das Bild klicken!)

 

Die vorangestellte “0” bei der Zeichenkette “012345” wird, wie man bei der obenstehenden Bildschirmanzeige sieht, bei der Umwandlung in die Ganzzahl 12345 unterdrückt, obwohl die Zahl 0 eben auch eine Zahl ist. -

 

Beim Python-Programm “micro_python-hallo_13.py wird erstmalig eine sogenannte Liste verwendet. Und zwar die Liste „variablen_Liste”, die zwei Elemente in Form der Variablen “variable_1” und “variable_2” enthält.

 

Eine Liste kann also nicht nur Elemente mit (Text-) Strings, Ganzzahlen, Fließkommazahlen oder booleschen Werten “True” (= wahr, richtig) oder “False” (= unwahr, falsch) enthalten, sondern eben auch Variable:

 

 

(Zum Vergrößern bitte auf das Bild klicken!)

 

Dabei lässt sich eine Liste auch kombiniert mit unterschiedlichen Typen von Elementen usw. füllen. Auch mit dem Aufruf einer Funktion, einer Methode (= Funktion innerhalb einer Klasse) oder eines Objektes, wie wir später noch sehen werden.  

 

Da wir die (Namens-) Liste “variablen_Liste” mit den beiden Variablen “variable_1” und “variable_2” unwissentlich vom Typ „tuple“ ( = mit runden Klammern! ) versehen haben, lässt sich diese leider nicht dynamisch verwenden, lassen sich dem ersten Element mit der Variablen “variable_1” oder dem zweiten Element mit der Variablen “variable_2” später keine weiteren Werte, andere Strings oder Variablen mehr zuweisen, d.h. nachträglich erweitern:

 

          variablen_Liste = variablen_Liste + ( variable_3, variable_4 )

 

 

In diesem Zusammenhang lässt sich zwar eine einfache, d.h. eindimensionale Liste mit einem sogenannten eindimensionalen Array vergleichen. Trotzdem gilt es dabei aber zu beachten, dass eine „tuple“-Liste prinzipiell eine Datensatzliste ist und kein Array. 

 

Im Gegensatz zu anderen Programmiersprachen wie z.B. C/C++ oder Java gibt es in Python von Haus aus, d.h. standardmäßig keine Arrays, da man mittels „list“-Listen vom Typ „list“ [ = mit eckigen Klammern! ] praktisch auch alles bewerkstelligen und umsetzen kann, was man mit Arrays machen kann:

 

          variablen_Liste = variablen_Liste + [ variable_3, variable_4 ]

 

 

Arrays in C/C++ bekommen im Arbeitsspeicher des Rechners einen festen Speicherbereich zugewiesen, der nicht wie in einer sogenannten Sandbox gekapselt und demzufolge gegen Manipulation abgeschottet ist. 

 

Bei einem Array wird mittels eines Zeigers, engl. “pointer”, auf einzelne Elemente des Arrays verwiesen und diese bei Bedarf, d.h. bei einem gezielten Zugriff zwecks Verarbeitung zugegriffen. Der Zugriff auf einzelne Elemente eines Arrays erfolgt dabei über die sogenannte Indexierung des Arrays, eben mittels des Pointers. 

 

Da das Array im Arbeitsspeicher des PCs zwecks schnellem, indexiertem Zugriff auf dem sogenannten Stack abgelegt wird und sich der Stack seitens des (Windows-) Betriebssystems und des verbauten Intel- oder AMD-Prozessors manipulieren lässt, beherbergen Arrays, insbesondere die Pointer auf diese, ein entsprechendes Sicherheitsrisiko. Das liegt aber prinzipiell nicht an den Arrays selbst, sondern an der Arbeitsweise und Verwaltung des Stacks.

 

Da der Stack am Ende des Arbeitsspeichers, d.h. oben über dem normalen Speicher, angesiedelt ist, lässt sich dieser spontan nicht beliebig vergrößern.

 

Während sich also ein in C/C++ programmiertes Array jederzeit beliebig mit Contents “aufblasen”, d.h. vergrößern lässt, ist dies bei dem Stack nicht zwangsläufig möglich.

 

Der schwarze Peter liegt also beim Stack, der immer erst nachträglich merkt, dass er zu klein ist, um ein vergrößertes Array vollständig aufzunehmen. Das ist dann so ähnlich wie an der Straßenbahnhaltestelle, wo viele Personen in die Straßenbahn einsteigen wollen und dann erst merken, dass diese bereits voll besetzt ist bzw. nicht alle aufnehmen kann. 

 

Kurz und knapp, Python umgeht die Probleme mit den Arrays, den Pointern und dem Stack, indem ganz einfach auf Arrays verzichtet wird. Trotzdem lässt sich in Python ein entsprechendes Array-Modul importieren, sodass sich mittels diesem auch Arrays programmieren lassen.

 

Schauen wir uns abschließend noch die Ausgabe/Anzeige des Python-Programms “micro_python-hallo_13.py“ an:

 

 

(Zum Vergrößern bitte auf das Bild klicken!)

 

Beim Python-Programm “micro_python-hallo_14.py“ werden erstmals einzelne Elemente aus der („tuple“-) Liste “variablen_Liste” angesprochen und mittels dem entsprechenden “print()”-Statement ausgegeben, d.h. angezeigt:

 

 

(Zum Vergrößern bitte auf das Bild klicken!)

 

Da Computer, d.h. deren Prozessoren, im Inneren nur mit Nullen und Einsen binär rechnen, ist die Zahl 0 für den Computer von maßgeblicher Bedeutung. 

 

Das gilt sinngemäß auch für die einzelnen Elemente der Liste “variablen_Liste”, deren Indexierung stets bei Null beginnt (siehe oben im Programm). 

 

Interessant ist bei dem obenstehenden Programm noch, dass man bei der “print”-Ausgabe mit den verbundenen (“+”) Elementen 

 

print("English spoken: " + str(variablen_Liste[0]) + ", German spoken: " + ...

 

auf die String-Umwandlung “str()” verzichten kann, da beide Variablen “variable_1” und “variable_2” nur Zeichenketten, engl. “str(ings)”, enthalten, die für die “print()”-Anzeige nicht eigens in einen String umgewandelt werden müssen:

 

 

(Zum Vergrößern bitte auf das Bild klicken!)

 

Ändert man den Variableninhalt der Variablen “variable_1” mit dem Statement

 

variable_1 = str("Hello World!") 

 

auf das Statement

 

          variable_1 = 012345

 

ab, dann kommt es bei der späteren Programmausführung in der Zeile

 

          print("English spoken: " + variablen_Liste[0] + ", German spoken: " + …

 

zum Programmabbruch und einer entsprechenden Fehlermeldung! -

 

Wie bereits erwähnt, ist die Stringumwandlung bei der Initialisierung der Variablen “variable_1” beim Statement

 

variable_1 = str("Hello World!")

 

logischerweise nicht erforderlich, das es sich bei der Zuweisung der Zeichenkette “Hello World!” bereits um einen String handelt. - 

 

Beim Python-Programm “micro_python-hallo_15.py

 

 

(Zum Vergrößern bitte auf das Bild klicken!)

 

wird im Statement

 

          variablen_Liste = tuple()

 

zunächst eine leere Liste vom Typ “tuple()” deklariert, kurz darauf aber mit dem Statement

 

          variablen_Liste = (variable_1, variable_2)

 

initialisiert und überschrieben. -

 

Obwohl das Deklarieren (= Festlegen des Typs einer Variablen mit leerem Inhalt) im allgemeinen in Python nicht erforderlich ist, weil das Bestimmen und Festlegen eines Variablentyps bei der Initialisierung automatisch vorgenommen wird, gibt es bei der Programmierung in Python trotzdem Situationen, wo man zunächst eine Deklaration vornehmen muss, weil das Initialisieren einer Variablen mit einem Inhalt erst zu einem späteren Zeitpunkt möglich ist! 

 

Als Beispiel sei hier das Anlegen eines neuen, anfangs leeren Objektes mit einer Klasse und einer Methode (= Funktion innerhalb einer Klasse) genannt. Wenn dabei die in der Klasse enthaltene Funktion aus irgendeinem Grund gleich beim Programmstart ausgeführt werden soll, dann geht das nur, wenn die Funktion einer Klassenvariablen zugeordnet wird, sodass diese zur Methode wird. Dabei muss die Klassenvariable, mittels der sich die Funktion direkt beim Programmstart ausführen lässt, deklariert werden, d.h. einem Typ von (Klassen-) Variablen zugeordnet werden. Auch und weil es anfangs für die (Klassen-) Variable keinen Inhalt, keinen Wert gibt.

 

Mit dem Python-Programm “micro_python-hallo_16.py“ wird erstmals der Befehl “len()” benutzt mit dem sich die Anzahl der Elemente einer Liste ermitteln lässt:

 

 

(Zum Vergrößern bitte auf das Bild klicken!)

 

Nachfolgend die dazugehörige Bildschirmanzeige:

 

 

(Zum Vergrößern bitte auf das Bild klicken!)

 

Mit dem Python-Programm “micro_python-hallo_17.py“ wird die Anzahl der Elemente der Liste “variablen_Liste” ermittelt und dazu verwendet, um in der “while”-Schleife die Elemente der Liste, konkret die Inhalte der Variablen-Elemente mittels des “print()”-Befehls zeilenweise anzuzeigen:

 

 

(Zum Vergrößern bitte auf das Bild klicken!)

 

Da die indexierten Listenelemente “variablen_Liste[n]” mittels des Schleifenzählers n der Reihe nach, d.h. aufsteigend, ausgelesen und mittels “print()”-Befehl innerhalb der “while”-Schleife zeilenweise angezeigt werden, muss der Schleifenzähler n am Ende der “while”-Schleife mittels des Statements “n = n + 1” jeweils um + 1 erhöht werden: 

 

 

(Zum Vergrößern bitte auf das Bild klicken!)

 

Das schrittweise Erhöhen des Schleifenzählers um + 1 nennt man auch inkrementieren, das Verringern des Schleifenzählers um - 1 dekrementieren! 

 

Beim Python-Programm “micro_python-hallo_18.py“ wird noch etwas Programmkosmetik angewandt,

 

 

(Zum Vergrößern bitte auf das Bild klicken!)

 

indem die Ausgabe bzw. die Bildschirmanzeige noch etwas aufgehübscht wird. Dabei fällt wieder auf, dass die Indexierung der Listenelemente bei der laufenden Nr. = 0 beginnt:

 

 

(Zum Vergrößern bitte auf das Bild klicken!)

 

Mit dem Python-Programm “micro_python-hallo_19.py“ nähern wir uns wieder dem Ausgangsprogramm “hallo.py” an, indem es ja um das Anzeigen der Namensliste “vornamen_Liste” = (“Max", "Peter", "Monika", "Petra") geht.

 

Allerdings verwenden wir in der Namensliste keine statischen Werte in Form der Vornamen, sondern dynamische, indem wir die Variablen “vorname_1”, "vorname_2”, “vorname_3” und "vorname_4” verwenden:

 

 

(Zum Vergrößern bitte auf das Bild klicken!)

 

Nachfolgend noch die zum Programm gehörende Bildschirmanzeige:

 

 

(Zum Vergrößern bitte auf das Bild klicken!)

 

Als nächstes programmieren wir beim Programm “micro_python-hallo_20.py“ erstmals eine Funktion und zwar die Funktion namens “einlesen_Vornamen()”. Wie der Funktionsname bereits ausdrückt, sollen mit der Funktion später die Vornamen der Namensliste “vornamen_Liste” aus- und in die Funktion eingelesen werden:

 

 

(Zum Vergrößern bitte auf das Bild klicken!)

 

Nachdem die noch leere Funktion “einlesen_Vornamen()” funktioniert, geht es nachfolgend darum, dass wir diese “füllen”, indem wir die Liste “namens_Liste” mit den Vornamen in die Funktion holen, diese zwecks Überprüfung mittels der “while”-Schleife anzeigen lassen und über das Statement “return(namens_Liste)” wieder an das Hauptprogramm zurückgeben (siehe Programm „micro_python-hallo_21.py“):

 

 

(Zum Vergrößern bitte auf das Bild klicken!)

 

Nachfolgend die Kontrollanzeige in der obenstehenden “while”-Schleife der Funktion “einlesen_Vornamen()” zwecks Überprüfung der Liste “namens_Liste”:

 

 

(Zum Vergrößern bitte auf das Bild klicken!)

 

Bei der obenstehenden Funktion “einlesen_Vornamen()” des Python-Programms “micro_python-hallo_21.py“ gilt es zu beachten, dass die in der Funktion verwendeten Variablen nebst der initialisierten Inhalten nur innerhalb der Funktion selbst gültig sind. Das gilt natürlich auch für die Liste “namens_Liste”, auf die sich von außen, d.h. vom Hauptprogramm aus, nicht zugreifen lässt. Demzufolge sind alle Variablen, Variableninhalte und Listen innerhalb der Funktion “einlesen_Vornamen()” gekapselt, d.h. abgeschottet! 

 

Mit dem Funktionsausgang “return(namens_Liste) (siehe oben) lässt sich allerdings die interne Namensliste an das Hauptprogramm wie folgt übergeben:

 

 

(Zum Vergrößern bitte auf das Bild klicken!)

 

Die Bildschirmanzeige des Hauptprogramms “micro_python-hallo_21.py” mit der Ausgabe/Anzeige der Namensliste sieht dann wie folgt aus: 

 

 

(Zum Vergrößern bitte auf das Bild klicken!)

 

Die im Programm “micro_python-hallo_21.py” programmierte Funktion “einlesen_Vornamen()” hat aber nicht nur einen (Funktions-) Ausgang mit dem Statement “return(namens_Liste)”, sondern auch einen (Funktions-) Eingang “()”, den wir bisher aber noch nicht benutzt haben. 

 

Mit dem Programm “micro_python-hallo_22.py” ändert sich das aber, programmieren wir einen Funktionseingang und zwar im Funktionskopf

 

 

(Zum Vergrößern bitte auf das Bild klicken!)

 

Wie man im obenstehenden Sourcecode (= Quell-/Programmkode) sieht, wird die Namensliste vom Typ “tuple“ im Funktionskopf deklariert

 

einlesen_Vornamen(namens_Liste : tuple)

 

und erst später mit dem Funktionsaufruf

 

          vornamen_Liste = einlesen_Vornamen(("Max", "Peter", "Monika", "Petra"))

 

initialisiert, d.h. mit Inhalten in Form der Vornamen versehen! Demzufolge sieht der Funktionsaufruf im Hauptprogramm nun folgendermaßen aus:

 

 

(Zum Vergrößern bitte auf das Bild klicken!)

 

Beim Programm “micro_python-hallo_23.py” wird nun noch eine Ausgabe-/Anzeige-Funktion “ausgabe_Vornamen(hole_vornamensListe) programmiert: 

 

 

(Zum Vergrößern bitte auf das Bild klicken!)

 

Bei der obenstehenden Ausgabe-/Anzeige-Funktion fällt im Funktionskopf auf, dass die (Listen-) Variable “hole_vornamensListe” wider Erwarten nicht als Typ “tuple” deklariert wurde, da die Namensliste “vornamen_Liste” im Hauptprogramm bereits Inhalte in Form der Vornamen enthält, also bereits initialisiert ist:

 

 

(Zum Vergrößern bitte auf das Bild klicken!)

 

Die Bildschirmanzeige des Programms “micro_python-hallo_23.py” mit der Ausgabe/Anzeige der Namensliste sieht wie folgt aus: 

(Zum Vergrößern bitte auf das Bild klicken!)

 

Im Zusammenhang mit der Liste “vornamen_Liste” der Ausgabe/Anzeige stellt sich noch die Frage, ob es auch möglich ist, dass man sich nur einen einzelnen Vornamen aus der Namensliste anzeigen lässt.

 

Prinzipiell ist das kein Problem, da ja die Namensliste und deren einzelne Elemente indexiert sind, sodass sich ein einzelnes Element über den Index auswählen und wie im Programm “micro_python-hallo_24.py” realisiert, darstellen/anzeigen lässt:

 

 

(Zum Vergrößern bitte auf das Bild klicken!)

 

Wie man bei der obenstehenden Funktion “einzelner_Vorname()” sieht, muss man der Funktion zwei Parameter mit auf den Weg geben. Und zwar die Namensliste “hole_vornamenListe” und den entsprechenden Index “lfd_Nr”. 

 

Dabei muss die Namensliste “hole_vornamenListe” im Funktionskopf nicht extra als vom Typ “tuple” deklariert werden, das die Namensliste ja bereits dem Hauptprogramm bekannt ist und dem Funktionsaufruf nur noch mit auf den Weg gegeben werden muss.

 

Da es für den Anwender wenig Sinn macht, dass er sich einen indexierten (= “lfd_Nr”) Vornamen anzeigen lässt, den es gar nicht gibt, weil er nicht in der Liste steht bzw. dessen “lfd_Nr”-Index sich außerhalb des Listenbereichs von [0 … 3] befindet, fragen wir mit dem Statement “len(vornamen_Liste)” die Anzahl der Listenelemente (= 4 Elemente bzw. Vornamen) ab. Diesbezüglich müssen wir aber von der max. Anzahl der Listenelemente noch 1 subtrahieren, da der Index der Namensliste beim Element mit dem Index = 0 beginnt:

 

element_Nr_str = input("Welcher Vorname [0 ... "

+ str(len(vornamen_Liste) - 1) + "] soll angezeigt werden? ")

 

 

(Zum Vergrößern bitte auf das Bild klicken!)

 

Die Bildschirmanzeige des obenstehenden Programms “micro_python-hallo_24.py” mit der Ausgabe/Anzeige der Namensliste sieht dann wie folgt aus:

 

 

(Zum Vergrößern bitte auf das Bild klicken!)

 

Bei der gewünschten Anzeige eines einzelnen Vornamens (siehe oben) kann es seitens des Anwenders durchaus vorkommen, dass dieser einen falschen Wert für den Listenindex von [0 … 3] eingibt, wie oben im Programm programmiert, auf seinen Fehler hingewiesen wird und sich dabei ärgert, weil er seinen Eingabefehler wider Erwarten nicht durch eine erneute Eingabe korrigieren kann. 

 

Um den Anwender im Falle einer Falscheingabe nicht zu frustrieren, sollten wir ihm eine neue Chance geben und eine weitere, korrigierte Eingabe ermöglichen! 

 

Zu diesem Zweck müssen wir die “input”-Eingabe im Programm “micro_python-hallo_25.py” in die Funktion “einzelner_Vorname()” verschieben. Außerdem müssen wir den boolschen (Wahrheits-) Schalter “wiederhole_Eingabe = False/True” entsprechend programmieren 

 

 

(Zum Vergrößern bitte auf das Bild klicken!)

 

und je nach Eingabe auf die richtige oder falsche (Index-) Namensabfrage im oder außerhalb des (Index-) Bereichs [0...3] reagieren und ggf. eine Wiederholung der “input”-Eingabe veranlassen. 

 

In diesem Zusammenhang muss man wissen, dass man einer Funktion einen booleschen Wahrheitswert “False/True” zuweisen und quasi mit auf den Weg geben kann:

 

 

(Zum Vergrößern bitte auf das Bild klicken!)

 

Die Bildschirmanzeige, d.h. die Anzeige/Ausgabe, sieht dann, je nach Eingabe des (Namens-) Index, wie folgt aus (siehe Programm „micro_python-hallo_25.py“):

 

 

(Zum Vergrößern bitte auf das Bild klicken!)

 

Jetzt sind wir an einem Punkt angelangt, wo wir das einfache Programm zum Einlesen, Auslesen und Anzeigen der Namensliste schon recht weit getrieben haben. Was jetzt noch fehlt, wäre, dass sich die Namensliste nachträglich noch erweitern lässt, indem man weitere Vornamen an die vorhandene Liste anhängt oder aber auch aus der vorhandenen löscht!

 

Bei den bisherigen Programmen haben wir bis jetzt umgangssprachlich(!) von einer Liste mit Vornamen gesprochen, obwohl es sich bei dieser stets um ein engl. “tuple”, d.h. einen Datensatz vom (Daten-) Typ “tuple”, der sich aus mehreren Datenfeldern zusammensetzt, handelte:

 

          namens_Liste = (“Max”, “Peter”, “Monika”, “Petra”)

 

Ein Datensatz vom Typ “tuple” wie z.B. die “namens_Liste” ist aber stets statisch mit dem Nachteil, dass sich dieser nicht ändern oder durch Anhängen eines weiteren Vornamens erweitern lässt! Demzufolge lassen sich auch einzelne Datenfelder inhaltlich/datenmäßig nicht verändern, sodass sich aus dem Peter keine Petra machen lässt und umgekehrt!

 

Da wir aber die Namensliste, pardon den Datensatz, mittels weiterer Vornamen erweitern wollen, müssen wir uns vom “tuple”-Datensatz verabschieden und uns der “list”-Datenliste vom Typ “list” wie folgt zuwenden:

 

          namens_Liste = [“Max”, “Peter”, “Monika”, “Petra”]

 

Zum Glück verhält es sich so, dass wir beim Programm “micro_python-hallo_26.py” nur ganz wenige Änderungen vornehmen müssen, als da sind:

 

1.    Im Hauptprogramm:

 

          vornamen_Liste = einlesen_Vornamen(["Max", "Peter", "Monika", "Petra"])

 

2.    Im Funktionkopf der Funktion “einlesen_Vornamen()”

 

def einlesen_Vornamen(namens_Liste : list):

 

Wenn man das entsprechend geänderte Programm “micro_python-hallo_26.py” aufruft und sich die Ausgabe/Anzeige der “list”-Namensliste anzeigen lässt, dann bekommt man folgende Bildschirmanzeige angezeigt:

 

 

(Zum Vergrößern bitte auf das Bild klicken!)

 

Wie man im Programmkode des Programms “micro_python-hallo_26.py” unschwer sieht, ist es ganz einfach, die beiden Vornamen “Dieter” und “Karin” der bisherigen “list”-Namensliste hinzuzufügen:

 

 

(Zum Vergrößern bitte auf das Bild klicken!)

 

Weiter zum „Micropython“-Programmieren, Teil 2  

 

 

 

[ Home ] [ Seitenanfang ]