2. Unterrichtsblock

<

Python Variablen

Eine Variable ist ein Name, unter dem ein Wert gespeichert wird. In Python wird eine Variable nicht vorher deklariert. Sie entsteht bei der ersten Zuweisung.

Variablen erstellen

Python benoetigt keine separate Deklaration. Der Wert bestimmt den aktuellen Datentyp. Eine Variable kann später auch einen Wert eines anderen Typs erhalten.

name = "Samira"
alter = 17

print(name)
print(alter)
wert = 4
print(wert)
print(type(wert))

wert = "Servus"
print(wert)
print(type(wert))

Der Name der Variable bleibt gleich, aber der gespeicherte Wert und sein Datentyp ändern sich.

Einfache oder doppelte Anführungszeichen

Strings können mit einfachen oder doppelten Anführungszeichen geschrieben werden. Beide Schreibweisen erzeugen einen String.

obst_a = "Zwetschge"
obst_b = 'Zwetschge'

print(obst_a == obst_b)

Groß- und Kleinschreibung

Bei Variablennamen unterscheidet Python Groß- und Kleinschreibung. a und A sind zwei verschiedene Namen.

a = 4
A = "Servus"

print(a)
print(A)

Variablennamen

Ein Variablenname darf mit einem Buchstaben oder Unterstrich beginnen und darf Buchstaben, Zahlen und Unterstriche enthalten. Leerzeichen, Bindestriche und Python-Schlüsselwörter sind nicht erlaubt.

RegelGültiges BeispielUngültiges Beispiel
beginnt mit Buchstabe oder Unterstrichname, _name2name
enthält Buchstaben, Zahlen und Unterstricheraum_2raum-2
keine Leerzeichenmaximale_punktemaximale punkte
kein Python-Schlüsselwortif_statusif
Groß-/Kleinschreibung bleibt relevantalter, Alter–

Sprechende Namen machen Programme leichter lesbar. In Python ist snake_case die uebliche Schreibweise für Variablen.

SchreibweiseBeispielTypische Verwendung
snake_casemaximale_punkteVariablen und Funktionen in Python
camelCasemaximalePunktemöglich, aber weniger ueblich in Python
PascalCaseMaximalePunktevor allem für Klassen

Mehrere Werte zuweisen

Mehrere Variablen können in einer Zeile mit unterschiedlichen Werten angelegt werden:

fach, raum, stunden = "Python", "B204", 4
print(fach)
print(raum)
print(stunden)

Mehrere Variablen können auch denselben Wert erhalten:

x = y = z = 0
print(x, y, z)

Beim Unpacking werden Werte aus einer Sammlung auf mehrere Variablen verteilt. Die Anzahl muss passen, sonst entsteht ein ValueError.

obst = ["Apfel", "Birne", "Mango"]
erstes, zweites, drittes = obst

print(erstes)
print(zweites)
print(drittes)

Variablen ausgeben

Mit Kommas können unterschiedliche Datentypen gemeinsam ausgegeben werden:

punkte = 82
text = "Punkte"
print(punkte, text)

Der Operator + addiert Zahlen oder verbindet Strings. Eine Zahl und ein String können nicht unpassend mit + verbunden werden.

punkte = 82
print(punkte + 3)

name = "Samira"
print("Hallo " + name)

# Dieser Ausdruck erzeugt einen TypeError:
# print("Punkte: " + punkte)

Zwischenaufgabe: Werte und Typen

Untersuche den folgenden Code zuerst ohne ihn auszuführen. Notiere für jede Ausgabe den erwarteten Wert und Datentyp. Führe den Code anschließend aus und vergleiche deine Vermutung mit dem Ergebnis.

erste_zahl = 5
zweite_zahl = 5.0
zahl_als_text = "5"

print(erste_zahl + 1)
print(zweite_zahl + 1)
print(zahl_als_text)
print(type(erste_zahl))
print(type(zweite_zahl))
print(type(zahl_als_text))

Beantworte danach: Welche beiden Werte sehen ähnlich aus, haben aber unterschiedliche Datentypen? Warum funktioniert die Addition mit erste_zahl, aber nicht mit zahl_als_text? Wie müsste "5" umgewandelt werden, damit du damit rechnen kannst?

Datentypen im Überblick

Der Datentyp beschreibt, welche Art von Wert vorliegt und welche Operationen sinnvoll sind. Mit type() wird der aktuelle Typ untersucht.

KategorieDatentypenBeispiel
Texttypstr"Python"
Numerische Typenint, float, complex17, 4.5, 3 + 5j
Sequenztypenlist, tuple, range[1, 2]
Zuordnungstypdict{"name": "Samira"}
Set-Typenset, frozenset{"Python", "Java"}
Boolescher TypboolTrue
Binäre Typenbytes, bytearray, memoryviewb"Hi"
Kein WertNoneTypeNone
werte = [17, 4.5, "Python", True, None]

for wert in werte:
    print(wert, type(wert))

Die Schleife wird später ausführlich behandelt. Hier zeigt sie nur, dass unterschiedliche Werte unterschiedliche Typen haben können.

Datentypen mit Konstruktoren erzeugen

Viele Datentypen besitzen eine Konstruktorfunktion. Damit kann ein Wert gezielt in einen bestimmten Typ umgewandelt oder eine Sammlung erstellt werden.

KonstruktorBeispielErgebnis
str()str(17)"17"
int()int("17")17
float()float("4.5")4.5
complex()complex(3, 5)(3+5j)
list()list((1, 2))[1, 2]
tuple()tuple([1, 2])(1, 2)
range()range(4)Zahlenfolge 0 bis 3
dict()dict(name="Samira")Dictionary
set()set([1, 2, 2]){1, 2}
frozenset()frozenset([1, 2])unveränderbare Menge
bool()bool(1)True
bytes()bytes(3)drei Bytes
bytearray()bytearray(3)veränderbare Bytes
memoryview()memoryview(bytes(3))Speicheransicht
zahlen_liste = list((1, 2, 3))
zahlen_tupel = tuple([1, 2, 3])
zahlen_bereich = range(3)
personen = dict(name="Samira", alter=17)
einzigartige_zahlen = set([1, 1, 2, 3])

print(zahlen_liste)
print(zahlen_tupel)
print(list(zahlen_bereich))
print(personen)
print(einzigartige_zahlen)

Casting: Werte bewusst umwandeln

Casting bedeutet, einen Wert in einen anderen Datentyp umzuwandeln. Die Umwandlung muss inhaltlich möglich sein.

FunktionAufgabeBeispiel
int()ganze Zahl erzeugenint("7")
float()Kommazahl erzeugenfloat("4.5")
str()Text erzeugenstr(7)
bool()Wahrheitswert erzeugenbool(1)
ganze_zahl = int("7")
kommazahl = float("4.5")
text = str(ganze_zahl)

print(ganze_zahl + 1)
print(kommazahl + 1)
print(text + " Punkte")

Weitere Umwandlungen:

print(int(2.8))       # 2: Nachkommastellen werden abgeschnitten.
print(float(3))       # 3.0
print(float("3"))    # 3.0
print(str(3.0))       # "3.0"
print(int("-5"))
print(float("-2.3"))

Nicht jede Umwandlung funktioniert. int("vier") erzeugt einen ValueError, weil der Text keine ganze Zahl beschreibt. Auch int("5.5") ist nicht möglich. Ein complex-Wert kann nicht direkt in int oder float umgewandelt werden, weil dabei der Imaginärteil verloren ginge.

Zahlen

Ganze Zahlen: int

Eine Ganzzahl kann positiv, negativ oder 0 sein. Python kann sehr große Ganzzahlen verarbeiten:

klein = -1
gross = 35656222554887711
berechnet = 5 * 1000

print(klein, type(klein))
print(gross, type(gross))
print(berechnet, type(berechnet))

Kommazahlen: float

Kommazahlen werden in Python mit einem Punkt geschrieben:

preis = 4.50
temperatur = -2.3

print(preis, type(preis))
print(temperatur, type(temperatur))

Sehr große oder sehr kleine Werte können in wissenschaftlicher Schreibweise mit e angegeben werden:

print(35e3)     # 35000.0
print(12E4)     # 120000.0
print(-87.7e2)  # -8770.0

Komplexe Zahlen: complex

Eine komplexe Zahl besteht aus einem Realteil und einem Imaginärteil. Python verwendet j für die imaginäre Einheit. Dieses Thema ist für den Grundkurs kein Kernwerkzeug, zeigt aber ein weiteres Zahlenmodell.

zahl = 3 + 5j
print(zahl)
print(type(zahl))
print(zahl.real)
print(zahl.imag)

Zahlen umwandeln

ganze_zahl = 1
kommazahl = 2.8

als_float = float(ganze_zahl)
als_int = int(kommazahl)
als_complex = complex(ganze_zahl)

print(als_float)
print(als_int)
print(als_complex)

Beim Umwandeln von float zu int werden Nachkommastellen nicht gerundet, sondern abgeschnitten.

Zufallszahlen mit random

random ist ein Modul der Standardbibliothek. randrange(start, stop) erzeugt eine ganze Zahl ab start bis vor stop.

import random

zahl = random.randrange(1, 10)
print(zahl)  # 1 bis 9 sind möglich.

zahl_mit_zehn = random.randrange(1, 11)
print(zahl_mit_zehn)  # 1 bis 10 sind möglich.

Die Reihenfolge muss stimmen. random.randrange(10, 1) kann keine Zahl erzeugen und führt zu einem ValueError.

Aufgaben: Variablen, Casting und Zahlen

Aufgabe 1: Werte und Typen

Lege Variablen für deinen Namen, dein Alter, eine Punktzahl, einen Preis und einen Wahrheitswert an. Gib jeweils Wert und Typ aus.

Aufgabe 2: Variablennamen prüfen

Entscheide, welche Namen gültig sind, und korrigiere die ungültigen Namen:

2zahl
mein-name
mein name
if
punktzahl_1
_startwert

Aufgabe 3: Casting untersuchen

Wandle "15" in eine Ganzzahl, "3.2" in eine Kommazahl und eine Zahl in einen String um. Gib Ergebnisse und Typen aus. Teste danach int("Brot") kontrolliert und beschreibe den Fehler.

Aufgabe 4: Kleine Berechnung

Ein Kurs hat eine maximale Punktzahl von 100. Eine Person erreicht 78 Punkte und bekommt 2.5 Bonuspunkte. Berechne das Ergebnis und gib es lesbar aus.

Aufgabe 5: Zufall

Erzeuge eine Zufallszahl zwischen 1 und 100. Achte darauf, dass auch 100 möglich ist. Erkläre, warum die obere Grenze angepasst werden muss.

Optionale Zusatzaufgaben

  • Lege drei Variablen in einer Zeile an und entpacke anschließend eine Liste mit drei Werten.
  • Erzeuge Beispiele für list, tuple, dict, set, bytes und None und gib die Typen aus.
  • Untersuche bool(0), bool(1), bool(""), bool("Hi"), bool([]) und bool([0]).
  • Schreibe ein Programm, das wissenschaftliche Schreibweisen in normale Ausgaben umwandelt.
  • Vergleiche eine Ganzzahl, eine Kommazahl und einen String mit scheinbar gleichem Inhalt.
  • Erstelle eine kleine Umwandlungskette wie str(float("3")) und dokumentiere jeden Zwischentyp.