Python Grundlagen
Interaktives Lernmaterial nach der PRIMM-Methode für Klasse 8 Informatik & Medienbildung am Gymnasium Baden-Württemberg.
🎯 Worum geht's? Klasse 8 · mehrere Stunden (Kurs)
Nach dieser Seite kannst du …
- vorhersagen, was ein Python-Programm ausgibt, und deine Vorhersage überprüfen
- fremden Code untersuchen, verändern und schließlich selbst schreiben (PRIMM)
- Ein- und Ausgabe, Variablen und Datentypen verwenden
Vorwissen: keines
🔍 Die PRIMM-Methode – so arbeitest du hier
Jedes Kapitel folgt diesem Lernzyklus. Die farbigen Boxen zeigen dir, in welcher Phase du dich befindest:
Predict
Überlege vor dem Ausführen, was der Code ausgeben wird.
Run
Führe den Code aus und vergleiche mit deiner Vorhersage.
Investigate
Ändere Werte gezielt und beobachte, was passiert.
Modify
Verändere den Code, um ein neues Ziel zu erreichen.
Make
Schreibe eigenen Code von Grund auf – mit automatischen Tests.
Ein- und Ausgabe von Text
Für Textausgaben genügt in Python ein einfaches print() – kein
System.out.println() wie in Java!
System.out.println("Hallo Java!");
print("Hallo Python!")
Lies den Code unten, ohne ihn auszuführen. Was wird genau ausgegeben? Schreibe deine Vorhersage Zeile für Zeile auf.
print("Hallo Python!")
print("Klasse", 8)
print()
Führe den Code jetzt aus. Stimmt das Ergebnis mit deiner Vorhersage überein? Falls nicht: Was war anders?
Verändere den Code oben und beobachte, was passiert:
- Was gibt
print()ohne Inhalt aus? - Kann
print()mehrere Werte gleichzeitig ausgeben? Teste:print("Hallo", "Welt", 42) - Was ist der Unterschied zwischen
print(8)undprint("8")? (Tipp: Nutzetype())
Konsoleneingabe mit input()
Konsoleneingaben lassen sich über input() realisieren:
Angenommen, der Nutzer gibt Lisa ein. Was gibt das Programm aus?
eingabe = input("Gib deinen Namen ein: ")
print("Hallo", eingabe)
input() liefert immer
einen String! Für Zahleneingaben muss man mit int() oder
float() konvertieren.
Der Nutzer gibt 7 ein. Was gibt das Programm aus?
zahl = int(input("Nenne mir eine Zahl: "))
print("Das Quadrat deiner Zahl lautet", zahl * zahl)
Ändere das Quadrat-Programm oben so, dass es statt dem Quadrat den
Würfel der Zahl ausgibt (also zahl * zahl * zahl). Passe
auch den Ausgabetext an.
print("3" + "5") aus?Variablen und Typen
Einer der Hauptunterschiede zu Java ist Pythons dynamische Typisierung. Der Typ einer Variable wird durch die Wertzuweisung bestimmt – keine explizite Deklaration nötig!
int a = 4;
System.out.println(a);
// Typ-Änderung nicht möglich!
a = 4
print(a)
a = "Schönes Wetter!"
print(a) # Kein Fehler!
Was gibt dieses Programm aus? Achte genau auf die Reihenfolge der Zuweisungen.
a = 4
print(a)
a = "Schönes Wetter heute!"
print(a)
Datentypen ermitteln mit type()
Was gibt type() für die folgenden Ausdrücke zurück? Schreibe die exakte
Python-Ausgabe auf.
a = "Hallo!"
print(type(a))
a = 34
print(type(a))
Die wichtigsten Datentypen
| Python-Typ | Java-Äquivalent | Beispiel | Beschreibung |
|---|---|---|---|
str |
String |
"Hallo" |
Zeichenkette |
int |
int / long |
-56 |
Ganze Zahl |
float |
double |
3.4565 |
Kommazahl |
bool |
boolean |
True / False |
Wahrheitswert |
True und False werden in Python
groß geschrieben!
meine_variable), in Java camelCase
(meineVariable).Nutze den Code-Block unten zum Ausprobieren. Beantworte:
- Was ist der Typ von
3.0? VonTrue? Vonint("42")? - Was passiert bei
print(type(3 + 1.0))? Welcher Typ entsteht, wenn man int und float addiert? - Kann man
str(42)und"Punkte"zusammensetzen? Teste:print(str(42) + " Punkte")
Ergänze im Code-Block der Aufgabe unten print(type(...))-Ausgaben für alle
vier Variablen, bevor du auf „Testen" klickst.
Ermittle die Datentypen der folgenden Variablen mit
type() und füge
passende print()-Ausgaben ein:Schreibe ein eigenes kurzes Programm, das:
- drei Variablen verschiedener Typen anlegt (selbst gewählt),
- für jede den Wert und den Typ ausgibt,
- eine Variable anschließend in einen anderen Typ umwandelt und das Ergebnis zeigt.
x = int("42")?Operatoren
Arithmetische Operatoren
| Operator | Bedeutung | Beispiel | Ergebnis |
|---|---|---|---|
/ |
Division → immer float |
5 / 2 |
2.5 |
// |
Ganzzahl-Division | 5 // 2 |
2 |
% |
Modulo (Rest) | 5 % 2 |
1 |
** |
Potenz | 2 ** 8 |
256 |
Was gibt jede Zeile aus? Berechne im Kopf, bevor du ausführst!
a = 5
b = 2
print(a / b)
print(a // b)
print(a % b)
print(b ** a)
Untersuche den %-Operator – er ist äußerst nützlich!
- Was ergibt
7 % 2? Und8 % 2? Was kannst du über die Zahl schließen, wenn das Ergebnis 0 ist? - Was ergibt
15 % 10? Und123 % 10? Was liefert% 10immer? - Was gibt
type(5 / 2)im Vergleich zutype(5 // 2)aus?
Zuweisungsoperatoren
++ und -- gibt es in Python
nicht! Stattdessen: a += 1 / a -= 1
Was wird nach jeder Zeile ausgegeben?
a = 14
a += 4
print(a)
a -= 2
print(a)
a *= 3
print(a)
Logische Operatoren
!a // NOT
a || b // OR
a && b // AND
not a # NOT
a or b # OR
a and b # AND
Was geben diese Ausdrücke aus? Denke Schritt für Schritt.
a = False
b = True
c = False
print(not a)
print(a or b)
print(a and b)
print((a or b) and not (b or c))
Verändere im Code oben die Startwerte von a, b und
c so, dass (a or b) and not (b or c) den Wert
True ergibt. Erkläre danach, warum.
Schreibe ein Programm, das den Nutzer nach zwei Zahlen fragt und dann ausgibt, ob die
erste Zahl größer als die zweite und gleichzeitig gerade ist. Nutze
and und %.
10 / 2 in Python?if-Anweisung
In Python gibt es keine geschweiften Klammern! Die Zugehörigkeit von Code-Blöcken wird durch Einrückung bestimmt – das ist syntaktisch zwingend.
if (alter >= 18) {
System.out.println("Volljährig!");
} else {
System.out.println("Minderjährig!");
}
if alter >= 18:
print("Volljährig!")
else:
print("Minderjährig!")
Was gibt das Programm aus, wenn der Nutzer 15 eingibt? Und wenn er
18 eingibt?
eingabe = int(input("Wie alt bist du? "))
if eingabe >= 18:
print("Du bist volljährig!")
else:
print("Du bist noch nicht volljährig!")
elif statt else if
Was gibt das Programm bei der Eingabe 25 aus? Und bei 5? Und
bei 15?
eingabe = int(input("Gib eine Zahl ein: "))
if eingabe < 10:
print("Hallo!")
elif eingabe < 20:
print("Hi!")
elif eingabe < 30:
print("Tach!")
else:
print("Moin!")
Experimentiere mit dem Grußprogramm oben:
- Was passiert genau an den Grenzen – bei Eingabe
10,20und30? - Was ändert sich, wenn du alle
elifdurchifersetzt? Warum ist das ein Unterschied? - Füge einen weiteren
elif-Zweig für Zahlen ab 100 hinzu, der"Ahoi!"ausgibt.
Erweitere das Volljährigkeitsprogramm (erstes Beispiel dieses Kapitels) um einen zusätzlichen Fall: Wenn jemand genau 18 ist, soll die Meldung „Du bist gerade 18 geworden – herzlichen Glückwunsch!" erscheinen.
Schreibe ein Programm, das nach Eingabe eines Namens eine Ausgabe gemäß der Tabelle erzeugt. Hinweis:
len(s) liefert die Länge des Strings.
| Anzahl Buchstaben | Ausgabe |
|---|---|
| bis 5 | Kurzer Name! |
| 6 bis 10 | Einigermaßen kurzer Name! |
| 11 bis 16 | Einigermaßen langer Name! |
| ab 17 | Sehr langer Name! |
Schreibe ein Notenrechner-Programm: Lies eine Punktzahl (0–100) ein und gib die entsprechende Schulnote aus (eigene Grenzen selbst festlegen). Das Programm soll mindestens 5 Noten unterscheiden.
Listen
In Python gibt es keinen klassischen Array-Typ. Stattdessen werden Listen verwendet – flexibel in Länge und Typen.
int[] zahlen = {11, 67, 5, 4};
// Feste Größe, nur ein Typ
zahlen = [11, 67, 5, 4]
# Flexibel, gemischte Typen ok
Was gibt jede Zeile aus?
l2 = [11, 67, 5, 4, 8, 9]
l3 = ["Peter", "Uschi", "Barbara", "Lothar", "Heike"]
print(l2[0])
l3[3] = "Gabi"
print(l3)
Wichtige Listen-Methoden
| Methode | Bedeutung |
|---|---|
liste.append(x) |
Fügt x am Ende hinzu |
liste.pop() |
Entfernt letztes Element |
liste.pop(i) |
Entfernt Element an Index i |
liste.insert(i, x) |
Fügt x an Position i ein |
liste.remove(x) |
Entfernt erstes Vorkommen von x |
len(liste) |
Gibt die Länge zurück |
liste.copy() |
Erstellt eine echte Kopie |
Führe den folgenden Code aus und erkläre nach jeder Zeile, was die Methode bewirkt. Füge
nach jeder Operation ein print() ein, um die Veränderung zu sehen.
l1 = []
l2 = [11, 67, 5, 4, 8, 9]
l3 = ["Peter", "Uschi", "Barbara", "Lothar", "Heike"]
l1.append("Apfel")
l2.pop()
l3.pop(1)
l3.insert(2, "Hans")
l3.remove("Heike")
l = len(l2)
i = l3.index("Barbara")
Was gibt print(l1) nach diesen Zeilen aus? Begründe deine Vorhersage.
l1 = ["Apfel"]
l5 = l1
l5.append("Birne")
print(l1)
Gegeben: noten = [2, 1, 3, 2, 4, 1, 2]. Ändere die Liste im Code-Block unten
so, dass:
- die letzte Note entfernt wird,
- die Note
5an Position 0 eingefügt wird, - das erste Vorkommen von
1entfernt wird.
Gib die Liste nach jeder Änderung aus.
Führe alle fünf Listenoperationen der Reihe nach durch. Ausgangsliste:
["Apfel", "Banane", "Kirsche", "Dattel", "Erdbeere"]
- Hänge
"Feige"ans Ende. - Entferne das letzte Element.
- Füge
"Mango"an Position 2 ein. - Entferne
"Dattel". - Gib die Länge der Liste aus.
Schreibe ein Programm, das eine Einkaufsliste verwaltet. Der Nutzer kann
so lange Artikel eingeben, bis er fertig eingibt. Am Ende wird die
vollständige Liste ausgegeben.
Schleifen
while-Schleife
Wie viele Zeilen gibt das Programm aus, und was steht in der letzten Zeile?
zahl = 0
while zahl <= 10:
print(zahl)
zahl += 1
Verändere die while-Schleife oben und beobachte:
- Was passiert, wenn du
zahl += 1entfernst? (Nur kurz testen – dann Seite neu laden!) - Was ändert sich, wenn du
<= 10durch< 10ersetzt? - Wie kannst du mit
zahl += 2nur jede zweite Zahl ausgeben?
Ändere die while-Schleife oben so, dass sie nur jede gerade Zahl von 0 bis 20 ausgibt. Nutze dein Wissen aus dem Investigate.
Schreibe eine
while-Schleife, die alle geraden Zahlen von 0 bis
20 ausgibt.for-Schleife als Zählschleife
| Aufruf | Bedeutung |
|---|---|
range(n) |
0, 1, ..., n-1 |
range(start, stop) |
start, ..., stop-1 |
range(start, stop, step) |
mit Schrittweite |
Was gibt dieses Programm aus? Zähle die Ausgaben und schreibe die erste und letzte Zahl auf.
for i in range(3, 45, 3):
print(i)
Experimentiere mit range() im Code-Block oben:
range(10, 0, -1)– was gibt das aus? Wofür könnte man das brauchen?range(0, 101, 10)– was gibt das aus?- Kann man mit
for farbe in ["rot", "grün", "blau"]: print(farbe)direkt über eine Liste iterieren?
Ändere die foreach-Schleife oben so, dass sie zusätzlich die Länge jeder
Farbe ausgibt, z.B.: rot (3 Buchstaben).
Berechne mit einer
for-Schleife die Summe aller Zahlen von 1 bis
100. Erwartetes Ergebnis: 5050.Schreibe ein Programm, das die Multiplikationstabelle einer vom Nutzer
eingegebenen Zahl ausgibt (1× bis 10×). Beispiel für 7: 7 x 1 = 7,
7 x 2 = 14, ..., 7 x 10 = 70.
range(1, 10, 2) aus?Funktionen
Syntax und Aufbau
static int berechneQuadrat(int n) {
return n * n;
}
def berechne_quadrat(n):
return n ** 2
Was geben die Funktionsaufrufe unten aus?
def berechne_quadrat(n):
return n ** 2
def noch_nicht_fertig():
pass
print("3 hoch 2 =", berechne_quadrat(3))
print("7 hoch 2 =", berechne_quadrat(7))
print(noch_nicht_fertig())
Optionale Parameter (Standardwerte)
Was geben diese Aufrufe aus?
def gruesse(name, gruss="Hallo"):
print(gruss, name)
gruesse("Peter")
gruesse("Ulrike", "Servus")
def gruesse_lang(name, gruss="Hallo", kosename="alter Freund"):
print(gruss, name + ",", kosename)
gruesse_lang("Peter")
gruesse_lang("Ulrike", kosename="liebste Schwester")
Gültigkeit von Variablen (Scope)
Was gibt das Programm aus? Was denkst du – warum?
a = 65
def tue_etwas():
a = 14
print("Innerhalb:", a)
tue_etwas()
print("Außerhalb:", a)
Verändere das Scope-Programm oben:
- Füge
global aam Anfang vontue_etwas()ein. Was ändert sich? - Was passiert, wenn du innerhalb der Funktion eine Variable benutzt, die nur außen definiert ist (ohne Zuweisung innen)?
Ändere die Funktion gruesse(name, gruss="Hallo") oben so, dass sie
zusätzlich einen optionalen Parameter ausrufezeichen=True bekommt. Wenn
True, wird ein ! angehängt, sonst ein ..
Implementiere
celsius_zu_fahrenheit(grad). Formel:
F = C × 9/5 + 32
Vervollständige
potenziere(basis, exponent=2). Standardwert für Exponent
ist 2.Schreibe
ist_gerade(zahl) → True wenn gerade, sonst
False. Nutze %!
Schreibe
max_von_drei(a, b, c) → gibt die größte Zahl zurück.
Keine eingebaute max()-Funktion!
Schreibe eine Funktion berechne_bmi(gewicht, groesse), die den
Body-Mass-Index berechnet (BMI = Gewicht / Größe²) und einen Text wie
„Dein BMI beträgt 22.5" zurückgibt. Teste sie mit eigenen Werten.
Zufallszahlen & Module
Das random-Modul wird mit import eingebunden:
| Funktion | Bedeutung |
|---|---|
random.random() |
float zwischen 0.0 und 1.0 |
random.randint(a, b) |
int zwischen a und b (beide inkl.) |
random.choice(liste) |
Zufälliges Element aus Liste |
random.shuffle(liste) |
Mischt eine Liste durch |
Kannst du die Ausgabe dieses Programms genau vorhersagen? Wenn ja – warum? Wenn nein – warum nicht?
import random
zufallsliste_int = []
for i in range(10):
zufallsliste_int.append(random.randint(20, 30))
print(zufallsliste_int)
Führe das Programm oben mehrmals aus und beobachte:
- Wie oft erscheint jede Zahl, wenn du
range(100)verwendest? Ist die Verteilung gleichmäßig? - Was macht
random.shuffle(liste)? Teste mitl = [1,2,3,4,5]; random.shuffle(l); print(l) - Wie kannst du sicherstellen, dass du bei jedem Programmlauf dieselbe
Zufallsfolge erhältst? (Stichwort:
random.seed(42))
Ändere das Würfelsimulationsprogramm oben so, dass es einen fairen Münzwurf (0 = Kopf, 1 = Zahl) 1000-mal simuliert und ausgibt, wie oft Kopf und wie oft Zahl erschienen ist.
Schreibe ein vollständiges Ratespiel:
- Das Programm wählt eine Zufallszahl zwischen 1 und 20.
- Der Nutzer gibt Zahlen ein, bis er getroffen hat.
- Bei jedem Fehlversuch: „Zu groß!" oder „Zu klein!"
- Am Ende: Anzahl der Versuche ausgeben.
Erweitere das Ratespiel um folgende Funktion: Das Programm gibt nach dem Spiel eine Bewertung aus – z.B. „Beeindruckend! Nur 1-3 Versuche" / „Gut! 4-7 Versuche" / „Weiter üben! Mehr als 7 Versuche".