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.
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
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'
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.
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.
Die Variable wird nicht rückwirkend verändert. Solange eine Variable nicht überschrieben wird, besitzt sie den aktuell zugewiesenen Wert.
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) #
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. - auf Zeile 8 wird sie für die Anzahl Wiederholungen im
- Zeile 7
- der Startwert der Variable
seite
wird auf10
festgelegt.- Auf Zeile 9 wird jeweils so viele Schritte vorwärts gemacht, wie der Wert der Variable
seite
beträgt. - Auf Zeile 9 wird jeweils so viele Schritte vorwärts gemacht, wie der Wert der Variable
- Zeile 11
- der Wert der Variable
seite
wird nach jeder Wiederholung um10
erhöht.- Damit wird bei der nächsten Ausführung der Zeile 9 die Seite um
10
Schritte grösser. - Damit wird bei der nächsten Ausführung der Zeile 9 die Seite um
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')
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')
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 = input('Wie gross bist du [cm]?')
print(f'Ich bin {grösse} cm gross')
Übersetzen Sie das folgende Struktogramm in Python Code:
Fehler TypeError
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)
.
Probieren Sie den BMI Rechner mit folgendem Beispiel aus:
- Grösse
1.8
Meter- Gewicht
80
Kilogramm- Ergebnis
- BMI: 24.691358
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 *
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 *