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
anzahlanzahl=
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
anzahlwird 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 rangeverwendet. - auf Zeile 8 wird sie für die Anzahl Wiederholungen im
- Zeile 7
- der Startwert der Variable
seitewird auf10festgelegt.- Auf Zeile 9 wird jeweils so viele Schritte vorwärts gemacht, wie der Wert der Variable
seitebeträgt. - Auf Zeile 9 wird jeweils so viele Schritte vorwärts gemacht, wie der Wert der Variable
- Zeile 11
- der Wert der Variable
seitewird nach jeder Wiederholung um10erhöht.- Damit wird bei der nächsten Ausführung der Zeile 9 die Seite um
10Schritte 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
intwandelt eine Eingabe in eine ganze Zahl um. - Der Befehl
floatwandelt 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
TypeErrorWas 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.8Meter- Gewicht
80Kilogramm- Ergebnis
- BMI: 24.691358
n-EckNach 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 *