K103: Arbeiten mit Variablen

In diesem Themenblock lernst Du nun, wie du Zahlen oder auch Texte abspeichern und später im Programm wiederverwenden kannst.

Inhaltsverzeichnis

Dieser Blog wird vom IAIP gratis zur Verfügung gestellt. Der Blog ist ein  Bestandteil des Kurses K103 «Programmieren mit Turtle Graphics» und gehört zur Lektion 4, Themenblock 2 (L4T2).

Der Kurs führt dich durch die einzelnen Blogs, enthält Zusatzmaterialien, Videos, viele Aufgaben mit Lösungen und Quizze zur Lernkontrolle. Der Kurs hat eine Kursgebühr von CHF 50.- Mit dem Einschreiben zum Kurs hilfst du mit, dass solche Blogs auch zukünftig noch gratis zur Verfügung gestellt werden können.

Variablen - eine Einführung

Wahrscheinlich kennst du den Begriff Variable bereits aus dem Mathematikunterricht der Schule:

Eine Variable ist dort nichts anderes wie ein Platzhalter für einen Wert. In der Mathematik ist dieser Wert in den meisten Fällen eine Zahl. Und als Platzhalter verwendet man in der Regel einen Buchstaben. Das ist dann z.B. ein a, b, x oder y.

Weshalb benötigen wir überhaupt solche Platzhalter? Ein Grund ist, dass wir nun allgemeine Formeln aufstellen können. Im Video siehst du, wie das Ganze funktioniert.

Doch zurück zu Python. Betrachten wir als erstes das nachfolgende Beispielprogramm:

from turtle import *

# Variable definieren
länge = 150

# Viereck zeichnen
forward(länge)
right(90)
forward(länge)
right(90)
forward(länge)
right(90)
forward(länge)
right(90)

# Abschluss
exitonclick()

Das Programm zeichnet und ein Quadrat mit einer Seitenlänge von 150. In Zeile 4 haben wir eine Variable definiert. Die Variable hat den Namen länge und einen zugewiesenen Wert von 150. Diesen Platzhalter mit dem Namen länge haben wir dann an verschiedenen Stellen im Programm verwendet (siehe Zeile 7, 9, 11 und 13).

Weshalb? Wir können jetzt den einen Wert in Zeile 4 verändern, beispielsweise auf 350. Bei erneuter Ausführung zeichnet unser Programm nun ein Quadrat mit Seitenlänge 350, ohne dass wir im Programm jede einzelne forward() Anweisung anpassen müssen!

Bei der Definition einer Variable spricht man von einer Zuweisung. D.h. der Wert 150 wird mit dem Zuweisungszeichen = (einfaches Gleichheitszeichen) der Variable bzw. dem Namen länge zugewiesen.

Wenn dir das Ganze etwas abstrakt vorkommt: Variablen oder Platzhalter kannst du dir bildlich wie kleine Kisten vorstellen, die dann mit dem Variablennamen beschriftet werden. In die Kiste legt man den zugewiesenen Wert.

Die allgemeines Syntax einer Zuweisung in Python lautet name = Objekt, wobei «Objekt» hier einfach für unseren Wert steht.

name = Objekt

Das beste Verständnis für Variablen entwickelst du, wenn du es einfach mal ausprobierst.

Hinweis für Fortgeschrittene:

Die Erläuterungen sind stark vereinfacht. In Python arbeitet man viel mit Objekten. Genau genommen ist fast alles in Python ein Objekt. Konkret wird bei dieser Zuweisung ein Name in der lokalen Symboltabelle angelegt und auf ein Objekt referenziert.

Um bei unserer bildlichen Sprache zu bleiben: die Kiste wird nicht mit dem Namen beschriftet, sondern hat eine eindeutige Id. Der Name (die Karteikarte mit der Beschriftung länge) verweist dann auf diese Id.

Ferner hat das Objekt dann nicht nur einen Wert, sondern eine Vielzahl an Attributen und Methoden. Es wird also weit mehr wie nur die blosse Zahl 150 angelegt. Eine ausführliche Beschreibung findest du in unseren Blogs und im Kurs «Einführung in Python Teil II».

Rechnen mit Variablen

Wie man mit Python rechnet, haben wir bereits im vorangehenden Themenblock gesehen. Selbstverständlich können wir nun auch unsere Platzhalter in Rechnungen verwenden. Und wir können bei Zuweisungen anstelle einzelner Zahlen auch gleich ganze Rechnungen hinschreiben.

Hierzu ein kleines Beispielprogramm. Das Programm zeichnet ein Rechteck, welches doppelt so hoch wie breit ist.

from turtle import *

# Variablen anlegen
länge = 100
ecken = 4
höhe = 2* länge
winkel = 360 / ecken

# Rechteck zeichnen
forward(länge)
right(winkel)
forward(höhe)
right(winkel)
forward(länge)
right(winkel)
forward(höhe)
right(winkel)

# Abschluss
exitonclick()

In Zeile 5 errechnen wir die Höhe des Rechtecks, indem wir die bereits definierte Variable länge verwenden. Und in Zeile 6 weisen wir der Variable winkel die Zahl 90 Grad zu, welche sich aus 360 Grad / 4 Ecken ergibt. Das Programm führt erwartungsgemäss zu folgender Ausgabe.

Zuweisungen und Auswertungen

Wir haben gesehen, dass wir Variablen über Zuweisungen definieren können. Links vom Gleichheitszeichen steht der Variablennamen (Platzhalter). Rechts vom Gleichheitszeichen das, was zugewiesen wird (ein Objekt). Ebenfalls haben wir gesehen, dass man unterschiedliche Sachen (Objekte) zuweisen kann, insbesondere:

  • einzelne Werte (wie z.B. eine Zahl: zahl = 5)
  • ganze Ausdrücke mit Rechenzeichen und anderen Variablen (wie z.B. eine Formel: zahl = länge * 2)

In Python werden nun Ausdrück im Moment der Zuweisung stets ausgewertet. Zugewiesen wird also nicht der Ausdruck (die Formel), sondern vielmehr das Resultat des Ausdrucks.

Zur Illustration gehen wir zur Abwechslung wieder einmal in die Shell:

Als erstes wird der Variable a (genau: dem Namen a) der Wert 100 (genau: ein Objekt mit dem Wert 100) zugewiesen. Die Variable a hat nun einen Wert und wir können diesen beliebig oft abfragen, indem wir einfach ihren Namen a verwenden (siehe Zeile 2).

Als nächstes weisen wir der Variable (dem Namen b) einen Ausdruck zu. Hier die Addition a + 5. Python legt nun aber nicht die Addition selber, sondern vielmehr das Resultat der Addition in die entsprechende Kiste mit der Bezeichnung b ab.

Warum ist dies so wichtig? Wenn wir in Zeile 4 den Namen b eingeben, dann bekommen wir die Zahl 105 geliefert. Und wenn wir anschliessend den Wert der Variable a überschreiben (einen neuen Wert an a zuweisen), dann hat dies keine Auswirkung auf den Wert der Variable b.

Position der Zuweisung

Wichtig zu wissen ist, dass man immer zuerst eine Variable anlegen muss, bevor man diese dann verwendet. Das klingt unmittelbar einleuchtend, wird aber gerade von Neueinsteigern immer wieder falsch gemacht. Oftmals sind auch einfach nur kleine Schreibfehler Quelle des Übels.

Betrachten wir das folgende (fehlerhafte) Programm.

from turtle import *

Länge = 100
forward(länge)

....

Das Programm führt bei Ausführung von Zeile 4 zu einem sogenannten NameError:

Der Grund liegt darin, dass Python die Variable länge nicht kennt. Wir haben in Zeile 3 nämlich eine Variable mit dem leicht anderen Namen Länge angelegt. Beachte: Gross- und Kleinschreibung sind in Python bedeutend. Soll heissen, dass die zwei Wörter länge und Länge für Python komplett unterschiedlich sind, auch wenn für uns der Unterschied nur sehr klein ist.

Hinweis für Fortgeschrittene:

Wir können also beispielsweise nicht zuerst eine allgemeine Formel anlegen, und diese dann erst in einem zweiten Schritt mit Werten füllen.

Nachfolgend findest du die Zeilen 4-7 unseres Rechteckbeispiels von oben, jetzt aber in fehlerhafter Reihenfolge.

# Variablen anlegen
höhe = 2 * länge
winkel = 360 / ecken
länge = 100
ecken = 4

Das Programm wird zu einem NameError führen, da Python den in der Zuweisung höhe = 2 * länge verwendeten Namen länge nicht kennt. Python kann den Ausdruck rechts vom Zuweisungszeichen nicht auswerten.

Namensgebung

Wir können also Platzhalter für Texte und Zahlen nutzen, indem wir letztere einer Variable bzw. einem Namen zuweisen. Vielleicht hast du dir bereits die Frage gestellt, welche Namen wir verwenden können?

Bei der Wahl des Namens ist man relativ frei. Denn Python ist sehr flexibel, was die Bezeichnung von Variablen angeht:

Einige Einschränkungen gibt es dann doch noch. Wichtig sind insbesondere: