Zum Hauptinhalt springen
Version: 28Gj

6. Variablen

Einführung

Im vorhergehenden Kapitel haben Sie Quadrate gezeichnet, deren Seitenlänge im Programm fest eingebaut waren. Manchmal möchten Sie aber die Seitenlänge mit einem Eingabedialog einlesen. Dazu muss das Programm die eingegebene Zahl als Variable speichern. Variablen kann man sich wie eine Zügelbox vorstellen, welche mit einem Namen angeschrieben ist. Der Name beschreibt, was sich in der Box befindet, damit man den Inhalt später auch wieder findet.

Variable Zuweisen
Variable Zuweisen

Mit der Schreibweise anzahl = 12 wird eine solche Box erstellt. In Zukunft sagen wir, dass damit die Variable anzahl definiert und ihr einen Wert zugewiesen wird. Um den Inhalt der Box zu erhalten, kann der Name (ohne Anführungszeichen) geschrieben werden. Im Struktogramm werden alle Variablen umrahmt.

anzahl = 12
Ausgabe: anzahl
anzahl = 12
print(anzahl)

Mit Variablen rechnen

anzahl = 12
print(anzahl + 13)

Mehrere Variablen

anzahl = 12
gewicht = 100
print(f'{anzahl} Tafeln Schokolade sind {anzahl * gewicht} g schwer')

Formatierter Text: f'{anzahl} Tafeln'

formatierter Text f''

Variablenwerte lassen sich mit geschweiften Klammern {} in einen Text einfügen. Dazu muss zu Beginn des Textes ein kleines f (für "fromatierten Text") hinzugefügt werden.

name = 'Alfred'
print(f'Hallo {name}')

Überschreiben: Variablen neu Zuweisen

In einer "Zügelbox" kann immer nur ein einziger Wert gelagert werden. Wenn später also ein neuer Wert in eine bereits beschriftete Zügelbox gelegt wird, so wird zu diesem Zeitpunkt dort liegende Wert verdrängt. Künftig wird diese erneute Zuweisung Überschreiben einer Variable genannt.

Variablen überschreiben
Variablen überschreiben
anzahl = 12
print(f'Anzahl = {anzahl}')
anzahl = 7
print(f'Anzahl = {anzahl}')

Im obigen Beispiel wird der initiale Wert der Variable anzahl (12) mit dem neuen Wert 7 überschrieben.

Merke: Gültigkeitsbereich

Die Variable wird nicht rückwirkend verändert. Solange eine Variable nicht überschrieben wird, besitzt sie den aktuell zugewiesenen Wert.

Aufgabe

Was geschieht im untenstehenden Programm? Fügen Sie bei jeder mit print startenden Zeile einen Kommentar hinzu mit:

  • ausgegebene Zahl =>
  • aktuell gespeicherter Wert in der Variable anzahl anzahl=
anzahl = 2
print(anzahl) # => 2, anzahl=2
print(anzahl + 2) #

anzahl = 7
print(anzahl) #
print(anzahl + 2) #

anzahl = anzahl + 3
print(anzahl) #

anzahl = anzahl + 3
print(anzahl + 1) #

anzahl = anzahl + 3
print(anzahl) #
Laden...
Gleichheitszeichen

In der mathematischen Sprache wird das Gleichheitszeichen = als Gleichung interpretiert. In Programmiersprachen wird es als Zuweisung verstanden und die Reihenfolge kann nicht vertauscht werden (z.B. 12 = anzahl ist nicht gültig).

Variablenwert einlesen, verändern und ausgeben

Im Programm kann mit Hilfe einer Eingabebox ein Wert eingelesen und einer Variable zugewiesen werden.

from turtle import *
speed(12)

anzahl = input('Wie viele Strecken soll die Spirale haben?')
anzahl = int(anzahl)

seite = 10
for i in range(anzahl):
forward(seite)
left(90)
seite = seite + 10
Zeile 4
der Wert der Variable anzahl wird eingelesen - die Benutzer:in wird nach einer Zahl gefragt - die Zeile 5 wird erst ausgeführt, wenn die Eingabe gemacht wurde.
Zeile 5
die eingegebene Zahl in eine ganze Zahl (Integer) umgewandelt - ab jetzt kann der Variablenwert als Zahl gebraucht werden.
auf Zeile 8 wird sie für die Anzahl Wiederholungen im for i in range verwendet.
Zeile 7
der Startwert der Variable seite wird auf 10 festgelegt.
Auf Zeile 9 wird jeweils so viele Schritte vorwärts gemacht, wie der Wert der Variable seite beträgt.
Zeile 11
der Wert der Variable seite wird nach jeder Wiederholung um 10 erhöht.
Damit wird bei der nächsten Ausführung der Zeile 9 die Seite um 10 Schritte grösser.
Eingabe

In Python ist das Resultat einer Eingabe immer ein Text. Ein Text kann aber in eine Zahl umgewandelt werden, so dass dann auch damit gerechnet werden kann.

  • Der Befehl int wandelt eine Eingabe in eine ganze Zahl um.
  • Der Befehl float wandelt eine Eingabe in eine Dezimalzahl um.

Eine eingegebene Zahl kann also entweder in eine ganze Zahl (int) oder in eine Dezimalzahl (float) umgewandelt werden.

# Centimeter zu Meter
grösse = input('Wie gross bist du [cm]?')
grösse = int(grösse)
print(f'Ich bin {grösse / 100} m gross')
Die Eingabe 180 wird in eine ganze Zahl umgewandelt und durch 100 geteilt, um die Grösse in Metern zu erhalten.
# Meter zu Centimeter
grösse = input('Wie gross bist du [m]?')
grösse = float(grösse)
print(f'Ich bin {grösse * 100} cm gross')
Die Eingabe 1.80 wird in eine Dezimalzahl umgewandelt und mit 100 multipliziert, um die Grösse in Zentimetern zu erhalten.

Eingabe - Struktogramm

Wird ein Wert über eine Eingabeaufforderung eingelesen, so wird dies im Struktogramm mit einem Parallelogramm angezeigt, wobei auch die Variable, welcher das Resultat zugewiesen wird, festgehalten wird:

grösse = Wie gross bist du [cm]?
Ausgabe: Ich bin grösse cm gross.
grösse = input('Wie gross bist du [cm]?')
print(f'Ich bin {grösse} cm gross')
Aufgabe 1 - BMI

Übersetzen Sie das folgende Struktogramm in Python Code:

grösse = Wie gross bist du [m]?
gewicht = Wie schwer bist du [kg]?
bmi = gewicht geteilt durch das Produkt von grösse mal grösse
Ausgabe: BMI: bmi

Fehler TypeError

Was ist die Bedeutung des folgenden Fehlers?

TypeError: Can't multiply sequence by non-int of type 'str'

→ Der eingegebene Text kann nicht multipliziert werden - zuerst müssen gewicht und grösse in Dezimalzahlen (float) umgewandelt werden: gewicht = float(gewicht).

Funktioniert mein Code?

Probieren Sie den BMI Rechner mit folgendem Beispiel aus:

Grösse
1.8 Meter
Gewicht
80 Kilogramm
Ergebnis
BMI: 24.691358
Laden...
Aufgabe 2 – n-Eck

Nach der Eingabe der Anzahl Ecken in einer Eingabebox soll die Turtle ein regelmässiges n-Eck zeichnen. Beispielsweise wird nach der Eingabe 8 ein 8-Eck gezeichnet. Den passenden Drehwinkel soll das Programm berechnen.

from turtle import *
Laden...
Aufgabe 3

Nach der Eingabe eines Winkels in einer Eingabebox zeichnet die Turtle 30 Strecken der Länge 100, wobei sie nach jeder Strecke um den gegebenen Winkel nach links dreht. Experimentieren Sie mit verschiedenen Winkeln und zeichnen Sie schöne Figuren.

Mit speed(10) können Sie das Zeichnen beschleunigen.

from turtle import *
Laden...