Variablen und Typen — wie sich ein Programm merkt
Werte in Variablen speichern, die Regeln für ihre Namen und die vier grundlegenden Typen — int, float, str, bool — plus der Fehler, auf den Anfänger am häufigsten stoßen.
Wie möchtest du lernen?
Das Problem, das wir lösen
Bisher konnten unsere Programme sich nichts merken. Was ausgegeben wurde, war weg.
Echte Arbeit funktioniert nicht so. In einem Abrechnungsprogramm wird ein Preis einmal berechnet und an drei Stellen gebraucht. In einem Bericht muss erst eine Summe ausgerechnet und dann später verwendet werden. Das Programm muss sich erinnern.
Und es gibt ein zweites Problem nebenbei. Im letzten Kapitel ergab "2" + "3" das Ergebnis 23, während 2 + 3 ergab 5 — dasselbe Symbol, zwei Verhaltensweisen. Das liegt daran, dass Python diese beiden Dinge für verschiedene Arten hält. Die Art nennt man Typ, und der größte Teil der Fehler, die Anfänger machen, kommt daher.
Am Ende dieses Kapitels kannst du
- Einen Wert in einer Variable speichern und ihn später ändern
- Namen wählen, die Python akzeptiert und die ein Mensch lesen kann
- Die vier grundlegenden Typen erkennen:
int,float,str,bool - Den Typ eines beliebigen Werts mit
type()untersuchen - Eine
TypeErrorlesen und genau sagen, worüber sich Python beschwert
Voraussetzungen: Sehen mit print, erklären mit Kommentaren.
Eine Variable ist ein Name
city_count = 4Lies diese Zeile von rechts nach links: Der Wert 4 ist entstanden, und das Etikett city_count wurde daran gehängt. Wenn du von jetzt an city_count schreibst, bekommst du diesen Wert.
city_count = 4
print("Cities:", city_count)
print("Double:", city_count * 2)Cities: 4
Double: 8=bedeutet nicht „gleich“. In der Mathematik istx = 4eine Behauptung: x und 4 sind dasselbe. In Python ist=eine Anweisung: „speichere diesen Wert unter diesem Namen.“ Deshalb isttotal = total + 5— in der Mathematik unmöglich — ganz normales Python. Es bedeutet: „nimm, wastotaljetzt enthält, addiere 5 und speichere das Ergebnis zurück intotal.“ Ob zwei Dinge gleich sind, hat ein eigenes Symbol:==, dem wir später begegnen.
Einen Wert ändern
Eine neue Zuweisung an eine Variable lässt vom alten Wert nichts übrig:
stock = 20
print("Before:", stock)
stock = stock - 3
print("After:", stock)Before: 20
After: 17Schau, was passiert, wenn zwei Namen auf denselben Wert zeigen:
a = 10
b = a
a = 99
print(a, b)99 10Die Zeile b = a bedeutet: Hänge das Etikett b an denselben Wert, an dem a hängt. Jetzt zeigen beide Namen auf dieselbe 10. Dann nimmt a = 99 das Etikett a ab und hängt es an den neuen Wert 99 — b bleibt, wo es war, an 10. Eine neue Zuweisung an einen Namen verschiebt nur diesen Namen, nicht den anderen.
Behalt dieses Bild im Kopf: Zwei Namen können auf denselben Wert zeigen. Bei Zahlen und Strings macht das keine Probleme, aber später, wenn du Listen lernst — deren Inhalt sich an Ort und Stelle ändern lässt — wird dieser Punkt sehr wichtig.
Regeln für Namen
Was Python nicht akzeptiert:
- Beginnen mit einer Ziffer:
2nd_pricegeht nicht,price_2ist in Ordnung - Ein Bindestrich in der Mitte:
total-pricegeht nicht, Python liest es als Subtraktion - Ein Leerzeichen in der Mitte:
total pricegeht nicht - Pythons Keywords:
class,for,if,import,return,Nonekönnen nicht als Namen verwendet werden
Was Python akzeptiert, was du aber nicht schreiben solltest:
x1 = 4500 # clear today, meaningless in three weeks
Total_Price = 4500 # legal Python, but not the Python convention
l = 4500 # lowercase L and the digit one look almost identicalDie professionelle Python-Konvention ist snake_case — kleingeschrieben, mit Unterstrichen zwischen den Wörtern:
total_price = 4500
customer_name = "Rafi"
items_in_cart = 3Sich um Namen zu kümmern, kann sich wie verschwendete Zeit anfühlen, aber Code wird ein- oder zweimal geschrieben und zwanzigmal gelesen. Ein Name, der sich selbst erklärt, übernimmt die Arbeit eines Kommentars.
Die vier grundlegenden Typen
items = 7 # int — a whole number
price = 249.50 # float — a number with a decimal point
name = "Rafi" # str — text, inside quotes
is_paid = True # bool — only True or False
print(type(items))
print(type(price))
print(type(name))
print(type(is_paid))<class 'int'>
<class 'float'>
<class 'str'>
<class 'bool'>type() ist dein Werkzeug, um Zweifel auszuräumen. Wenn sich eine Variable seltsam verhält, ist der erste Schritt, ihren Typ auszugeben. Meistens steht die Antwort dann schon da.
Zwei kleine, aber wichtige Hinweise:
True und False beginnen mit einem Großbuchstaben. Schreibst du true, behandelt Python es als Variablennamen und meldet, dass es ihn nicht kennt.
"7" und 7 sind nicht dasselbe. Das erste ist ein String, das zweite eine Zahl. Sie sehen ähnlich aus, sind für Python aber völlig verschieden:
a = 7
b = "7"
print(type(a), type(b))
print(a * 3)
print(b * 3)<class 'int'> <class 'str'>
21
777Den Fehler, den jeder bekommt
age = "22"
print(age + 1)Traceback (most recent call last):
File "C:\Users\Rafi\python-lab\lesson-04\demo.py", line 2, in <module>
print(age + 1)
~~~~^~~
TypeError: can only concatenate str (not "int") to strDie Meldung wirkt einschüchternd und ist tatsächlich präzise: Nur ein str kann mit einem str verbunden werden, kein int. Python kann nicht unterscheiden, ob du addieren oder verbinden wolltest — also hat es statt zu raten einfach gestoppt.
Die File-Zeile zeigt den vollständigen Pfad deiner eigenen Datei, auf deinem Computer sieht sie also anders aus. Die anderen Zeilen bleiben gleich.
Lies Fehlermeldungen von unten nach oben. Die letzte Zeile sagt, was falsch ist; die Zeile darüber sagt, wo. Anfänger geraten bei einem Traceback oft in Panik und überspringen ihn ganz, aber Pythons Fehlermeldungen sind der hilfreichste Text auf deinem Bildschirm.
Die Lösung besteht darin, die Zahl zur Zahl zu machen:
age = "22"
print(int(age) + 1)23int() wandelt einen String in eine ganze Zahl um. Wann das funktioniert und wann es scheitert, wird in einem späteren Kapitel über input() ordentlich behandelt, denn dort taucht dieses Problem jedes einzelne Mal auf.
Ein vollständiges Beispiel
invoice.py:
# Invoice for a single order, all figures in one place
customer_name = "Rafi"
unit_price = 249.50
quantity = 3
is_member = True
subtotal = unit_price * quantity
discount = 50.0
total = subtotal - discount
print("Customer :", customer_name)
print("Quantity :", quantity)
print("Subtotal :", subtotal)
print("Discount :", discount)
print("Total :", total)
print("Member :", is_member)Customer : Rafi
Quantity : 3
Subtotal : 748.5
Discount : 50.0
Total : 698.5
Member : TrueBeachte, wo der eigentliche Vorteil liegt: Um den Preis zu ändern, bearbeitest du nur die Zeile mit unit_price, und jede Berechnung darunter korrigiert sich selbst. Wären die Zahlen direkt in die print-Aufrufe getippt worden, müsstest du bei jeder Änderung jedes Vorkommen einzeln suchen — und eines zu übersehen macht den Bericht falsch.
Wenn etwas schiefgeht
NameError: name 'total' is not defined Dem Namen, den du verwendet hast, wurde noch kein Wert zugewiesen, oder er ist falsch geschrieben. Python behandelt total und totl als zwei verschiedene Namen. Beachte, dass auch die Groß-/Kleinschreibung zählt: Total ist nicht total.
TypeError: can only concatenate str (not "int") to str Du hast versucht, eine Zahl an einen String anzuhängen. Wandle sie mit int() um oder nutze ein Komma — print("Age:", age) — denn print behandelt gemischte Typen selbst.
SyntaxError: cannot assign to expression here. Maybe you meant '==' instead of '='? Ein Bindestrich in einem Namen führt zu dieser Meldung. In der Zeile total-price = 5 sieht Python eine Berechnung, die price von total subtrahiert, und in eine Berechnung kannst du keinen Wert speichern. Nutze einen Unterstrich: total_price.
SyntaxError: invalid syntax Du hast versucht, eines von Pythons Keywords als Namen zu verwenden, etwa class = 10. Die Meldung erwähnt Keywords nicht; sie setzt nur ein ^ unter das =, also musst du selbst prüfen, ob der Name ein Keyword ist. Nimm ein anderes: class_name, grade.
NameError: name 'true' is not defined. Did you mean: 'True'? True und False beginnen mit einem Großbuchstaben.
Schritt 4 von 6 — Vorhersagen
Prüfe dein Verständnis
Was gibt dieses Programm aus?
a = 10
b = a
a = 99
print(a, b)- A10 99
- B10 10
- C99 99
- D99 10
Welcher dieser Namen ist ein gültiger Python-Variablenname?
- Aclass
- Bitem-2
- C2nd_item
- Ditem_2
Dieses Programm wirft eine TypeError. Was genau ist falsch, und was behebt es?
age = "22"
next_year = age + 1
print("Next year:", next_year)- A`next_year` wurde verwendet, ohne vorher definiert zu werden
- B`age` enthält einen String, keine Zahl — schreibe `age = 22` oder nutze `int(age) + 1`
- CWenn man `age + "1"` statt `age + 1` schreibt, kommt 23 heraus
- DDas `print` braucht ein `+` statt eines Kommas
Zum Antworten brauchst du ein Konto
Melde dich an, um deine Antworten zu prüfen
Die Fragen stehen oben, und sie im Kopf durchzuarbeiten ist der wichtige Teil. Melde dich an, um die Antworten, die Erklärungen und die dreistufigen Hinweise zu sehen.
Jetzt bist du dran
Schreibe eine Datei namens shipping.py mit:
- Vier Variablen — eine
int, einefloat, einestr, einebool— alle sinnvoll in snake_case benannt - Mindestens einer Berechnung, die zwei davon verwendet, um eine dritte Variable zu erzeugen
- Dem Typ aller vier Variablen, ausgegeben mit
type() - Einer Variable, die zuerst einen Wert bekommt und dann neu zugewiesen wird — gib den Wert in beiden Schritten aus
Dann brich sie absichtlich: Nimm eine str-Variable, schreib + 1 dahinter und führe die Datei aus. Lies den ganzen Fehler, besonders die letzte Zeile. Du wirst diese Meldung noch viele Male treffen; sie heute absichtlich hervorzurufen, macht sie dir später vertraut.
In dieser Mission steckt noch mehr
Was du oben gelesen hast, ist die vollständige Mission – nichts wurde herausgekürzt. Pro ergänzt:
- Was wirklich unter der Haube passiert – wie Python das ausführt
- Die vollständige Lösung der Übung, Schritt für Schritt erklärt
- Schwierigere Zusatzübungen
- Die Interviewfrage zu diesem Thema, mit Musterantwort
Schritt 6 von 6
Herausforderung — das Kapitel-Quiz
Zehn Fragen von leicht bis schwer. Die letzten sind absichtlich knifflig.
Melde dich an, um das Quiz zu machen