Ein Nebenprojekt von zeos83.com
0%
Lernkompendium

Python Grundkurs

Von der ersten Zeile Code bis zu Web Scraping und Objektorientierung – dein kompletter Python-Einstieg.

17 Module Einsteiger Keine Vorkenntnisse noetig
Alle Module
Modul 01
Einleitung & Setup
1 UE Β· Kein Vorwissen noetig
Modul 02
Zahlen, Variablen & Strings
2 UE Β· Benoetigt: M01
Modul 03
Listen & Daten umwandeln
2 UE Β· Benoetigt: M02
Modul 04
Kontrollstrukturen: if/else & Booleans
2 UE Β· Benoetigt: M02
Modul 05
Kontrollstrukturen: Schleifen
2 UE Β· Benoetigt: M04
Modul 06
Funktionen
3 UE Β· Benoetigt: M03, M05
Modul 07
Dateien & CSV
2 UE Β· Benoetigt: M06
Modul 08
Listen vertieft: Slicing, Comprehension, Dictionaries & Tupel
3 UE Β· Benoetigt: M03
Modul 09
Objektorientierung
4 UE Β· Benoetigt: M06
Modul 10
Module in Python
2 UE Β· Benoetigt: M09
Modul 11
Exceptions & Fehlerbehandlung
2 UE Β· Benoetigt: M06
Modul 12
Datenstrukturen: Sets, Queue & Priority Queue
2 UE Β· Benoetigt: M08
Modul 13
Funktionsparameter, Sortierung & Lambda
3 UE Β· Benoetigt: M06
Modul 14
Datum, String-Formatierung & default-dict
2 UE Β· Benoetigt: M02, M08
Modul 15
Entwicklung mit PyCharm & Kommandozeile
3 UE Β· Benoetigt: M10
Modul 16
Jupyter Notebooks
2 UE Β· Benoetigt: M02, M06
BONUS
BONUS: Web Scraping mit Python
3 UE Β· Benoetigt: M08, M10
Nachschlagewerk

Glossar

Alle wichtigen Python-Begriffe auf einen Blick – von Variable bis Vererbung.

*args
Ermoeglicht einer Funktion, beliebig viele Positionsargumente entgegenzunehmen. Wird intern als Tupel behandelt.
**kwargs
Ermoeglicht einer Funktion, beliebig viele Schluesselwort-Argumente entgegenzunehmen. Wird intern als Dictionary behandelt.
__init__
Die Konstruktor-Methode einer Klasse. Wird automatisch aufgerufen, wenn ein neues Objekt erstellt wird.
Argument
Ein konkreter Wert, den du beim Aufruf einer Funktion uebergibst. Beispiel: print("Hallo") – "Hallo" ist das Argument.
Attribut
Eine Variable, die zu einem Objekt gehoert. Beispiel: mein_auto.farbe – farbe ist ein Attribut des Objekts.
beautifulsoup
Eine Python-Bibliothek zum Lesen und Durchsuchen von HTML-Code. Wird fuer Web Scraping verwendet.
Boolean
Ein Datentyp mit nur zwei moeglichen Werten: True (wahr) oder False (falsch). Wird fuer Bedingungen verwendet.
break
Ein Schluesselwort, das eine Schleife sofort beendet, auch wenn die Bedingung noch zutrifft.
class
Ein Schluesselwort zum Definieren einer Klasse – einer Vorlage fuer Objekte mit Eigenschaften und Methoden.
continue
Ein Schluesselwort, das den aktuellen Schleifendurchlauf ueberspringt und mit dem naechsten weitermacht.
CSV
Comma-Separated Values – ein einfaches Dateiformat fuer Tabellendaten. Jede Zeile ist ein Datensatz, Werte durch Kommas getrennt.
CSS-Selektor
Eine Schreibweise, mit der du HTML-Elemente auswaehlen kannst. Wird beim Web Scraping zum Finden von Inhalten verwendet.
Datei oeffnen
Mit der Funktion open() kannst du Dateien lesen oder schreiben. Empfohlen in Kombination mit dem with-Statement.
Datentyp
Die Art eines Wertes – z. B. Ganzzahl (int), Kommazahl (float), Text (str) oder Wahrheitswert (bool).
datetime
Ein Python-Modul fuer das Arbeiten mit Datums- und Zeitangaben. Ermoeglicht z. B. Berechnungen mit Zeitdifferenzen.
def
Schluesselwort zum Definieren einer Funktion. Beispiel: def begruesse(): – danach kommt der eingerueckte Funktionsrumpf.
default-dict
Ein spezielles Dictionary aus dem collections-Modul, das automatisch einen Standardwert einsetzt, wenn ein fehlender Schluessel abgefragt wird.
Dictionary
Eine Datenstruktur mit Schluessel-Wert-Paaren. Beispiel: {"name": "Anna", "alter": 30}. Zugriff per Schluessel.
Einrueckung
In Python zeigt die Einrueckung (Leerzeichen am Zeilenanfang), welcher Code zu einem Block gehoert. Python nutzt keine Klammern dafuer.
elif
Kurzform fuer β€želse if" – prueft eine weitere Bedingung, wenn die vorherige if-Bedingung nicht zutrifft. Mehrere elif-Zweige sind moeglich.
Encoding
Die Art, wie Zeichen als Bytes gespeichert werden. UTF-8 ist der Standard und unterstuetzt alle Sprachen und Sonderzeichen.
Exception
Ein Fehler, der zur Laufzeit auftritt. Python kann Exceptions mit try/except abfangen, damit das Programm nicht abstuerzt.
f-String
Eine komfortable Art, Variablen in Strings einzufuegen: f"Hallo {name}!" – der Ausdruck in {} wird automatisch eingesetzt.
finally
Ein Block in einer try/except-Struktur, der immer ausgefuehrt wird – egal ob ein Fehler aufgetreten ist oder nicht.
Float
Eine Kommazahl, z. B. 3.14 oder -0.5. In Python wird der Punkt statt dem Komma verwendet: 3.14, nicht 3,14.
for-Schleife
Eine Schleife, die ueber eine Sequenz iteriert. Beispiel: for zahl in [1,2,3]: – fuehrt den Block fuer jede Zahl aus.
from...import
Eine Alternative zum einfachen import, um nur bestimmte Teile eines Moduls zu laden. Beispiel: from math import sqrt
Funktion
Ein benannter Block wiederverwendbaren Codes. Wird mit def definiert und mit dem Namen + () aufgerufen.
Generator
Eine Funktion, die mit yield statt return Werte nacheinander liefert – spart Arbeitsspeicher bei grossen Datenmengen.
HTML
HyperText Markup Language – die Sprache, in der Webseiten geschrieben sind. Beim Web Scraping wird HTML ausgelesen.
HTTP
HyperText Transfer Protocol – das Protokoll, ueber das Browser und Server kommunizieren. Python kann HTTP-Anfragen stellen.
IDE
Integrated Development Environment – eine Entwicklungsumgebung mit Editor, Fehlerhervorhebung und Tools. Beispiele: VS Code, PyCharm.
if/else
Eine Bedingungsstruktur: if prueft eine Bedingung, else wird ausgefuehrt wenn sie nicht zutrifft. Optional: elif fuer weitere Bedingungen.
import
Laedt ein Modul in dein Skript, damit du dessen Funktionen nutzen kannst. Beispiel: import math
Instanz
Ein konkretes Objekt, das aus einer Klasse erzeugt wurde. Klasse = Vorlage, Instanz = das tatsaechliche Ding.
Integer
Eine ganze Zahl ohne Nachkommastellen, z. B. 5, -3 oder 1000. In Python kurz: int.
Interpreter
Das Python-Programm, das deinen Code Zeile fuer Zeile liest und ausfuehrt. Du musst Python-Code nicht kompilieren.
Jupyter Notebook
Eine interaktive Entwicklungsumgebung im Browser. Code wird in Zellen ausgefuehrt, Ergebnisse erscheinen direkt darunter.
Kapselung
Ein OOP-Prinzip: Daten und Methoden eines Objekts werden zusammengefasst, interne Details nach aussen verborgen.
Klasse
Eine Vorlage (Bauplan) fuer Objekte. Definiert, welche Eigenschaften (Attribute) und Faehigkeiten (Methoden) Objekte haben.
Kommentar
Eine Erklaerung im Code, die Python ignoriert. Beginnt mit #. Beispiel: # Das berechnet die Summe
Konstruktor
Die spezielle Methode __init__(), die aufgerufen wird, wenn ein neues Objekt erzeugt wird. Setzt Startwerte.
Lambda
Eine anonyme (namenlose) Kurzfunktion. Beispiel: verdoppeln = lambda x: x * 2. Nuetzlich fuer kurze Operationen.
Liste
Eine geordnete Sammlung von Werten. Beispiel: [1, "Anna", True]. Werte koennen per Index abgerufen und geaendert werden.
List Comprehension
Eine kompakte Schreibweise, um neue Listen zu erzeugen: [x*2 for x in zahlen if x > 0]
Methode
Eine Funktion, die zu einem Objekt oder einer Klasse gehoert. Wird mit Punkt aufgerufen: liste.append(5)
Modul
Eine Python-Datei (.py), die Funktionen und Klassen enthaelt, die andere Skripte importieren koennen.
None
Ein spezieller Wert in Python, der "kein Wert" bedeutet. Aehnlich wie null in anderen Sprachen. Typ: NoneType.
Objekt
Eine konkrete Instanz einer Klasse mit eigenen Attributen und Methoden. Beispiel: mein_auto = Auto("rot")
Objektorientierung
Ein Programmierstil, bei dem Code in Objekte mit Eigenschaften und Verhalten organisiert wird.
Paket
Ein Ordner mit Python-Modulen und einer __init__.py-Datei. Erlaubt es, zusammengehoerigen Code zu strukturieren.
Parameter
Ein Platzhalter in einer Funktionsdefinition. Beim Aufruf wird ihm ein Argument uebergeben. Beispiel: def greet(name):
pip
Der Paketmanager von Python. Installiert externe Bibliotheken. Beispiel: pip install beautifulsoup4
Priority Queue
Eine Warteschlange, bei der Elemente nach Prioritaet (Wichtigkeit) entnommen werden. In Python: heapq-Modul.
PyCharm
Eine professionelle IDE fuer Python von JetBrains. Bietet Autovervollstaendigung, Debugger und Projektverwaltung.
Queue
Eine Warteschlange (FIFO – First In, First Out): das zuerst hinzugefuegte Element wird zuerst entnommen.
raise
Wirft manuell eine Exception aus. Beispiel: raise ValueError("Wert muss positiv sein")
range()
Eine Funktion, die eine Zahlenfolge erzeugt. Beispiel: range(5) ergibt 0,1,2,3,4. Haeufig in for-Schleifen.
Regex
Regulaerer Ausdruck – ein Muster zum Suchen und Pruefen von Texten. In Python: import re
REPL
Read-Eval-Print-Loop – der interaktive Python-Modus im Terminal. Ideal zum schnellen Ausprobieren.
return
Gibt einen Wert aus einer Funktion zurueck. Ohne return liefert die Funktion None.
Set
Eine Menge von einzigartigen Werten ohne Reihenfolge. Duplikate werden automatisch entfernt. Beispiel: {1, 2, 3}
Skript
Eine Python-Datei (.py), die direkt ausgefuehrt werden kann. Enthaelt ausfuehrbaren Code, nicht nur Definitionen.
Slice
Das Ausschneiden eines Teils einer Liste oder eines Strings. Beispiel: liste[1:4] gibt Elemente 1, 2, 3 zurueck.
String
Ein Textwert in Python, eingeschlossen in Anfuehrungszeichen. Beispiel: "Hallo Welt" oder "Python 3.12"
Terminal
Eine Textoberflaeche zur Eingabe von Befehlen. Python-Skripte koennen im Terminal gestartet werden.
try/except
Eine Fehlerbehandlungs-Struktur: try enthaelt den riskanten Code, except faengt Fehler ab und verhindert Abstuertze.
Tupel
Eine unveraenderliche (immutable) geordnete Sammlung. Aehnlich wie eine Liste, aber nach der Erstellung nicht mehr aenderbar.
Typkonvertierung
Das Umwandeln eines Wertes von einem Datentyp in einen anderen. Beispiel: int("42") ergibt 42 als Ganzzahl.
UTF-8
Der haeufigste Zeichensatz (Encoding) fuer Textdateien. Unterstuetzt alle Sprachen, Umlaute und Sonderzeichen.
Variable
Ein benannter Speicherplatz fuer einen Wert. Beispiel: alter = 25 – der Name "alter" zeigt auf den Wert 25.
Vererbung
Ein OOP-Prinzip: Eine Klasse erbt Eigenschaften und Methoden einer anderen Klasse und kann sie erweitern.
Web Scraping
Das automatische Auslesen von Inhalten aus Webseiten mit Python. Typische Bibliotheken: urllib, beautifulsoup.
while-Schleife
Eine Schleife, die laeuft, solange eine Bedingung wahr ist. Beispiel: while x < 10: – immer mit Abbruchbedingung!
with-Statement
Oeffnet eine Ressource (z. B. Datei) und schliesst sie automatisch, auch wenn ein Fehler auftritt. Sicherste Art zum Dateilesen.
Modul 01 1 Unterrichtseinheit

Einleitung & Setup

Du installierst Python auf deinem Computer, lernst die Python-Konsole kennen und schreibst dein allererstes Programm.

Keine Voraussetzungen Installation · IDLE · print() · Konsole
Was ist Python – und warum lernst du es?

Python ist eine der beliebtesten Programmiersprachen der Welt. Sie wird in der Webentwicklung, Datenanalyse, künstlichen Intelligenz und Automatisierung eingesetzt. Python wurde bewusst so entworfen, dass der Code leicht lesbar ist – fast wie normales Englisch. Das macht Python zur idealen Sprache für den Einstieg in die Programmierung.

💡 Warum gerade Python?

Python ist kostenlos, läuft auf Windows, Mac und Linux und hat eine riesige Community. Wenn du einmal nicht weiterweißt, findest du fast immer eine Lösung im Internet.

Python installieren

Bevor du programmieren kannst, brauchst du Python auf deinem Computer. Die Installation dauert nur wenige Minuten.

Windows

1
Öffne die offizielle Python-Website: https://www.python.org/downloads/
2
Klicke auf den großen gelben Button „Download Python 3.x.x“ (die neueste Version).
3
Starte die heruntergeladene Datei. Wichtig: Setze unbedingt den Haken bei Add python.exe to PATH ganz unten im Installationsfenster!
4
Klicke auf „Install Now“ und warte, bis die Installation abgeschlossen ist.
⚠️ Ohne PATH funktioniert vieles nicht

Wenn du den Haken bei Add python.exe to PATH vergisst, kann dein Computer den Befehl python später nicht finden. Falls das passiert: Deinstalliere Python und installiere es erneut – diesmal mit Haken.

Mac

Auf macOS ist häufig eine ältere Python-Version vorinstalliert. Lade trotzdem die aktuelle Version von python.org herunter und installiere sie – genau wie bei Windows.

IDLE – dein erster Python-Editor

IDLE ist ein einfacher Editor, der automatisch mit Python installiert wird. Er eignet sich perfekt für den Einstieg, weil du sofort Code eingeben und ausführen kannst.

1
Öffne das Startmenü (Windows) und suche nach IDLE.
2
Klicke auf IDLE (Python 3.x). Es öffnet sich ein Fenster mit dem Titel „Python Shell“.
3
Du siehst drei spitze Klammern: >>>. Das ist die Python-Konsole – hier kannst du direkt Code eingeben.
🧠 Die Python-Konsole ist dein Spielplatz

Stell dir die Konsole wie einen Taschenrechner vor: Du tippst etwas ein, drückst Enter, und Python antwortet sofort. Perfekt zum Ausprobieren!

Dein erstes Programm: print()

Der Befehl print() gibt Text auf dem Bildschirm aus. Er ist der einfachste und wichtigste Befehl zum Starten.

In der Python-Konsole (IDLE)
print("Hallo Welt!")

Tippe genau diesen Befehl in die IDLE-Konsole ein und drücke Enter. Python gibt aus:

Hallo Welt!

Herzlichen Glückwunsch – du hast gerade dein erstes Python-Programm geschrieben!

💡 Was passiert hier genau?

print() ist eine Funktion – ein eingebauter Befehl, der etwas tut. Die Anführungszeichen "..." markieren einen String (eine Zeichenkette). Python gibt den Text zwischen den Anführungszeichen aus.

Ein Python-Skript schreiben und speichern

Die Konsole ist praktisch zum Testen, aber für längere Programme erstellst du eine Datei. So geht’s in IDLE:

1
Klicke in IDLE auf File → New File. Ein leeres Editorfenster öffnet sich.
2
Tippe deinen Code in das neue Fenster ein.
3
Speichere die Datei mit File → Save (oder Strg+S). Wähle einen Namen wie hallo.py. Die Endung .py ist wichtig!
4
Führe das Skript aus mit Run → Run Module (oder F5). Die Ausgabe erscheint in der Shell.
hallo.py
# Mein erstes Python-Skript
print("Hallo Welt!")
print("Ich lerne Python.")
print("Das macht Spass!")
Die Python-Konsole als Taschenrechner

Python kann rechnen! Probiere folgende Eingaben in der Konsole aus:

>>> 5 + 3
8
>>> 10 - 4
6
>>> 3 * 7
21
>>> 20 / 4
5.0
OperatorBedeutungBeispielErgebnis
+Addition5 + 38
-Subtraktion10 - 46
*Multiplikation3 * 721
/Division20 / 45.0
**Potenz2 ** 38
//Ganzzahl-Division7 // 23
%Rest (Modulo)7 % 21
🤖
KI-Tipp: Fehlermeldungen verstehen

Wenn du einen Tippfehler machst, zeigt Python eine Fehlermeldung. Kopiere die Fehlermeldung und frage eine KI: „Erkläre mir diese Python-Fehlermeldung auf Deutsch, Schritt für Schritt: [Fehlermeldung einfügen]“

Praxisaufgaben
AUFGABE 1.1 Python installieren und IDLE starten

Ohne Python auf deinem Computer kannst du nicht programmieren. Diese Aufgabe stellt sicher, dass alles korrekt eingerichtet ist.

1
Lade Python von https://www.python.org/downloads/ herunter.
2
Installiere Python. Achte darauf, den Haken bei Add python.exe to PATH zu setzen.
3
Öffne das Startmenü und suche nach IDLE. Starte IDLE (Python 3.x).
4
Du solltest ein Fenster mit dem Titel Python Shell sehen. Darin steht >>> – die Python-Eingabeaufforderung.
Lösungshinweise anzeigen

Du siehst ein Fenster mit Text wie Python 3.12.x ... und darunter >>>. Wenn du 1 + 1 eingibst und Enter drückst, antwortet Python mit 2. Dann funktioniert alles.

AUFGABE 1.2 Drei Begrüßungen ausgeben

Mit print() kannst du beliebige Texte ausgeben. So kommuniziert dein Programm mit der Außenwelt.

1
Öffne IDLE und erstelle eine neue Datei mit File → New File.
2
Schreibe drei print()-Befehle untereinander, jeweils mit einem anderen Text in Anführungszeichen.
3
Speichere die Datei als begruessung.py mit File → Save.
4
Führe das Skript aus mit Run → Run Module (oder F5).
5
Du solltest drei Zeilen Text in der Shell sehen – genau die Texte, die du in print() geschrieben hast.
⚠️ Häufiger Fehler: Anführungszeichen vergessen

Falls du eine Fehlermeldung wie SyntaxError siehst: Prüfe, ob du die Anführungszeichen um den Text nicht vergessen hast. Richtig: print("Hallo"). Falsch: print(Hallo).

Lösungshinweise anzeigen

Dein Code könnte so aussehen:

print("Hallo!")
print("Ich heiße Python.")
print("Schön, dich kennenzulernen.")

In der Shell erscheinen drei Zeilen mit deinen Texten.

AUFGABE 1.3 Python als Taschenrechner nutzen

Du kannst Python jederzeit als Taschenrechner verwenden – ideal, um die Grundrechenarten und Operatoren kennenzulernen.

1
Tippe in der IDLE-Konsole 100 + 250 ein und drücke Enter. Du solltest 350 sehen.
2
Berechne 2 ** 10 (2 hoch 10). Erwartet: 1024.
3
Berechne 17 // 3 (Ganzzahl-Division). Erwartet: 5.
4
Berechne 17 % 3 (Rest der Division). Erwartet: 2.
Lösungshinweise anzeigen

// teilt und rundet auf die nächste ganze Zahl ab: 17 geteilt durch 3 ergibt 5 Rest 2. % gibt genau diesen Rest zurück.

🤖
KI-Tipp: Eigene Ideen ausprobieren

Du willst wissen, was Python noch kann? Frage eine KI: „Zeige mir 5 einfache Python-Befehle für Anfänger, die ich in der IDLE-Konsole ausprobieren kann. Erkläre jeden Befehl in einem Satz.“

Modul 02 2 Unterrichtseinheiten

Zahlen, Variablen & Strings

Du lernst, wie Python mit Zahlen und Text umgeht, wie du Werte in Variablen speicherst und wie du Eingaben vom Benutzer entgegennimmst.

Voraussetzung: Modul 01 Variablen · int · float · String · input() · type()
Was sind Datentypen?

Jeder Wert in Python hat einen Typ. Die drei wichtigsten Typen für den Anfang sind:

TypBedeutungBeispiel
intGanze Zahl (ohne Komma)42, -7, 0
floatKommazahl (mit Dezimalpunkt)3.14, -0.5
strString (Text, Zeichenkette)"Hallo", 'Python'
💡 Punkt statt Komma

Python verwendet den Punkt als Dezimalzeichen: 3.14 – nicht 3,14. Das Komma hat in Python eine andere Bedeutung (es trennt z. B. Werte in Listen).

Du kannst den Typ eines Werts mit type() herausfinden:

print(type(42))       # <class 'int'>
print(type(3.14))     # <class 'float'>
print(type("Hallo"))  # <class 'str'>
Variablen – Werte speichern

Eine VariableEin benannter Speicherplatz, in dem du einen Wert ablegen kannst – wie ein beschriftetes Gefäß. ist wie ein beschriftetes Gefäß: Du gibst ihr einen Namen und füllst sie mit einem Wert. Später kannst du den Wert über den Namen wieder abrufen.

name = "Anna"
alter = 30
groesse = 1.72

print(name)     # Anna
print(alter)    # 30
print(groesse)  # 1.72

Regeln für Variablennamen

ErlaubtNicht erlaubt
mein_namemein-name (Bindestrich)
alter22alter (beginnt mit Zahl)
_privatmein name (Leerzeichen)
🧠 Gute Namen wählen

Verwende sprechende Namen: alter statt a, preis statt x. So verstehst du deinen Code auch noch in einer Woche.

Variablen ändern und kombinieren

Du kannst den Wert einer Variable jederzeit überschreiben:

punkte = 10
print(punkte)   # 10

punkte = punkte + 5
print(punkte)   # 15

Zusätzlich gibt es abgekürzte Schreibweisen:

LangformKurzformBedeutung
x = x + 5x += 55 dazuaddieren
x = x - 2x -= 22 abziehen
x = x * 3x *= 3Verdreifachen
x = x / 2x /= 2Halbieren
Strings – mit Text arbeiten

Ein StringEine Zeichenkette – also Text in Anführungszeichen. Kann Buchstaben, Zahlen und Sonderzeichen enthalten. ist Text in Anführungszeichen. Du kannst einfache '...' oder doppelte "..." verwenden:

vorname = "Max"
nachname = 'Mustermann'

# Strings verbinden (Konkatenation)
ganzer_name = vorname + " " + nachname
print(ganzer_name)  # Max Mustermann

f-Strings – Variablen in Text einbauen

Die eleganteste Art, Variablen in einen Text einzubauen, sind f-Strings. Setze ein f vor die Anführungszeichen und schreibe Variablen in geschweifte Klammern:

name = "Anna"
alter = 30

print(f"Hallo, ich bin {name} und {alter} Jahre alt.")
# Hallo, ich bin Anna und 30 Jahre alt.
Benutzereingaben mit input()

Mit input() kannst du den Benutzer nach einer Eingabe fragen. Die Eingabe wird immer als String zurückgegeben:

name = input("Wie heisst du? ")
print(f"Hallo, {name}!")
⚠️ input() gibt immer einen String zurück

Auch wenn der Benutzer eine Zahl eingibt, ist das Ergebnis ein String! Wenn du damit rechnen willst, musst du umwandeln: alter = int(input("Dein Alter: "))

Typumwandlung

Manchmal musst du einen Wert von einem Typ in einen anderen umwandeln:

# String zu Zahl
text = "42"
zahl = int(text)      # 42 als Ganzzahl
komma = float(text)   # 42.0 als Kommazahl

# Zahl zu String
zahl = 100
text = str(zahl)      # "100" als Text
🤖
KI-Tipp: Datentyp-Fehler verstehen

Wenn du eine Fehlermeldung wie TypeError: can only concatenate str to str bekommst, frage eine KI: „Ich bekomme diesen Python-Fehler: [Fehlermeldung]. Erkläre mir einfach, was falsch ist und wie ich es behebe.“

Praxisaufgaben
AUFGABE 2.1 Steckbrief mit Variablen

Variablen sind das Fundament jedes Programms. Hier übst du, Werte zu speichern und auszugeben.

1
Erstelle eine neue Datei in IDLE (File → New File) und speichere sie als steckbrief.py.
2
Erstelle eine Variable name und weise ihr deinen Namen als String zu, z. B. name = "Max".
3
Erstelle eine Variable alter mit deinem Alter als Ganzzahl (int).
4
Erstelle eine Variable hobby mit einem deiner Hobbys als String.
5
Gib alles mit einem f-String aus: print(f"Ich bin {name}, {alter} Jahre alt. Mein Hobby: {hobby}")
6
Führe das Skript aus mit F5. Du solltest deinen Steckbrief als eine Zeile in der Shell sehen.
Lösungshinweise anzeigen

Die Ausgabe sieht z. B. so aus: Ich bin Max, 35 Jahre alt. Mein Hobby: Kochen. Achte darauf, dass alter ohne Anführungszeichen zugewiesen wird (Zahl, nicht String).

AUFGABE 2.2 Benutzereingabe und Berechnung

In echten Programmen kommen Werte oft vom Benutzer. Hier übst du input() und Typumwandlung.

1
Erstelle eine neue Datei geburtsjahr.py.
2
Frage den Benutzer nach seinem Geburtsjahr: eingabe = input("In welchem Jahr bist du geboren? ")
3
Wandle die Eingabe in eine Ganzzahl um: geburtsjahr = int(eingabe)
4
Berechne das Alter: alter = 2026 - geburtsjahr
5
Gib das Ergebnis aus: print(f"Du bist ungefaehr {alter} Jahre alt.")
6
Führe das Skript aus. Gib ein Geburtsjahr ein (z. B. 1990). Du solltest sehen: Du bist ungefaehr 36 Jahre alt.
⚠️ Fehler bei ungültiger Eingabe

Wenn du statt einer Zahl einen Buchstaben eingibst, stürzt das Programm mit einem ValueError ab. Das ist normal – in Modul 11 lernst du, wie du solche Fehler abfängst.

Lösungshinweise anzeigen

Der wichtigste Punkt: input() gibt immer einen String zurück. Ohne int() würdest du versuchen, von einer Zahl einen Text abzuziehen – das geht nicht.

AUFGABE 2.3 Datentypen untersuchen

Zu wissen, welchen Typ ein Wert hat, hilft dir bei der Fehlersuche. Hier übst du type().

1
Öffne die IDLE-Konsole (Python Shell).
2
Tippe type(42) ein und drücke Enter. Erwartet: <class 'int'>.
3
Tippe type(3.14) ein. Erwartet: <class 'float'>.
4
Tippe type("42") ein. Erwartet: <class 'str'> – obwohl es wie eine Zahl aussieht!
5
Tippe type(True) ein. Erwartet: <class 'bool'>. Booleans lernst du in Modul 04 genauer kennen.
Lösungshinweise anzeigen

Der Unterschied zwischen 42 und "42" ist entscheidend: Ersteres ist eine Zahl (int), mit der du rechnen kannst. Letzteres ist ein Text (str) – Python würde "42" + "42" zu "4242" zusammenfügen, nicht zu 84!

🤖
KI-Tipp: Eigene Variablen-Aufgaben generieren

Wenn du mehr üben willst, frage eine KI: „Gib mir 3 einfache Python-Übungsaufgaben zum Thema Variablen und Datentypen für Anfänger. Zeige die Lösung erst, wenn ich danach frage.“

Modul 03 2 Unterrichtseinheiten

Listen & Daten umwandeln

Du lernst, wie du mehrere Werte in einer Liste sammelst, Elemente hinzufügst oder entfernst und Datentypen gezielt umwandelst.

Voraussetzung: Modul 02 Listen · append · pop · index · Typumwandlung
Was ist eine Liste?

Stell dir eine ListeEine geordnete Sammlung von Werten in eckigen Klammern. Jedes Element hat eine Position (Index), die bei 0 beginnt. wie eine Einkaufsliste vor: Du schreibst mehrere Einträge untereinander, und jeder Eintrag hat eine feste Position. In Python schreibst du Listen in eckigen Klammern:

farben = ["rot", "blau", "gruen"]
zahlen = [10, 20, 30, 40]
gemischt = ["Hallo", 42, 3.14, True]

print(farben)  # ['rot', 'blau', 'gruen']
💡 Listen können alles enthalten

Eine Liste kann Strings, Zahlen, Booleans und sogar andere Listen enthalten. Für den Anfang verwendest du am besten Listen mit Elementen des gleichen Typs.

Auf Elemente zugreifen – der Index

Jedes Element in einer Liste hat eine Nummer – den Index. Wichtig: Python beginnt bei 0 zu zählen!

tiere = ["Hund", "Katze", "Vogel", "Fisch"]

print(tiere[0])   # Hund   (erstes Element)
print(tiere[1])   # Katze  (zweites Element)
print(tiere[-1])  # Fisch  (letztes Element)
ElementIndex von vorneIndex von hinten
"Hund"0-4
"Katze"1-3
"Vogel"2-2
"Fisch"3-1
⚠️ IndexError – häufiger Anfängerfehler

Wenn du auf einen Index zugreifst, der nicht existiert (z. B. tiere[10] bei nur 4 Elementen), bekommst du einen IndexError. Prüfe im Zweifel die Länge mit len(tiere).

Listen verändern

Anders als Strings sind Listen veränderbar (mutable). Du kannst Elemente hinzufügen, entfernen und ändern:

Elemente hinzufügen

einkauf = ["Brot", "Milch"]

einkauf.append("Eier")       # Am Ende anhaengen
print(einkauf)  # ['Brot', 'Milch', 'Eier']

einkauf.insert(1, "Butter")  # An Position 1 einfuegen
print(einkauf)  # ['Brot', 'Butter', 'Milch', 'Eier']

Elemente entfernen

einkauf.remove("Milch")     # Bestimmtes Element entfernen
print(einkauf)  # ['Brot', 'Butter', 'Eier']

letztes = einkauf.pop()      # Letztes Element entfernen und zurueckgeben
print(letztes)  # Eier

Elemente ändern und sortieren

noten = [3, 1, 4, 2]
noten[0] = 5         # Erstes Element aendern
print(noten)         # [5, 1, 4, 2]

noten.sort()          # Aufsteigend sortieren
print(noten)         # [1, 2, 4, 5]

noten.sort(reverse=True)  # Absteigend sortieren
print(noten)         # [5, 4, 2, 1]
Nützliche Listen-Funktionen
Funktion / MethodeWas sie tutBeispiel
len(liste)Anzahl der Elementelen([1,2,3])3
liste.append(x)x am Ende anhängenl.append("neu")
liste.insert(i, x)x an Position i einfügenl.insert(0, "vorne")
liste.remove(x)Erstes Vorkommen von x entfernenl.remove("alt")
liste.pop()Letztes Element entfernen & zurückgebenx = l.pop()
liste.sort()Liste sortierenl.sort()
liste.reverse()Reihenfolge umkehrenl.reverse()
x in listePrüfen, ob x enthalten ist"Hund" in tiereTrue
Daten umwandeln (Casting)

Du hast in Modul 02 bereits int(), float() und str() kennengelernt. Hier kommen weitere Umwandlungen dazu:

# String in Liste umwandeln
buchstaben = list("Python")
print(buchstaben)  # ['P', 'y', 't', 'h', 'o', 'n']

# String aufteilen (split)
satz = "Ich lerne Python"
woerter = satz.split()
print(woerter)  # ['Ich', 'lerne', 'Python']

# Liste zu String verbinden (join)
zusammen = " - ".join(woerter)
print(zusammen)  # Ich - lerne - Python
🧠 split() und join() sind ein Paar

split() macht aus einem String eine Liste, join() macht aus einer Liste einen String. Zusammen sind sie extrem nützlich für Textverarbeitung.

🤖
KI-Tipp: Listen-Operationen erklären lassen

Wenn du dir unsicher bist, was eine Listen-Methode genau macht, frage eine KI: „Erkläre mir die Python-Methode .insert() an einem einfachen Beispiel. Was passiert mit den anderen Elementen?“

Praxisaufgaben
AUFGABE 3.1 Einkaufsliste verwalten

Listen sind ideal, um Sammlungen von Daten zu verwalten. Hier erstellst du eine Einkaufsliste und veränderst sie.

1
Erstelle eine neue Datei einkauf.py in IDLE.
2
Erstelle eine Liste mit 3 Produkten: einkauf = ["Brot", "Milch", "Kaese"]
3
Füge mit einkauf.append("Butter") ein weiteres Produkt hinzu.
4
Entferne "Milch" mit einkauf.remove("Milch").
5
Gib die fertige Liste aus: print(einkauf). Erwartet: ['Brot', 'Kaese', 'Butter']
6
Gib die Anzahl der Produkte aus: print(len(einkauf)). Erwartet: 3
Lösungshinweise anzeigen

append() fügt immer am Ende an, remove() sucht das erste Vorkommen und entfernt es. Die Reihenfolge der verbleibenden Elemente bleibt erhalten.

AUFGABE 3.2 Notenliste sortieren

Sortieren ist eine der häufigsten Operationen mit Listen. Hier übst du sort() und len().

1
Erstelle eine neue Datei noten.py.
2
Erstelle eine Liste: noten = [3, 1, 5, 2, 4, 2]
3
Gib die Liste aus: print("Unsortiert:", noten)
4
Sortiere die Liste aufsteigend: noten.sort()
5
Gib die sortierte Liste aus: print("Sortiert:", noten). Erwartet: [1, 2, 2, 3, 4, 5]
6
Gib die beste Note (erstes Element) aus: print("Beste Note:", noten[0]). Erwartet: 1
Lösungshinweise anzeigen

sort() verändert die Liste dauerhaft. Nach dem Sortieren steht die kleinste Zahl am Anfang (Index 0). Wenn du die Originalliste behalten willst, nutze sorted(noten) – das gibt eine neue Liste zurück, ohne die alte zu verändern.

AUFGABE 3.3 Satz in Wörter zerlegen

Die Umwandlung zwischen Strings und Listen ist eine häufige Aufgabe bei der Textverarbeitung.

1
Erstelle eine neue Datei woerter.py.
2
Erstelle einen String: satz = "Python macht Programmieren einfach"
3
Zerlege den Satz in Wörter: woerter = satz.split()
4
Gib die Wörter-Liste aus: print(woerter). Erwartet: ['Python', 'macht', 'Programmieren', 'einfach']
5
Gib die Anzahl der Wörter aus: print("Woerter:", len(woerter)). Erwartet: 4
Lösungshinweise anzeigen

split() ohne Argument trennt am Leerzeichen. Du kannst auch andere Trennzeichen angeben, z. B. "a,b,c".split(",") ergibt ['a', 'b', 'c'].

🤖
KI-Tipp: Listen-Aufgaben üben

Wenn du mehr Praxis brauchst, frage eine KI: „Gib mir eine Python-Aufgabe, bei der ich eine Liste mit 5 Namen erstellen, sortieren und das dritte Element ausgeben muss. Prüfe meine Lösung, wenn ich sie dir zeige.“

Modul 04 2 Unterrichtseinheiten

Kontrollstrukturen: if/else & Booleans

Du lernst, wie dein Programm Entscheidungen trifft – abhängig von Bedingungen führt es unterschiedlichen Code aus.

Voraussetzung: Modul 02 if · else · elif · Boolean · Vergleichsoperatoren
Was sind Booleans?

Ein BooleanEin Datentyp mit genau zwei möglichen Werten: True (wahr) oder False (falsch). Wird für Bedingungen und Entscheidungen verwendet. ist der einfachste Datentyp in Python: Er kennt nur zwei Werte – True (wahr) und False (falsch). Stell dir einen Lichtschalter vor: an oder aus, nichts dazwischen.

ist_sonnig = True
regnet_es = False

print(type(ist_sonnig))  # <class 'bool'>
💡 Groß- und Kleinschreibung beachten

True und False werden in Python immer mit großem Anfangsbuchstaben geschrieben. true oder TRUE funktionieren nicht und erzeugen einen Fehler.

Vergleichsoperatoren

Vergleichsoperatoren vergleichen zwei Werte und liefern True oder False zurück:

OperatorBedeutungBeispielErgebnis
==Gleich?5 == 5True
!=Ungleich?5 != 3True
>Größer?5 > 3True
<Kleiner?5 < 3False
>=Größer oder gleich?5 >= 5True
<=Kleiner oder gleich?3 <= 5True
⚠️ == vs. = – Verwechslungsgefahr!

= ist die Zuweisung (Wert speichern). == ist der Vergleich (Werte vergleichen). x = 5 speichert 5 in x. x == 5 fragt: „Ist x gleich 5?“

Entscheidungen mit if

Mit if kannst du Code nur dann ausführen, wenn eine Bedingung wahr ist:

alter = 20

if alter >= 18:
    print("Du bist volljaehrig.")
💡 Einrückung ist Pflicht!

Python erkennt zusammengehörigen Code an der Einrückung (4 Leerzeichen oder 1 Tab). Alles, was eingerückt unter dem if steht, gehört zum if-Block. Vergisst du die Einrückung, bekommst du einen IndentationError.

if / else – Entweder-oder

Mit else legst du fest, was passiert, wenn die Bedingung nicht erfüllt ist:

alter = 15

if alter >= 18:
    print("Du bist volljaehrig.")
else:
    print("Du bist minderjaehrig.")

Genau einer der beiden Blöcke wird immer ausgeführt – nie beide.

if / elif / else – Mehrere Bedingungen

Mit elif (kurz für „else if“) kannst du weitere Bedingungen prüfen:

note = 2

if note == 1:
    print("Sehr gut!")
elif note == 2:
    print("Gut!")
elif note == 3:
    print("Befriedigend.")
elif note <= 5:
    print("Noch bestanden.")
else:
    print("Nicht bestanden.")

Python prüft die Bedingungen von oben nach unten. Sobald eine zutrifft, wird der zugehörige Block ausgeführt und der Rest übersprungen.

Logische Operatoren: and, or, not

Du kannst Bedingungen kombinieren:

OperatorBedeutungBeispiel
andBeide müssen wahr seinalter >= 18 and alter <= 65
orMindestens eine muss wahr seintag == "Sa" or tag == "So"
notDreht wahr/falsch umnot ist_sonnig
alter = 25
hat_ausweis = True

if alter >= 18 and hat_ausweis:
    print("Einlass gewaehrt.")
else:
    print("Kein Einlass.")
🧠 Lesbare Bedingungen

Statt if hat_ausweis == True: schreibst du einfach if hat_ausweis:. Das liest sich fast wie Englisch: „Wenn hat Ausweis, dann ...“

🤖
KI-Tipp: Verschachtelte Bedingungen vereinfachen

Wenn dein if/elif/else-Block unübersichtlich wird, frage eine KI: „Vereinfache diesen Python-Code mit if/elif/else. Erkläre, was du geändert hast: [Code einfügen]“

Praxisaufgaben
AUFGABE 4.1 Altersprüfung

Programme müssen oft Entscheidungen treffen. Hier baust du eine einfache Altersprüfung.

1
Erstelle eine neue Datei alter_check.py.
2
Frage das Alter ab: alter = int(input("Wie alt bist du? "))
3
Schreibe eine if/else-Abfrage: Wenn alter >= 18, gib "Du darfst waehlen." aus. Sonst: "Du darfst noch nicht waehlen."
4
Führe das Skript aus und gib 20 ein. Erwartet: Du darfst waehlen.
5
Führe es nochmal aus und gib 15 ein. Erwartet: Du darfst noch nicht waehlen.
Lösungshinweise anzeigen

Achte auf den Doppelpunkt nach if alter >= 18: und else: – den vergisst man leicht. Außerdem muss der Code unter if und else eingerückt sein.

AUFGABE 4.2 Notenrechner mit elif

Mit elif kannst du mehrere Stufen abfragen – perfekt für Notenberechnungen oder Rabattsysteme.

1
Erstelle eine neue Datei noten_rechner.py.
2
Frage die Punktzahl ab: punkte = int(input("Wie viele Punkte (0-100)? "))
3
Erstelle eine if/elif/else-Kette: ab 90 Punkte → "Sehr gut", ab 75 → "Gut", ab 60 → "Befriedigend", ab 50 → "Ausreichend", sonst → "Nicht bestanden".
4
Gib das Ergebnis mit einem f-String aus: print(f"Bei {punkte} Punkten: {note}")
5
Teste mit verschiedenen Werten: 95 → Sehr gut, 80 → Gut, 40 → Nicht bestanden.
⚠️ Reihenfolge der elif-Bedingungen

Prüfe immer vom höchsten Wert nach unten! Wenn du zuerst punkte >= 50 prüfst, würden auch 95 Punkte als „Ausreichend“ gelten – weil Python beim ersten Treffer aufhört.

Lösungshinweise anzeigen

Die Reihenfolge ist entscheidend: if punkte >= 90: kommt zuerst, dann elif punkte >= 75: usw. Am Ende steht else: für alle Werte unter 50.

AUFGABE 4.3 Logische Operatoren testen

Mit and und or kannst du komplexere Bedingungen formulieren – wichtig für reale Programme.

1
Öffne die IDLE-Konsole.
2
Tippe 5 > 3 and 10 > 7 ein. Erwartet: True (beide sind wahr).
3
Tippe 5 > 3 and 10 < 7 ein. Erwartet: False (eine ist falsch).
4
Tippe 5 > 3 or 10 < 7 ein. Erwartet: True (eine reicht bei or).
5
Tippe not True ein. Erwartet: False.
Lösungshinweise anzeigen

and ergibt nur True, wenn beide Seiten wahr sind. or ergibt True, wenn mindestens eine Seite wahr ist. not dreht den Wert um.

🤖
KI-Tipp: Eigene Szenarien entwickeln

Frage eine KI: „Gib mir ein Alltagsbeispiel für if/elif/else in Python – zum Beispiel einen Fahrkartenautomaten oder eine Wetter-App. Ich bin Anfänger.“

Modul 05 2 Unterrichtseinheiten

Kontrollstrukturen: Schleifen

Du lernst, wie du Code wiederholt ausführen lässt – mit while und for. Schleifen sind das Werkzeug, um Aufgaben zu automatisieren.

Voraussetzung: Modul 04 while · for · range() · break · continue
Warum Schleifen?

Stell dir vor, du willst die Zahlen 1 bis 100 ausgeben. Ohne Schleife bräuchtest du 100 print()-Befehle. Mit einer Schleife reichen 2 Zeilen. Schleifen wiederholen einen Codeblock, solange eine Bedingung erfüllt ist – oder für jedes Element einer Liste.

Die while-Schleife

Die while-Schleife wiederholt Code, solange eine Bedingung wahr ist:

zaehler = 1

while zaehler <= 5:
    print(f"Durchlauf {zaehler}")
    zaehler += 1

print("Fertig!")

Ausgabe:

Durchlauf 1
Durchlauf 2
Durchlauf 3
Durchlauf 4
Durchlauf 5
Fertig!
⚠️ Endlosschleife vermeiden!

Wenn du vergisst, den Zähler zu erhöhen (zaehler += 1), bleibt die Bedingung immer wahr und die Schleife läuft endlos. Drücke Strg+C in der Konsole, um eine Endlosschleife abzubrechen.

Die for-Schleife

Die for-Schleife geht eine Sammlung (z. B. eine Liste) Element für Element durch:

fruechte = ["Apfel", "Banane", "Kirsche"]

for frucht in fruechte:
    print(f"Ich mag {frucht}")

Ausgabe:

Ich mag Apfel
Ich mag Banane
Ich mag Kirsche
🧠 for vs. while – wann was?

Verwende for, wenn du weißt, wie oft du wiederholen willst (Liste, Zahlenbereich). Verwende while, wenn du nicht weißt, wie oft – z. B. „wiederhole, bis der Benutzer ‘quit’ eingibt“.

range() – Zahlenbereiche erzeugen

Mit range() erzeugst du eine Folge von Zahlen – perfekt für for-Schleifen:

# Zahlen 0 bis 4
for i in range(5):
    print(i)    # 0, 1, 2, 3, 4

# Zahlen 1 bis 5
for i in range(1, 6):
    print(i)    # 1, 2, 3, 4, 5

# Jede zweite Zahl von 0 bis 10
for i in range(0, 11, 2):
    print(i)    # 0, 2, 4, 6, 8, 10
AufrufErzeugtErklärung
range(5)0, 1, 2, 3, 4Startet bei 0, endet vor 5
range(1, 6)1, 2, 3, 4, 5Startet bei 1, endet vor 6
range(0, 11, 2)0, 2, 4, 6, 8, 10Schrittweite 2
⚠️ range() endet vor dem Endwert

range(5) erzeugt 0 bis 4 – nicht 0 bis 5! Wenn du 1 bis 10 willst, schreibst du range(1, 11).

break und continue

Mit break springst du sofort aus der Schleife heraus. Mit continue überspringst du den Rest des aktuellen Durchlaufs und machst mit dem nächsten weiter:

# break: Bei 5 aufhoeren
for i in range(1, 11):
    if i == 5:
        break
    print(i)    # 1, 2, 3, 4

# continue: Ungerade ueberspringen
for i in range(1, 11):
    if i % 2 != 0:
        continue
    print(i)    # 2, 4, 6, 8, 10
Verschachtelte Schleifen

Du kannst Schleifen ineinander setzen. Die innere Schleife läuft für jeden Durchlauf der äußeren komplett durch:

for zeile in range(1, 4):
    for spalte in range(1, 4):
        print(f"{zeile}x{spalte}={zeile*spalte}", end="  ")
    print()  # Neue Zeile

Ausgabe:

1x1=1  1x2=2  1x3=3
2x1=2  2x2=4  2x3=6
3x1=3  3x2=6  3x3=9
🤖
KI-Tipp: Schleifen-Logik nachvollziehen

Wenn du nicht verstehst, warum eine Schleife ein bestimmtes Ergebnis liefert, frage eine KI: „Gehe diesen Python-Code Schritt für Schritt durch und zeige mir den Wert jeder Variable in jedem Durchlauf: [Code einfügen]“

Praxisaufgaben
AUFGABE 5.1 Countdown mit while

while-Schleifen sind ideal für Zähler und Wiederholungen mit unbekannter Anzahl. Hier baust du einen einfachen Countdown.

1
Erstelle eine neue Datei countdown.py.
2
Erstelle eine Variable: zahl = 10
3
Schreibe eine while-Schleife: while zahl > 0:
4
Im Schleifenkörper: Gib zahl aus und verringere sie um 1 (zahl -= 1).
5
Nach der Schleife: print("Start!")
6
Führe das Skript aus. Du solltest 10, 9, 8, ... 1, Start! sehen.
Lösungshinweise anzeigen

Die Schleife läuft, solange zahl > 0. Bei zahl = 0 ist die Bedingung falsch und Python springt zu print("Start!"). Vergisst du zahl -= 1, läuft die Schleife endlos!

AUFGABE 5.2 Summe mit for-Schleife berechnen

for-Schleifen mit range() eignen sich perfekt zum Durchlaufen von Zahlenbereichen. Hier berechnest du eine Summe.

1
Erstelle eine neue Datei summe.py.
2
Erstelle eine Variable: summe = 0
3
Schreibe eine for-Schleife: for i in range(1, 11):
4
Im Schleifenkörper: summe += i
5
Nach der Schleife: print(f"Summe von 1 bis 10: {summe}")
6
Führe das Skript aus. Erwartet: Summe von 1 bis 10: 55
Lösungshinweise anzeigen

summe startet bei 0. In jedem Durchlauf wird i dazuaddiert: 0+1=1, 1+2=3, 3+3=6, ... bis 45+10=55. range(1, 11) erzeugt 1 bis 10.

AUFGABE 5.3 Passwort-Abfrage mit break

Eine while-Schleife mit break ist das Muster für „wiederhole, bis der Benutzer etwas Bestimmtes eingibt“.

1
Erstelle eine neue Datei passwort.py.
2
Erstelle eine Variable: geheim = "python123"
3
Schreibe while True: für eine Endlosschleife.
4
Im Schleifenkörper: eingabe = input("Passwort: ")
5
Prüfe: if eingabe == geheim: → gib "Zugang gewaehrt!" aus und schreibe break.
6
Im else-Block: print("Falsches Passwort. Versuche es erneut.")
7
Teste: Gib zuerst ein falsches Passwort ein, dann python123. Die Schleife sollte erst beim richtigen Passwort enden.
Lösungshinweise anzeigen

while True: läuft endlos – der einzige Ausweg ist break. Das ist ein gängiges Muster für Benutzereingabe-Schleifen: „Frage solange, bis die Eingabe stimmt.“

Modul 06 3 Unterrichtseinheiten

Funktionen

Du lernst, wie du eigene Funktionen erstellst, um Code wiederverwendbar und übersichtlich zu machen.

Voraussetzung: Modul 03 Voraussetzung: Modul 05 def · Parameter · return · Scope · Rekursion
Warum Funktionen?

Stell dir vor, du musst an 10 Stellen in deinem Programm eine Begrüßung ausgeben. Ohne Funktionen kopierst du den Code 10 Mal. Mit einer FunktionEin wiederverwendbarer Codeblock, den du mit einem Namen aufrufst. Definiert mit def. schreibst du den Code einmal und rufst ihn beliebig oft auf.

Eine Funktion definieren und aufrufen

Eine Funktion definierst du mit def, gefolgt vom Namen und Klammern:

def begruessung():
    print("Hallo und willkommen!")
    print("Schoen, dass du da bist.")

# Funktion aufrufen
begruessung()
begruessung()  # Kann beliebig oft aufgerufen werden
💡 Definition vs. Aufruf

def begruessung(): definiert die Funktion (erstellt den Bauplan). begruessung() ruft sie auf (führt den Code aus). Ohne Aufruf passiert nichts! Die Funktion muss immer vor dem Aufruf definiert sein.

Parameter – Werte übergeben

Parameter machen Funktionen flexibel. Du übergibst Werte, mit denen die Funktion arbeitet:

def begruessung(name):
    print(f"Hallo, {name}!")

begruessung("Anna")   # Hallo, Anna!
begruessung("Max")    # Hallo, Max!

Mehrere Parameter

def steckbrief(name, alter, stadt):
    print(f"{name} ist {alter} Jahre alt und wohnt in {stadt}.")

steckbrief("Anna", 30, "Berlin")

Standardwerte (Default-Parameter)

def begruessung(name, sprache="de"):
    if sprache == "de":
        print(f"Hallo, {name}!")
    else:
        print(f"Hello, {name}!")

begruessung("Anna")            # Hallo, Anna! (Standard: de)
begruessung("Max", "en")      # Hello, Max!
return – Werte zurückgeben

print() gibt Text auf dem Bildschirm aus, aber der Wert geht „verloren“. Mit return gibt die Funktion einen Wert zurück, den du weiterverwenden kannst:

def addiere(a, b):
    ergebnis = a + b
    return ergebnis

summe = addiere(5, 3)
print(summe)       # 8

# Direkt verwenden
print(addiere(10, 20))  # 30
🧠 print() vs. return

print() zeigt etwas an – wie ein Bildschirm. return gibt etwas zurück – wie eine Antwort. Wenn du das Ergebnis einer Funktion weiterverarbeiten willst (in Variablen speichern, in Berechnungen nutzen), brauchst du return.

Scope – Gültigkeitsbereich

Variablen, die innerhalb einer Funktion erstellt werden, existieren nur dort – das nennt man lokalen Scope:

def meine_funktion():
    nachricht = "Ich bin lokal"
    print(nachricht)  # Funktioniert

meine_funktion()
# print(nachricht)  # FEHLER! nachricht existiert hier nicht

Variablen außerhalb von Funktionen sind global und können überall gelesen (aber nicht verändert) werden:

gruss = "Hallo"  # Global

def zeige_gruss():
    print(gruss)  # Liest die globale Variable

zeige_gruss()  # Hallo
Ausblick: Rekursion

Eine Funktion kann sich selbst aufrufen – das nennt man Rekursion. Das klassische Beispiel ist die Fakultät (5! = 5 × 4 × 3 × 2 × 1 = 120):

def fakultaet(n):
    if n <= 1:
        return 1
    return n * fakultaet(n - 1)

print(fakultaet(5))  # 120
💡 Rekursion ist ein Ausblick

Rekursion ist ein fortgeschrittenes Konzept. Für den Anfang reicht es zu wissen, dass es existiert. Die meisten Aufgaben löst du einfacher mit Schleifen.

🤖
KI-Tipp: Funktionen aus bestehendem Code extrahieren

Wenn du merkst, dass du Code kopierst, frage eine KI: „Ich habe diesen Python-Code, der sich wiederholt. Zeige mir, wie ich daraus eine Funktion mache: [Code einfügen]“

Praxisaufgaben
AUFGABE 6.1 Eigene Begrüßungsfunktion

Funktionen machen Code wiederverwendbar. Hier erstellst du deine erste eigene Funktion mit Parameter.

1
Erstelle eine neue Datei funktionen.py.
2
Definiere eine Funktion: def hallo(name):
3
Im Funktionskörper: print(f"Hallo, {name}! Willkommen bei Python.")
4
Rufe die Funktion dreimal auf – mit drei verschiedenen Namen.
5
Führe das Skript aus. Du solltest drei Begrüßungen mit unterschiedlichen Namen sehen.
Lösungshinweise anzeigen

Achte darauf, dass der print()-Befehl eingerückt unter def steht. Die Aufrufe stehen nicht eingerückt unter der Funktion.

AUFGABE 6.2 Taschenrechner-Funktionen

Funktionen mit return geben Werte zurück, die du weiterverwenden kannst – das Grundprinzip für jedes größere Programm.

1
Erstelle eine neue Datei rechner.py.
2
Definiere: def addiere(a, b): mit return a + b
3
Definiere eine weitere Funktion multipliziere(a, b) mit return a * b.
4
Speichere das Ergebnis: summe = addiere(10, 5)
5
Gib es aus: print(f"10 + 5 = {summe}"). Erwartet: 10 + 5 = 15
6
Kombiniere beide: print(multipliziere(addiere(2, 3), 4)). Erwartet: 20
Lösungshinweise anzeigen

Im letzten Schritt wird zuerst addiere(2, 3) ausgeführt (ergibt 5), dann multipliziere(5, 4) (ergibt 20). So kannst du Funktionsaufrufe verschachteln.

AUFGABE 6.3 Funktion mit Standardwert

Default-Parameter machen Funktionen flexibler, weil nicht jeder Parameter beim Aufruf angegeben werden muss.

1
Erstelle eine neue Datei rabatt.py.
2
Definiere: def berechne_preis(preis, rabatt=10):
3
Im Funktionskörper: Berechne den reduzierten Preis und gib ihn mit return zurück: return preis - (preis * rabatt / 100)
4
Teste ohne Rabatt-Angabe: print(berechne_preis(100)). Erwartet: 90.0 (Standard: 10%)
5
Teste mit Rabatt-Angabe: print(berechne_preis(100, 25)). Erwartet: 75.0 (25% Rabatt)
Lösungshinweise anzeigen

Wenn du rabatt beim Aufruf nicht angibst, verwendet Python den Standardwert 10. Gibst du einen Wert an, wird der Standard überschrieben. Parameter mit Standardwert müssen immer nach Parametern ohne Standardwert stehen.

🤖
KI-Tipp: Funktionen für Alltagsaufgaben

Frage eine KI: „Zeige mir 3 Beispiele für nützliche Python-Funktionen im Alltag – z. B. Temperatur umrechnen, Trinkgeld berechnen oder BMI berechnen. Ich bin Anfänger.“

Modul 07 2 Unterrichtseinheiten

Dateien & CSV

Du lernst, wie du Dateien liest, schreibst und CSV-Dateien (Tabellendaten) mit Python verarbeitest.

Voraussetzung: Modul 06 open() · read · write · with · CSV
Warum Dateien?

Bisher gehen alle Daten verloren, sobald dein Programm endet. Mit Dateien kannst du Daten dauerhaft speichern – egal ob Texte, Ergebnisse oder Einstellungen. Das ist die Grundlage für praktisch jedes reale Programm.

Dateien lesen

Das Schlüsselwort with öffnet eine Datei und schließt sie automatisch, wenn du fertig bist. Das ist die sicherste Methode:

with open("meine_datei.txt", "r") as datei:
    inhalt = datei.read()
    print(inhalt)
ModusBedeutungDatei muss existieren?
"r"Lesen (read)Ja
"w"Schreiben (write) – überschreibt!Nein (wird erstellt)
"a"Anhängen (append)Nein (wird erstellt)

Zeile für Zeile lesen

with open("meine_datei.txt", "r") as datei:
    for zeile in datei:
        print(zeile.strip())  # strip() entfernt Zeilenumbrueche
🧠 strip() nicht vergessen

Jede Zeile aus einer Datei hat am Ende einen unsichtbaren Zeilenumbruch (\n). strip() entfernt ihn – sonst bekommst du leere Zeilen in der Ausgabe.

Dateien schreiben
# Neue Datei erstellen / ueberschreiben
with open("ausgabe.txt", "w") as datei:
    datei.write("Zeile 1\n")
    datei.write("Zeile 2\n")

# An bestehende Datei anhaengen
with open("ausgabe.txt", "a") as datei:
    datei.write("Zeile 3\n")
⚠️ Modus "w" überschreibt alles!

Wenn du eine existierende Datei mit "w" öffnest, wird der gesamte Inhalt gelöscht und neu geschrieben. Verwende "a" (append), wenn du etwas anhängen willst.

CSV-Dateien verarbeiten

CSV (Comma-Separated Values) ist ein verbreitetes Format für Tabellendaten. Python hat ein eingebautes csv-Modul dafür:

CSV lesen

import csv

with open("daten.csv", "r") as datei:
    leser = csv.reader(datei)
    for zeile in leser:
        print(zeile)  # Jede Zeile ist eine Liste

CSV schreiben

import csv

daten = [
    ["Name", "Alter", "Stadt"],
    ["Anna", "30", "Berlin"],
    ["Max", "25", "Hamburg"]
]

with open("personen.csv", "w", newline="") as datei:
    schreiber = csv.writer(datei)
    for zeile in daten:
        schreiber.writerow(zeile)
💡 newline="" bei CSV-Dateien

Beim Schreiben von CSV-Dateien auf Windows fügst du newline="" hinzu, damit keine doppelten Leerzeilen entstehen.

Encoding – Zeichensatz beachten

Wenn deine Datei Umlaute oder Sonderzeichen enthält, kann es zu Problemen kommen. Verwende dann encoding="utf-8":

with open("deutsch.txt", "r", encoding="utf-8") as datei:
    inhalt = datei.read()
    print(inhalt)
🤖
KI-Tipp: Encoding-Probleme lösen

Wenn du beim Öffnen einer Datei eine UnicodeDecodeError-Meldung bekommst, frage eine KI: „Ich bekomme beim Lesen einer Datei einen UnicodeDecodeError in Python. Wie finde ich heraus, welches Encoding meine Datei hat?“

Praxisaufgaben
AUFGABE 7.1 Tagebuch-Datei schreiben und lesen

Dateien lesen und schreiben ist die Grundlage für jede Anwendung, die Daten speichern muss.

1
Erstelle eine neue Datei tagebuch.py.
2
Schreibe Code, der eine Datei tagebuch.txt erstellt und 3 Zeilen hineinschreibt (Modus "w").
3
Vergiss nicht, jede Zeile mit \n zu beenden.
4
Lies die Datei danach mit "r" und gib den Inhalt aus.
5
Führe das Skript aus. Du solltest deine 3 Zeilen in der Konsole sehen. Prüfe auch, ob die Datei tagebuch.txt im gleichen Ordner erstellt wurde.
Lösungshinweise anzeigen

Erst schreibst du mit with open("tagebuch.txt", "w") as f: und dann liest du mit with open("tagebuch.txt", "r") as f:. Die Datei findest du im gleichen Ordner wie dein Python-Skript.

AUFGABE 7.2 CSV-Datei mit Kontakten

CSV-Dateien sind das Standardformat für Tabellendaten – du kannst sie auch in Excel oder Google Sheets öffnen.

1
Erstelle eine neue Datei kontakte.py.
2
Importiere das csv-Modul: import csv
3
Erstelle eine Liste von Listen mit Kontaktdaten (Name, Telefon, Email) – mindestens 3 Kontakte plus eine Kopfzeile.
4
Schreibe die Daten in kontakte.csv mit csv.writer.
5
Lies die Datei danach mit csv.reader und gib jede Zeile aus.
6
Öffne die erstellte kontakte.csv auch mit einem Texteditor, um das CSV-Format zu sehen.
Lösungshinweise anzeigen

Die CSV-Datei sieht im Texteditor so aus: Name,Telefon,Email in der ersten Zeile, dann z. B. Anna,0123456,anna@email.de. Jede Zeile beim Lesen ist eine Liste: ['Anna', '0123456', 'anna@email.de'].

🤖
KI-Tipp: Dateioperationen für deinen Anwendungsfall

Frage eine KI: „Ich möchte mit Python eine Textdatei durchsuchen und alle Zeilen ausgeben, die ein bestimmtes Wort enthalten. Zeige mir den Code Schritt für Schritt.“

Modul 08 3 Unterrichtseinheiten

Listen vertieft: Slicing, Comprehension, Dictionaries & Tupel

Du vertiefst dein Wissen über Listen und lernst drei weitere Datenstrukturen kennen, die in Python allgegenwärtig sind.

Voraussetzung: Modul 03 Slicing · Comprehension · Dictionary · Tupel
List Slicing – Teilstücke aus Listen

Slicing lässt dich einen Ausschnitt aus einer Liste herausholen, ohne die Originalliste zu verändern:

buchstaben = ["a", "b", "c", "d", "e"]

print(buchstaben[1:4])   # ['b', 'c', 'd']  (Index 1 bis 3)
print(buchstaben[:3])    # ['a', 'b', 'c']  (Anfang bis Index 2)
print(buchstaben[2:])    # ['c', 'd', 'e']  (Index 2 bis Ende)
print(buchstaben[::2])   # ['a', 'c', 'e']  (jedes zweite Element)
print(buchstaben[::-1])  # ['e', 'd', 'c', 'b', 'a']  (umgekehrt)
🧠 Slicing-Formel: liste[start:stop:step]

start = ab wo (inklusive), stop = bis wo (exklusive), step = Schrittweite. Lässt du einen Wert weg, verwendet Python den Standard: Anfang, Ende, 1.

List Comprehension – Listen in einer Zeile erstellen

List Comprehension ist eine kompakte Schreibweise, um aus einer bestehenden Liste eine neue zu erzeugen:

# Klassisch mit for-Schleife
quadrate = []
for i in range(1, 6):
    quadrate.append(i ** 2)

# Mit List Comprehension (eine Zeile!)
quadrate = [i ** 2 for i in range(1, 6)]
print(quadrate)  # [1, 4, 9, 16, 25]

Mit Bedingung filtern

zahlen = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
gerade = [x for x in zahlen if x % 2 == 0]
print(gerade)  # [2, 4, 6, 8, 10]
Dictionaries – Schlüssel-Wert-Paare

Ein DictionaryEine Sammlung von Schlüssel-Wert-Paaren in geschweiften Klammern. Zugriff über den Schlüssel statt über einen Index. speichert Daten als Paare: Jeder Schlüssel hat einen Wert. Stell es dir wie ein Wörterbuch vor – du schlΓ€gst ein Wort (Schlüssel) nach und bekommst die Definition (Wert).

person = {
    "name": "Anna",
    "alter": 30,
    "stadt": "Berlin"
}

print(person["name"])   # Anna
print(person["alter"])  # 30

Elemente hinzufügen und ändern

person["beruf"] = "Entwicklerin"   # Neues Paar hinzufuegen
person["alter"] = 31                # Wert aendern
del person["stadt"]                 # Paar loeschen

print(person)  # {'name': 'Anna', 'alter': 31, 'beruf': 'Entwicklerin'}

Durch ein Dictionary iterieren

for schluessel, wert in person.items():
    print(f"{schluessel}: {wert}")
MethodeGibt zurück
dict.keys()Alle Schlüssel
dict.values()Alle Werte
dict.items()Alle Paare als Tupel
dict.get("key", default)Wert oder default, wenn Schlüssel fehlt
⚠️ KeyError vermeiden

Wenn du auf einen Schlüssel zugreifst, der nicht existiert (person["hobby"]), bekommst du einen KeyError. Nutze person.get("hobby", "unbekannt") – das gibt „unbekannt“ zurück statt abzustürzen.

Tupel – unveränderliche Listen

Ein TupelWie eine Liste, aber unveränderlich (immutable). Einmal erstellt, können Elemente nicht hinzugefügt, entfernt oder geändert werden. sieht aus wie eine Liste, wird aber mit runden Klammern geschrieben und kann nicht verändert werden:

koordinate = (48.1, 11.6)
print(koordinate[0])  # 48.1
print(koordinate[1])  # 11.6

# Das geht NICHT:
# koordinate[0] = 50.0  # TypeError!
💡 Wann Tupel statt Liste?

Verwende Tupel für Daten, die sich nicht ändern sollen – z. B. Koordinaten, RGB-Farben (255, 0, 0) oder feste Konfigurationswerte. Listen verwendest du, wenn Elemente hinzugefügt oder entfernt werden.

🤖
KI-Tipp: Die richtige Datenstruktur wählen

Wenn du unsicher bist, ob du eine Liste, ein Dictionary oder ein Tupel brauchst, frage eine KI: „Ich möchte [Daten beschreiben] in Python speichern. Welche Datenstruktur passt am besten und warum?“

Praxisaufgaben
AUFGABE 8.1 Slicing ausprobieren

Slicing ist eine Möglichkeit, schnell Teile einer Liste zu extrahieren – z. B. die ersten 3 Elemente oder jedes zweite Element.

1
Öffne die IDLE-Konsole.
2
Erstelle eine Liste: zahlen = [10, 20, 30, 40, 50, 60, 70]
3
Gib die ersten 3 Elemente aus: print(zahlen[:3]). Erwartet: [10, 20, 30]
4
Gib die letzten 2 Elemente aus: print(zahlen[-2:]). Erwartet: [60, 70]
5
Kehre die Liste um: print(zahlen[::-1]). Erwartet: [70, 60, 50, 40, 30, 20, 10]
Lösungshinweise anzeigen

Slicing erstellt immer eine neue Liste. Die Originalliste zahlen bleibt unverändert. [::-1] ist ein praktischer Trick, um eine Liste umzudrehen.

AUFGABE 8.2 Telefonbuch mit Dictionary

Dictionaries sind ideal für Daten, bei denen du einen Wert über einen Namen (Schlüssel) nachschlagen willst.

1
Erstelle eine neue Datei telefonbuch.py.
2
Erstelle ein Dictionary mit mindestens 3 Einträgen: telefonbuch = {"Anna": "0123", "Max": "0456", "Lisa": "0789"}
3
Frage den Benutzer nach einem Namen: name = input("Name suchen: ")
4
Suche die Nummer mit get(): nummer = telefonbuch.get(name, "Nicht gefunden")
5
Gib das Ergebnis aus. Teste mit Anna (gefunden) und Tom (nicht gefunden).
Lösungshinweise anzeigen

get() ist sicherer als direkte Klammern: telefonbuch["Tom"] würde einen KeyError auslösen, telefonbuch.get("Tom", "Nicht gefunden") gibt den Standardwert zurück.

AUFGABE 8.3 List Comprehension: Nur große Zahlen

List Comprehension ist eine elegante Art, Listen zu filtern und zu transformieren – eine wichtige Python-Technik.

1
Erstelle eine neue Datei comprehension.py.
2
Erstelle eine Liste: zahlen = [3, 17, 42, 8, 99, 25, 11, 50]
3
Erstelle mit List Comprehension eine neue Liste, die nur Zahlen über 20 enthält: grosse = [x for x in zahlen if x > 20]
4
Gib beide Listen aus. Erwartet für grosse: [42, 99, 25, 50]
Lösungshinweise anzeigen

Die List Comprehension liest sich fast wie Englisch: „Nimm x für jedes x in zahlen, wenn x größer als 20 ist.“ Die Originalliste bleibt unverändert.

Modul 09 4 Unterrichtseinheiten

Objektorientierung

Du lernst, wie du mit Klassen und Objekten eigene Datentypen erstellst – das Fundament für größere Programme.

Voraussetzung: Modul 06 class · __init__ · self · Methoden · Vererbung
Was ist Objektorientierung?

Bisher hast du mit einfachen Datentypen (Zahlen, Strings, Listen) und Funktionen gearbeitet. Aber was, wenn du ein „Auto“ mit Farbe, Geschwindigkeit und Tank darstellen willst? Dafür brauchst du einen eigenen Datentyp – eine KlasseEin Bauplan für Objekte. Definiert, welche Eigenschaften (Attribute) und Fähigkeiten (Methoden) ein Objekt hat..

Stell dir eine Klasse wie einen Bauplan vor und ein Objekt wie das fertige Produkt: Aus dem Bauplan „Auto“ kannst du beliebig viele Autos bauen – jedes mit eigenen Werten für Farbe, Marke und Kilometerstand.

Eine Klasse definieren
class Hund:
    def __init__(self, name, rasse):
        self.name = name
        self.rasse = rasse

    def bellen(self):
        print(f"{self.name} sagt: Wuff!")

# Objekte erstellen
hund1 = Hund("Bello", "Labrador")
hund2 = Hund("Rex", "Schaeferhund")

print(hund1.name)   # Bello
hund1.bellen()       # Bello sagt: Wuff!
hund2.bellen()       # Rex sagt: Wuff!
💡 Was bedeutet self?

self ist ein Verweis auf das aktuelle Objekt. Wenn du hund1.bellen() aufrufst, wird self automatisch zu hund1. So weiß die Methode, auf welches Objekt sie sich bezieht. self muss immer der erste Parameter jeder Methode sein.

__init__ – der Konstruktor

__init__ ist eine spezielle Methode, die automatisch aufgerufen wird, wenn du ein neues Objekt erstellst. Hier setzt du die Startwerte (Attribute):

class Konto:
    def __init__(self, inhaber, kontostand=0):
        self.inhaber = inhaber
        self.kontostand = kontostand

    def einzahlen(self, betrag):
        self.kontostand += betrag
        print(f"{betrag} EUR eingezahlt. Neuer Stand: {self.kontostand} EUR")

    def abheben(self, betrag):
        if betrag > self.kontostand:
            print("Nicht genug Guthaben!")
        else:
            self.kontostand -= betrag
            print(f"{betrag} EUR abgehoben. Neuer Stand: {self.kontostand} EUR")

mein_konto = Konto("Anna", 100)
mein_konto.einzahlen(50)   # 50 EUR eingezahlt. Neuer Stand: 150 EUR
mein_konto.abheben(200)    # Nicht genug Guthaben!
Vererbung – Klassen erweitern

Mit Vererbung kannst du eine neue Klasse erstellen, die alle Eigenschaften und Methoden einer bestehenden Klasse übernimmt:

class Tier:
    def __init__(self, name):
        self.name = name

    def sprechen(self):
        print(f"{self.name} macht ein Geraeusch.")

class Katze(Tier):  # Katze erbt von Tier
    def sprechen(self):  # Methode ueberschreiben
        print(f"{self.name} sagt: Miau!")

class Hund(Tier):
    def sprechen(self):
        print(f"{self.name} sagt: Wuff!")

tiere = [Katze("Minka"), Hund("Bello")]
for tier in tiere:
    tier.sprechen()

Ausgabe:

Minka sagt: Miau!
Bello sagt: Wuff!
🧠 Vererbung = Spezialisierung

Die Eltern-Klasse (Tier) definiert das allgemeine Verhalten. Die Kind-Klassen (Katze, Hund) spezialisieren es. Kind-Klassen können Methoden überschreiben (eigene Version schreiben) oder neue Methoden hinzufügen.

__str__ – Objekte als Text darstellen
class Produkt:
    def __init__(self, name, preis):
        self.name = name
        self.preis = preis

    def __str__(self):
        return f"{self.name}: {self.preis} EUR"

p = Produkt("Laptop", 999)
print(p)  # Laptop: 999 EUR
🤖
KI-Tipp: Klassen für eigene Projekte entwerfen

Wenn du ein eigenes Projekt planst, frage eine KI: „Ich möchte eine Python-Klasse für [Beschreibung] schreiben. Welche Attribute und Methoden würden Sinn machen? Ich bin Anfänger bei OOP.“

Praxisaufgaben
AUFGABE 9.1 Klasse „Auto“ erstellen

Klassen sind der nächste Schritt in der Programmierung. Hier erstellst du deinen ersten eigenen Datentyp.

1
Erstelle eine neue Datei auto.py.
2
Definiere eine Klasse Auto mit __init__, das marke, farbe und km als Parameter nimmt.
3
Speichere alle Parameter als Attribute mit self.
4
Füge eine Methode fahren(strecke) hinzu, die strecke zu self.km addiert und den neuen Kilometerstand ausgibt.
5
Erstelle ein Auto-Objekt: mein_auto = Auto("VW", "blau", 50000)
6
Rufe mein_auto.fahren(150) auf. Erwartet: Ausgabe mit dem neuen Kilometerstand 50150.
Lösungshinweise anzeigen

In __init__ speicherst du: self.marke = marke usw. In fahren schreibst du: self.km += strecke. Vergiss self nicht als ersten Parameter bei jeder Methode!

AUFGABE 9.2 Vererbung: Elektro-Auto

Vererbung ermöglicht es, bestehende Klassen zu erweitern, statt alles neu zu schreiben.

1
Erweitere deine auto.py Datei.
2
Erstelle eine Klasse ElektroAuto(Auto), die von Auto erbt.
3
Füge im __init__ einen zusätzlichen Parameter batterie hinzu. Rufe super().__init__(marke, farbe, km) auf, um die Eltern-Attribute zu setzen.
4
Füge eine Methode laden() hinzu, die "Batterie wird geladen..." ausgibt.
5
Erstelle ein ElektroAuto und rufe sowohl fahren() (geerbt) als auch laden() (neu) auf.
Lösungshinweise anzeigen

super().__init__(...) ruft den __init__ der Eltern-Klasse auf. So musst du marke, farbe und km nicht nochmal speichern. ElektroAuto kann fahren() nutzen, obwohl es nur in Auto definiert ist.

Modul 10 2 Unterrichtseinheiten

Module in Python

Du lernst, wie du Code in Module aufteilst, die Standardbibliothek nutzt und eigene Module erstellst.

Voraussetzung: Modul 09 import · from · math · random · os · eigene Module
Was sind Module?

Ein Modul ist einfach eine Python-Datei (.py), die Funktionen, Klassen oder Variablen enthält. Statt alles in eine riesige Datei zu quetschen, teilst du deinen Code in logische Einheiten auf. Außerdem kannst du auf tausende fertige Module zurückgreifen, die andere Programmierer geschrieben haben.

Module importieren
# Ganzes Modul importieren
import math
print(math.sqrt(16))   # 4.0
print(math.pi)          # 3.141592653589793

# Einzelne Funktionen importieren
from math import sqrt, pi
print(sqrt(25))   # 5.0 (ohne math. davor)

# Modul mit Alias importieren
import math as m
print(m.sqrt(9))   # 3.0
🧠 Wann welcher Import-Stil?

import math ist am klarsten – du siehst immer, woher eine Funktion kommt. from math import sqrt spart Tipparbeit, wenn du nur wenige Funktionen brauchst. Vermeide from math import * – das importiert alles und kann zu Namenskonflikten führen.

Die Standardbibliothek – Batterien inklusive

Python wird mit einer riesigen Sammlung von Modulen geliefert – der Standardbibliothek. Hier die drei nützlichsten für den Anfang:

math – Mathematik

import math

print(math.sqrt(144))      # 12.0 (Quadratwurzel)
print(math.ceil(3.2))      # 4   (aufrunden)
print(math.floor(3.9))     # 3   (abrunden)
print(math.pow(2, 10))     # 1024.0 (Potenz)

random – Zufallszahlen

import random

print(random.randint(1, 6))       # Zufallszahl 1-6 (Wuerfel)
print(random.choice(["A", "B", "C"]))  # Zufaelliges Element

karten = ["Herz", "Karo", "Pik", "Kreuz"]
random.shuffle(karten)   # Liste mischen
print(karten)

os – Betriebssystem-Funktionen

import os

print(os.getcwd())           # Aktuelles Verzeichnis
print(os.listdir("."))       # Dateien im Verzeichnis
print(os.path.exists("test.py"))  # Existiert die Datei?
Eigene Module erstellen

Jede Python-Datei ist automatisch ein Modul. Erstelle eine Datei und importiere sie aus einer anderen:

hilfsfunktionen.py
def begruessung(name):
    return f"Hallo, {name}!"

def quadrat(zahl):
    return zahl ** 2
hauptprogramm.py (im gleichen Ordner)
import hilfsfunktionen

print(hilfsfunktionen.begruessung("Anna"))  # Hallo, Anna!
print(hilfsfunktionen.quadrat(5))          # 25
⚠️ Beide Dateien müssen im gleichen Ordner sein

Damit import hilfsfunktionen funktioniert, müssen beide Dateien im selben Ordner liegen. Später (Modul 15) lernst du, wie du mit Paketen und sys.path auch auf andere Ordner zugreifen kannst.

🤖
KI-Tipp: Standardbibliothek erkunden

Python hat Module für fast alles. Frage eine KI: „Welche Python-Standardbibliothek-Module sind für Anfänger am nützlichsten? Zeige mir für jedes ein kurzes Beispiel.“

Praxisaufgaben
AUFGABE 10.1 Würfelspiel mit random

Das random-Modul ermöglicht Zufallszahlen – perfekt für Spiele und Simulationen.

1
Erstelle eine neue Datei wuerfel.py.
2
Importiere das random-Modul: import random
3
Würfle 3 Mal mit einer for-Schleife und random.randint(1, 6).
4
Gib jeden Wurf aus: print(f"Wurf {i}: {ergebnis}")
5
Führe das Skript mehrmals aus. Jedes Mal sollten andere Zahlen zwischen 1 und 6 erscheinen.
Lösungshinweise anzeigen

random.randint(1, 6) gibt eine zufällige ganze Zahl von 1 bis einschließlich 6 zurück. Anders als range() ist der Endwert hier inklusive!

AUFGABE 10.2 Eigenes Hilfsmodul erstellen

Eigene Module erstellen ist der Schlüssel zu übersichtlichem Code in größeren Projekten.

1
Erstelle eine Datei rechner_modul.py mit zwei Funktionen: addiere(a, b) und multipliziere(a, b).
2
Jede Funktion gibt das Ergebnis mit return zurück.
3
Erstelle eine zweite Datei nutze_rechner.py im gleichen Ordner.
4
Importiere dein Modul: import rechner_modul
5
Rufe beide Funktionen auf und gib die Ergebnisse aus. Erwartet: Die korrekten Rechenresultate.
Lösungshinweise anzeigen

Aufruf: rechner_modul.addiere(5, 3) ergibt 8. Wichtig: Nenne deine Datei nicht math.py oder random.py – das würde das gleichnamige Standard-Modul überschreiben!

Modul 11 2 Unterrichtseinheiten

Exceptions & Fehlerbehandlung

Du lernst, wie du Fehler in deinem Programm abfängst, statt es abstürzen zu lassen – mit try und except.

Voraussetzung: Modul 06 try · except · finally · raise · Exception-Typen
Warum Fehlerbehandlung?

Programme stürzen ab, wenn etwas Unerwartetes passiert – der Benutzer gibt Text statt einer Zahl ein, eine Datei existiert nicht, oder eine Division durch Null wird versucht. Mit ExceptionEin Fehler, der während der Programmausführung auftritt. Kann mit try/except abgefangen werden, statt das Programm abstürzen zu lassen.-Behandlung kannst du solche Fälle abfangen und eine sinnvolle Reaktion programmieren.

try / except – Grundlagen
try:
    zahl = int(input("Gib eine Zahl ein: "))
    print(f"Deine Zahl: {zahl}")
except ValueError:
    print("Das war keine gueltige Zahl!")

Wenn der Code im try-Block einen Fehler verursacht, springt Python zum passenden except-Block. Wenn kein Fehler auftritt, wird except übersprungen.

💡 Ohne try/except würde das Programm abstürzen

Gibt der Benutzer „abc“ ein, kann int("abc") das nicht umwandeln und wirft einen ValueError. Ohne try/except endet das Programm mit einer Fehlermeldung. Mit Fehlerbehandlung läuft es weiter.

Häufige Exception-Typen
ExceptionWann?Beispiel
ValueErrorFalscher Werttypint("abc")
TypeErrorFalscher Datentyp in Operation"5" + 3
ZeroDivisionErrorDivision durch Null10 / 0
FileNotFoundErrorDatei nicht gefundenopen("nix.txt")
IndexErrorIndex außerhalb der Liste[1,2][5]
KeyErrorSchlüssel nicht im Dictionary{"a":1}["b"]
Mehrere except-Blöcke
try:
    datei = open("daten.txt", "r")
    inhalt = datei.read()
    zahl = int(inhalt)
except FileNotFoundError:
    print("Datei nicht gefunden!")
except ValueError:
    print("Dateiinhalt ist keine Zahl!")
finally – immer ausführen

Der finally-Block wird immer ausgeführt – egal ob ein Fehler auftrat oder nicht. Ideal für Aufräumarbeiten:

try:
    datei = open("daten.txt", "r")
    inhalt = datei.read()
except FileNotFoundError:
    print("Datei nicht gefunden!")
finally:
    print("Aufraeumarbeiten erledigt.")
raise – eigene Fehler auslösen

Mit raise kannst du bewusst einen Fehler auslösen – z. B. wenn eine Funktion ungültige Werte bekommt:

def set_alter(alter):
    if alter < 0:
        raise ValueError("Alter kann nicht negativ sein!")
    return alter

try:
    set_alter(-5)
except ValueError as e:
    print(f"Fehler: {e}")  # Fehler: Alter kann nicht negativ sein!
Eigene Exception-Klassen
class GuthabenError(Exception):
    pass

def abheben(kontostand, betrag):
    if betrag > kontostand:
        raise GuthabenError(f"Zu wenig Guthaben! Verfuegbar: {kontostand} EUR")
    return kontostand - betrag

try:
    abheben(100, 200)
except GuthabenError as e:
    print(e)  # Zu wenig Guthaben! Verfuegbar: 100 EUR
🧠 Faustregel für try/except

Fange nur die Fehler ab, die du erwartest und sinnvoll behandeln kannst. Schreibe nie except: ohne Fehlertyp – das fängt alles ab, auch Fehler, die du nicht erwartet hast, und macht die Fehlersuche schwieriger.

🤖
KI-Tipp: Fehlermeldungen analysieren

Wenn du eine Python-Fehlermeldung (Traceback) nicht verstehst, kopiere sie vollständig und frage eine KI: „Erkläre mir diesen Python-Traceback Schritt für Schritt. Was ist die Ursache und wie behebe ich den Fehler? [Traceback einfügen]“

Praxisaufgaben
AUFGABE 11.1 Sichere Zahleneingabe

In realen Programmen geben Benutzer oft ungültige Werte ein. Hier baust du eine robuste Eingabe.

1
Erstelle eine neue Datei sichere_eingabe.py.
2
Schreibe eine while-Schleife mit while True:.
3
Im try-Block: Frage eine Zahl ab mit int(input("Zahl: ")) und brich mit break ab.
4
Im except ValueError-Block: Gib "Bitte eine gueltige Zahl eingeben!" aus.
5
Teste: Gib erst abc, dann xyz, dann 42 ein. Die Schleife sollte erst bei 42 enden.
Lösungshinweise anzeigen

Das Muster while True + try/except + break ist die Standard-Lösung für „frage den Benutzer so lange, bis die Eingabe gültig ist“. Der break steht im try-Block – so wird er nur bei erfolgreicher Umwandlung erreicht.

AUFGABE 11.2 Datei sicher lesen

Dateien können fehlen oder unlesbar sein. Hier übst du, FileNotFoundError abzufangen.

1
Erstelle eine neue Datei datei_lesen.py.
2
Frage den Benutzer nach einem Dateinamen: name = input("Dateiname: ")
3
Im try-Block: Öffne die Datei und gib den Inhalt aus.
4
Im except FileNotFoundError: Gib "Datei nicht gefunden!" aus.
5
Teste mit einer existierenden Datei und mit gibts_nicht.txt.
Lösungshinweise anzeigen

Bei einer existierenden Datei wird der Inhalt angezeigt. Bei einer nicht existierenden Datei siehst du „Datei nicht gefunden!“ – das Programm stürzt nicht ab.

Modul 12 2 Unterrichtseinheiten

Datenstrukturen: Sets, Queue & Priority Queue

Du lernst drei weitere Datenstrukturen kennen, die dir bei speziellen Aufgaben helfen: Sets für eindeutige Werte, Queues für Warteschlangen und Priority Queues für priorisierte Verarbeitung.

Voraussetzung: Modul 08 set · frozenset · deque · heapq
Sets – Mengen ohne Duplikate

Ein SetEine ungeordnete Sammlung von eindeutigen Elementen. Doppelte Werte werden automatisch entfernt. ist wie eine Schachtel, in die jeder Gegenstand nur einmal passt. Perfekt, wenn du Duplikate loswerden willst:

farben = {"rot", "blau", "rot", "gruen", "blau"}
print(farben)  # {'rot', 'blau', 'gruen'} - Duplikate entfernt!

# Aus Liste ein Set machen (Duplikate entfernen)
namen = ["Anna", "Max", "Anna", "Lisa", "Max"]
einzigartig = set(namen)
print(einzigartig)  # {'Anna', 'Max', 'Lisa'}

Set-Operationen

a = {1, 2, 3, 4}
b = {3, 4, 5, 6}

print(a | b)   # {1, 2, 3, 4, 5, 6}  Vereinigung
print(a & b)   # {3, 4}              Schnittmenge
print(a - b)   # {1, 2}              Differenz
OperationSymbolBedeutung
Vereinigunga | bAlle Elemente aus beiden
Schnittmengea & bNur gemeinsame Elemente
Differenza - bElemente nur in a
Element prüfenx in aIst x enthalten?
💡 frozenset – unveränderliches Set

Ein frozenset ist ein Set, das nach der Erstellung nicht mehr verändert werden kann – ähnlich wie ein Tupel bei Listen. Erstelle es mit frozenset({1, 2, 3}).

Queue – Warteschlange (FIFO)

Eine Queue (Warteschlange) funktioniert nach dem FIFO-Prinzip: First In, First Out – wer zuerst kommt, wird zuerst bedient. Genau wie eine Warteschlange an der Kasse.

from collections import deque

warteschlange = deque()

# Hinten anstellen
warteschlange.append("Anna")
warteschlange.append("Max")
warteschlange.append("Lisa")

# Vorne bedienen
naechster = warteschlange.popleft()
print(naechster)        # Anna (war zuerst da)
print(warteschlange)     # deque(['Max', 'Lisa'])
Priority Queue – Vorrangwarteschlange

Eine Priority Queue bedient nicht den Ältesten, sondern den mit der höchsten Priorität (= niedrigste Zahl) zuerst:

import heapq

aufgaben = []
heapq.heappush(aufgaben, (3, "Emails checken"))
heapq.heappush(aufgaben, (1, "Server-Fehler beheben"))
heapq.heappush(aufgaben, (2, "Meeting vorbereiten"))

# Wichtigste Aufgabe zuerst
wichtigste = heapq.heappop(aufgaben)
print(wichtigste)  # (1, 'Server-Fehler beheben')
🧠 Wann welche Struktur?

Set: Wenn du Duplikate vermeiden oder Zugehörigkeit schnell prüfen willst. deque: Wenn du eine Warteschlange brauchst (zuerst rein, zuerst raus). heapq: Wenn du Elemente nach Priorität verarbeiten willst.

🤖
KI-Tipp: Datenstrukturen vergleichen

Frage eine KI: „Vergleiche mir in Python: Liste, Set, Dictionary, Tupel und deque. Wann nehme ich welche Struktur? Zeige eine Übersichtstabelle.“

Praxisaufgaben
AUFGABE 12.1 Duplikate aus einer Liste entfernen

Sets sind die schnellste Methode, um Duplikate zu entfernen – eine häufige Aufgabe in der Datenverarbeitung.

1
Erstelle eine neue Datei duplikate.py.
2
Erstelle eine Liste mit Duplikaten: namen = ["Anna", "Max", "Anna", "Lisa", "Max", "Tom", "Lisa"]
3
Wandle die Liste in ein Set um: einzigartig = set(namen)
4
Gib Original und Set aus. Erwartet: Das Set hat weniger Elemente.
5
Wandle das Set zurück in eine sortierte Liste: ergebnis = sorted(einzigartig)
Lösungshinweise anzeigen

Die Originalliste hat 7 Einträge, das Set nur 4 (Anna, Max, Lisa, Tom). sorted() gibt eine neue, sortierte Liste zurück. Die Reihenfolge im Set selbst ist nicht garantiert.

AUFGABE 12.2 Warteschlange simulieren

Warteschlangen kommen in vielen Anwendungen vor – von Druckaufträgen bis zu Kundenverwaltungen.

1
Erstelle eine neue Datei warteschlange.py.
2
Importiere deque: from collections import deque
3
Erstelle eine leere deque und füge 4 Namen mit append() hinzu.
4
Bediene die ersten 2 Personen mit popleft() und gib ihren Namen aus.
5
Gib die verbleibende Warteschlange aus. Es sollten noch 2 Personen übrig sein.
Lösungshinweise anzeigen

popleft() entfernt und gibt das erste Element zurück (FIFO). pop() würde das letzte Element entfernen (LIFO, wie ein Stapel). Für eine Warteschlange brauchst du popleft().

Modul 13 3 Unterrichtseinheiten

Funktionsparameter, Sortierung & Lambda

Du vertiefst dein Wissen über Funktionen: flexible Parameter mit *args und **kwargs, fortgeschrittenes Sortieren und kompakte Lambda-Funktionen.

Voraussetzung: Modul 06 *args · **kwargs · sorted() · key · lambda · map · filter
*args – beliebig viele Argumente

Manchmal weißt du nicht im Voraus, wie viele Werte eine Funktion bekommt. Mit *args akzeptiert deine Funktion beliebig viele Argumente:

def summe(*args):
    ergebnis = 0
    for zahl in args:
        ergebnis += zahl
    return ergebnis

print(summe(1, 2, 3))        # 6
print(summe(10, 20, 30, 40))  # 100
💡 args ist ein Tupel

Innerhalb der Funktion ist args ein ganz normales Tupel. Du kannst es mit einer for-Schleife durchgehen, len(args) aufrufen oder per Index zugreifen. Der Name args ist Konvention – der Stern * ist das Entscheidende.

**kwargs – beliebig viele Schlüsselwort-Argumente
def steckbrief(**kwargs):
    for schluessel, wert in kwargs.items():
        print(f"{schluessel}: {wert}")

steckbrief(name="Anna", alter=30, stadt="Berlin")

Ausgabe:

name: Anna
alter: 30
stadt: Berlin
🧠 kwargs ist ein Dictionary

kwargs ist innerhalb der Funktion ein ganz normales Dictionary. ** sammelt alle benannten Argumente, die keinem festen Parameter zugeordnet sind.

Sortieren mit sorted() und key

Du kennst bereits sort() und sorted(). Mit dem key-Parameter steuerst du, wonach sortiert wird:

woerter = ["Banane", "Apfel", "Kirsche", "Dattel"]

# Nach Laenge sortieren
nach_laenge = sorted(woerter, key=len)
print(nach_laenge)  # ['Apfel', 'Banane', 'Dattel', 'Kirsche']

# Personen nach Alter sortieren
personen = [
    {"name": "Max", "alter": 25},
    {"name": "Anna", "alter": 30},
    {"name": "Lisa", "alter": 22}
]

nach_alter = sorted(personen, key=lambda p: p["alter"])
for p in nach_alter:
    print(f"{p['name']}: {p['alter']}")
Lambda-Funktionen

Eine Lambda-Funktion ist eine kleine, anonyme Funktion in einer Zeile. Sie eignet sich für einfache Berechnungen, die du nur einmal brauchst:

# Normale Funktion
def verdopple(x):
    return x * 2

# Gleiche Funktion als Lambda
verdopple = lambda x: x * 2

print(verdopple(5))  # 10
map() und filter()

map() wendet eine Funktion auf jedes Element an. filter() filtert Elemente nach einer Bedingung:

zahlen = [1, 2, 3, 4, 5]

# Jede Zahl verdoppeln
verdoppelt = list(map(lambda x: x * 2, zahlen))
print(verdoppelt)  # [2, 4, 6, 8, 10]

# Nur gerade Zahlen behalten
gerade = list(filter(lambda x: x % 2 == 0, zahlen))
print(gerade)  # [2, 4]
🧠 List Comprehension vs. map/filter

In Python bevorzugen die meisten Entwickler List Comprehension: [x * 2 for x in zahlen] statt list(map(lambda x: x * 2, zahlen)). Beide Varianten tun das Gleiche – List Comprehension ist aber lesbarer.

🤖
KI-Tipp: Lambda in Comprehension umschreiben

Wenn du einen map/filter/lambda-Ausdruck nicht verstehst, frage eine KI: „Schreibe diesen Python-Ausdruck als List Comprehension um und erkläre den Unterschied: [Code einfügen]“

Praxisaufgaben
AUFGABE 13.1 Flexible Summen-Funktion mit *args

*args ermöglicht dir, Funktionen zu schreiben, die mit beliebig vielen Werten umgehen können.

1
Erstelle eine neue Datei flex_summe.py.
2
Definiere eine Funktion durchschnitt(*args), die den Durchschnitt aller übergebenen Zahlen berechnet.
3
Berechne: Summe aller Werte geteilt durch len(args). Gib das Ergebnis mit return zurück.
4
Teste: print(durchschnitt(10, 20, 30)). Erwartet: 20.0
5
Teste: print(durchschnitt(5, 5)). Erwartet: 5.0
Lösungshinweise anzeigen

Die Berechnung: return sum(args) / len(args). sum() ist eine eingebaute Python-Funktion, die alle Elemente einer Sammlung addiert. Achtung: Bei durchschnitt() ohne Argumente würde len(args) gleich 0 sein – Division durch Null!

AUFGABE 13.2 Personenliste sortieren

Mit sorted() und key kannst du Listen nach beliebigen Kriterien sortieren – eine wichtige Fähigkeit für die Datenverarbeitung.

1
Erstelle eine neue Datei sortierung.py.
2
Erstelle eine Liste von Dictionaries mit Name und Alter (mindestens 4 Personen).
3
Sortiere nach Alter mit: sorted(personen, key=lambda p: p["alter"])
4
Sortiere nach Name mit: sorted(personen, key=lambda p: p["name"])
5
Gib beide sortierten Listen aus und vergleiche die Reihenfolge.
Lösungshinweise anzeigen

Die Lambda-Funktion lambda p: p["alter"] sagt sorted: „Verwende den Wert von alter als Sortierschlüssel.“ Ohne key wüsste Python nicht, wie es Dictionaries vergleichen soll.

Modul 14 2 Unterrichtseinheiten

Datum, String-Formatierung & defaultdict

Du lernst, wie du mit Datum und Uhrzeit arbeitest, Strings professionell formatierst und das praktische defaultdict nutzt.

Voraussetzung: Modul 02 Voraussetzung: Modul 08 datetime · f-String · format() · defaultdict
Das datetime-Modul

Python hat ein eingebautes Modul für Datum und Uhrzeit. Damit kannst du das aktuelle Datum abrufen, Zeiträume berechnen und Datumsangaben formatieren:

from datetime import datetime, date, timedelta

# Aktuelles Datum und Uhrzeit
jetzt = datetime.now()
print(jetzt)  # 2026-03-15 14:30:22.123456

# Nur das Datum
heute = date.today()
print(heute)  # 2026-03-15

# Einzelne Teile abrufen
print(heute.year)   # 2026
print(heute.month)  # 3
print(heute.day)    # 15

Datum formatieren mit strftime()

jetzt = datetime.now()
print(jetzt.strftime("%d.%m.%Y"))        # 15.03.2026
print(jetzt.strftime("%H:%M Uhr"))       # 14:30 Uhr
print(jetzt.strftime("%A, %d. %B %Y"))  # Sunday, 15. March 2026
CodeBedeutungBeispiel
%dTag (zweistellig)15
%mMonat (zweistellig)03
%YJahr (vierstellig)2026
%HStunde (24h)14
%MMinute30
%AWochentag (englisch)Sunday

Mit Zeiträumen rechnen (timedelta)

from datetime import date, timedelta

heute = date.today()
in_einer_woche = heute + timedelta(days=7)
print(f"In einer Woche: {in_einer_woche}")

geburtstag = date(2026, 12, 24)
tage_bis = (geburtstag - heute).days
print(f"Noch {tage_bis} Tage bis Weihnachten!")
String-Formatierung im Detail

Du kennst bereits f-Strings aus Modul 02. Hier lernst du erweiterte Formatierungsoptionen:

preis = 49.9
name = "Python-Buch"

# Zwei Nachkommastellen
print(f"Preis: {preis:.2f} EUR")  # Preis: 49.90 EUR

# Rechtsbuendig in 20 Zeichen
print(f"{name:>20}")  #          Python-Buch

# Tausender-Trennzeichen
gross = 1234567
print(f"{gross:,}")  # 1,234,567

# Prozentwert
anteil = 0.75
print(f"{anteil:.0%}")  # 75%
Format-CodeBedeutungBeispiel
:.2f2 Nachkommastellen49.90
:>20Rechtsbündig, 20 Zeichen breitAbstand links
:,Tausender-Trennzeichen1,234,567
:.0%Prozentwert (ohne Nachkomma)75%
🧠 format() als Alternative

Statt f-Strings kannst du auch "Preis: {:.2f}".format(49.9) verwenden. F-Strings sind aber kürzer und lesbarer – bevorzuge sie.

defaultdict – Dictionary mit Standardwerten

Ein defaultdict erstellt automatisch einen Standardwert, wenn du auf einen noch nicht vorhandenen Schlüssel zugreifst:

from collections import defaultdict

# Woerter zaehlen
text = "der hund mag den hund und der hund mag knochen"
zaehler = defaultdict(int)  # Standard: 0

for wort in text.split():
    zaehler[wort] += 1

print(dict(zaehler))
# {'der': 2, 'hund': 3, 'mag': 2, 'den': 1, 'und': 1, 'knochen': 1}
💡 Ohne defaultdict wäre es umständlicher

Mit einem normalen Dictionary müsstest du erst prüfen, ob der Schlüssel existiert: if wort not in zaehler: zaehler[wort] = 0. defaultdict(int) erledigt das automatisch.

🤖
KI-Tipp: Datumsformatierung nachschlagen

Die vielen %-Codes von strftime() sind schwer zu merken. Frage eine KI: „Wie formatiere ich in Python ein Datum als 'Montag, 15. März 2026, 14:30 Uhr'? Zeige mir den strftime-Code.“

Praxisaufgaben
AUFGABE 14.1 Tage bis zu einem Datum berechnen

Datumsberechnungen kommen oft vor – z. B. Countdown bis zu einem Event oder Berechnung von Fristen.

1
Erstelle eine neue Datei countdown.py.
2
Importiere: from datetime import date
3
Erstelle das heutige Datum: heute = date.today()
4
Erstelle ein Zieldatum: ziel = date(2026, 12, 31)
5
Berechne die Differenz: tage = (ziel - heute).days
6
Gib aus: print(f"Noch {tage} Tage bis Silvester!")
Lösungshinweise anzeigen

Die Subtraktion zweier date-Objekte ergibt ein timedelta-Objekt. Mit .days bekommst du die Differenz in Tagen. Das Ergebnis hängt vom heutigen Datum ab.

AUFGABE 14.2 Wörter zählen mit defaultdict

Wörter zählen ist eine klassische Aufgabe in der Textanalyse – und mit defaultdict besonders elegant.

1
Erstelle eine neue Datei wort_zaehler.py.
2
Importiere: from collections import defaultdict
3
Erstelle einen beliebigen Satz als String (mindestens 10 Wörter, mit Wiederholungen).
4
Zähle jedes Wort mit einer for-Schleife und defaultdict(int).
5
Gib die Häufigkeiten sortiert aus: for wort, anzahl in sorted(zaehler.items()):
Lösungshinweise anzeigen

Tipp: Wandle alle Wörter mit .lower() in Kleinbuchstaben um, damit „Der“ und „der“ als dasselbe Wort gezählt werden. sorted(zaehler.items()) sortiert alphabetisch nach Schlüssel.

Modul 15 3 Unterrichtseinheiten

Entwicklung mit PyCharm & Kommandozeile

Du lernst PyCharm als professionelle IDE kennen, arbeitest mit der Kommandozeile und verwaltest Pakete mit pip und virtuellen Umgebungen.

Voraussetzung: Modul 10 PyCharm · Terminal · pip · venv · python-Befehl
Warum eine professionelle IDE?

IDLE ist perfekt für den Einstieg, aber für größere Projekte brauchst du mehr: automatische Vervollständigung, Fehlererkennung während des Tippens, Debugging-Werkzeuge und Projektverwaltung. PyCharm Community Edition ist kostenlos und bietet all das.

PyCharm installieren und einrichten
1
Lade PyCharm Community (kostenlos) von https://www.jetbrains.com/pycharm/download/ herunter.
2
Installiere PyCharm mit den Standard-Einstellungen.
3
Starte PyCharm und klicke auf New Project.
4
Wähle einen Ordner für dein Projekt und stelle sicher, dass der richtige Python-Interpreter ausgewählt ist.
🧠 Die wichtigsten PyCharm-Shortcuts

Strg+Shift+F10 = Skript ausführen, Strg+Leertaste = Autovervollständigung, Strg+D = Zeile duplizieren, Strg+/ = Zeile auskommentieren.

Die Kommandozeile (Terminal)

Die Kommandozeile (auch Terminal oder CMD) ist ein mächtiges Werkzeug. Du kannst Python-Skripte direkt ausführen, Pakete installieren und vieles mehr:

Terminal öffnen
# Windows: Win+R, dann "cmd" eingeben
# Oder in PyCharm: View → Tool Windows → Terminal
Python-Skript ausführen
python mein_skript.py
Python-Version prüfen
python --version
# Python 3.12.x
⚠️ python vs. python3

Auf manchen Systemen heißt der Befehl python3 statt python. Wenn python --version nicht funktioniert oder Python 2 anzeigt, versuche python3 --version.

pip – Pakete installieren

pip ist der Paketmanager von Python. Damit installierst du zusätzliche Bibliotheken, die andere Entwickler erstellt haben:

# Paket installieren
pip install requests

# Paket mit bestimmter Version
pip install requests==2.31.0

# Alle installierten Pakete anzeigen
pip list

# Paket deinstallieren
pip uninstall requests
Virtuelle Umgebungen (venv)

Verschiedene Projekte brauchen oft verschiedene Versionen der gleichen Bibliothek. Mit einer virtuellen Umgebung bekommt jedes Projekt seine eigenen Pakete, ohne andere Projekte zu beeinflussen:

# Virtuelle Umgebung erstellen
python -m venv meine_umgebung

# Aktivieren (Windows)
meine_umgebung\Scripts\activate

# Aktivieren (Mac/Linux)
source meine_umgebung/bin/activate

# Jetzt pip verwenden - Pakete landen in der Umgebung
pip install requests

# Deaktivieren
deactivate
💡 PyCharm erstellt venv automatisch

Wenn du in PyCharm ein neues Projekt erstellst, bietet es dir an, automatisch eine virtuelle Umgebung einzurichten. Das ist die empfohlene Vorgehensweise.

requirements.txt – Abhängigkeiten dokumentieren
# Aktuelle Pakete in Datei speichern
pip freeze > requirements.txt

# Pakete aus Datei installieren (z.B. auf neuem Rechner)
pip install -r requirements.txt
🤖
KI-Tipp: pip-Probleme lösen

Wenn pip install einen Fehler wirft, kopiere die Fehlermeldung und frage eine KI: „Ich bekomme diesen Fehler bei pip install auf Windows: [Fehlermeldung]. Was kann ich tun?“

Praxisaufgaben
AUFGABE 15.1 PyCharm-Projekt einrichten

PyCharm ist die IDE, die professionelle Python-Entwickler nutzen. Hier richtest du dein erstes Projekt ein.

1
Starte PyCharm und klicke auf New Project.
2
Wähle den Ordner python_uebungen und aktiviere New virtual environment.
3
Klicke auf Create. PyCharm öffnet das Projekt.
4
Rechtsklick auf den Projektordner → New → Python File → Name: hallo
5
Schreibe print("Hallo aus PyCharm!") und führe es mit Strg+Shift+F10 aus.
6
Du solltest unten in der Konsole Hallo aus PyCharm! sehen.
Lösungshinweise anzeigen

Falls die Ausgabe nicht erscheint: Prüfe, ob unten rechts in PyCharm der richtige Python-Interpreter angezeigt wird (z. B. Python 3.12). Klicke darauf, um ihn zu wechseln.

AUFGABE 15.2 Paket mit pip installieren

Pakete erweitern Python um neue Fähigkeiten. Hier installierst du dein erstes externes Paket.

1
Öffne das Terminal in PyCharm: View → Tool Windows → Terminal.
2
Installiere das Paket colorama: pip install colorama
3
Erstelle eine neue Python-Datei farben.py.
4
Schreibe: from colorama import Fore; print(Fore.GREEN + "Gruen!" + Fore.RESET)
5
Führe es aus. Du solltest farbigen Text in der Konsole sehen.
Lösungshinweise anzeigen

colorama ermöglicht farbige Textausgabe im Terminal. Fore.GREEN färbt den nachfolgenden Text grün, Fore.RESET setzt die Farbe zurück. Weitere Farben: RED, YELLOW, BLUE.

Modul 16 2 Unterrichtseinheiten

Jupyter Notebooks

Du lernst Jupyter Notebooks kennen – ein interaktives Werkzeug, in dem du Code, Text und Visualisierungen in einem Dokument kombinieren kannst.

Voraussetzung: Modul 02 Voraussetzung: Modul 06 Jupyter · Zellen · Markdown · Kernel
Was ist ein Jupyter Notebook?

Ein Jupyter Notebook ist ein interaktives Dokument, das Code-Zellen und Text-Zellen mischt. Du schreibst Python-Code in eine Zelle, führst sie aus und siehst das Ergebnis direkt darunter. Dazwischen kannst du Erklärungen, Überschriften und Bilder einfügen. Perfekt für Datenanalyse, Experimente und Dokumentation.

Jupyter installieren und starten
# Jupyter installieren
pip install notebook

# Jupyter starten
jupyter notebook

Nach dem Start öffnet sich dein Browser mit der Jupyter-Oberfläche. Von dort aus kannst du neue Notebooks erstellen.

1
Öffne ein Terminal (oder PyCharm-Terminal).
2
Gib pip install notebook ein und warte auf die Installation.
3
Gib jupyter notebook ein. Dein Browser öffnet sich automatisch.
4
Klicke auf New → Python 3, um ein neues Notebook zu erstellen.
⚠️ Terminal offen lassen!

Schließe das Terminal nicht, solange du Jupyter nutzt – dort läuft der Jupyter-Server. Beende Jupyter mit Strg+C im Terminal.

Zellen – das Grundkonzept

Ein Notebook besteht aus Zellen. Jede Zelle hat einen Typ:

ZelltypInhaltTastenkombination
CodePython-Code, wird ausgeführtY (im Command Mode)
MarkdownText, Überschriften, ListenM (im Command Mode)

Wichtige Shortcuts

AktionShortcut
Zelle ausführenShift+Enter
Neue Zelle darunterB (im Command Mode)
Neue Zelle darüberA (im Command Mode)
Zelle löschenD D (zweimal D)
In Command Mode wechselnEsc
In Edit Mode wechselnEnter
💡 Command Mode vs. Edit Mode

Im Edit Mode (grüner Rand) tippst du in eine Zelle. Im Command Mode (blauer Rand) verwendest du Shortcuts, um Zellen zu verwalten. Wechsle mit Esc und Enter.

Markdown in Jupyter

Markdown-Zellen nutzt du für Erklärungen und Überschriften. Die wichtigsten Formatierungen:

# Ueberschrift 1
## Ueberschrift 2
### Ueberschrift 3

**Fett** und *Kursiv*

- Aufzaehlungspunkt 1
- Aufzaehlungspunkt 2

`Code inline`

```python
# Code-Block
print("Hallo")
```
Der Kernel

Der Kernel ist der Python-Prozess, der deinen Code ausführt. Wichtige Aktionen:

AktionWann?Wo?
Kernel neu startenWenn etwas hängt oder Variablen zurücksetzenKernel → Restart
Alle Zellen ausführenNotebook von Anfang bis Ende durchlaufenCell → Run All
Kernel unterbrechenEndlosschleife stoppenKernel → Interrupt
⚠️ Reihenfolge der Zellen beachten!

Variablen existieren erst, wenn die Zelle ausgeführt wurde. Wenn du Zelle 3 vor Zelle 2 ausführst und Zelle 3 eine Variable aus Zelle 2 braucht, bekommst du einen NameError. Im Zweifel: Kernel → Restart & Run All.

🤖
KI-Tipp: Jupyter als Lernumgebung nutzen

Jupyter ist ideal zum Experimentieren. Frage eine KI: „Erstelle mir ein Jupyter Notebook als Vorlage zum Thema [dein Thema]. Mit Erklärungen in Markdown und Code-Beispielen zum Ausführen.“

Praxisaufgaben
AUFGABE 16.1 Erstes Jupyter Notebook erstellen

Jupyter Notebooks sind die Standardumgebung für Datenanalyse und interaktives Arbeiten mit Python.

1
Öffne ein Terminal und starte Jupyter mit jupyter notebook.
2
Klicke auf New → Python 3.
3
In der ersten Zelle: Wechsle zu Markdown (Esc, dann M) und schreibe # Mein erstes Notebook. Führe aus mit Shift+Enter.
4
In der nächsten Zelle (Code): Schreibe print("Hallo aus Jupyter!") und führe aus.
5
Erstelle eine dritte Code-Zelle mit: ergebnis = 2 ** 10 und ergebnis (ohne print – Jupyter zeigt den letzten Wert automatisch an).
6
Du solltest 1024 unter der Zelle sehen. Speichere das Notebook mit Strg+S.
Lösungshinweise anzeigen

In Jupyter wird die letzte Zeile einer Code-Zelle automatisch angezeigt, wenn sie einen Wert hat (kein print() nötig). Die [1]:-Nummern links zeigen, in welcher Reihenfolge die Zellen ausgeführt wurden.

AUFGABE 16.2 Notebook mit Text und Code mischen

Die Stärke von Jupyter ist die Mischung aus Erklärungen und ausführbarem Code – wie ein interaktives Lehrbuch.

1
Erstelle ein neues Notebook.
2
Erstelle eine Markdown-Zelle mit einer Überschrift und einem erklärenden Absatz.
3
Erstelle eine Code-Zelle, die eine Einkaufsliste als Python-Liste erstellt und sortiert ausgibt.
4
Erstelle eine weitere Markdown-Zelle, die das Ergebnis kommentiert.
5
Führe alle Zellen aus mit Cell → Run All. Das Notebook sollte wie ein zusammenhängendes Dokument aussehen.
Lösungshinweise anzeigen

Markdown wird nach dem Ausführen formatiert angezeigt (keine Sterne mehr). Ein gutes Notebook wechselt zwischen Erklärungen (Markdown) und Code, sodass jemand anderes es wie einen Bericht lesen kann.

BONUS 3 Unterrichtseinheiten

BONUS: Web Scraping mit Python

Du lernst, wie du mit Python automatisch Daten von Webseiten extrahierst – mit requests und BeautifulSoup.

Voraussetzung: Modul 08 Voraussetzung: Modul 10 requests · BeautifulSoup · HTML-Parsing · Web Scraping
Was ist Web Scraping?

Web Scraping bedeutet, Daten automatisch von Webseiten zu extrahieren. Statt mühsam Informationen von Hand zu kopieren, schreibst du ein Python-Skript, das die Arbeit für dich erledigt. Typische Anwendungen: Preisvergleiche, Nachrichtensammlung, Datenanalyse.

⚠️ Rechtliche Hinweise beachten

Nicht jede Webseite erlaubt Scraping. Prüfe immer die robots.txt der Seite (z. B. https://example.com/robots.txt) und die Nutzungsbedingungen. Scrape keine persönlichen Daten und überlaste keine Server mit zu vielen Anfragen.

Bibliotheken installieren
pip install requests beautifulsoup4
BibliothekAufgabe
requestsWebseiten herunterladen (HTTP-Anfragen)
beautifulsoup4HTML-Code durchsuchen und Daten extrahieren
Webseite herunterladen mit requests
import requests

antwort = requests.get("https://example.com")

print(antwort.status_code)  # 200 = OK
print(antwort.text[:200])    # Ersten 200 Zeichen des HTML-Codes
💡 HTTP-Statuscodes

200 = Erfolg, 404 = Seite nicht gefunden, 403 = Zugriff verweigert, 500 = Serverfehler. Prüfe immer den Statuscode, bevor du den Inhalt verarbeitest.

HTML parsen mit BeautifulSoup
from bs4 import BeautifulSoup
import requests

antwort = requests.get("https://example.com")
suppe = BeautifulSoup(antwort.text, "html.parser")

# Seitentitel finden
print(suppe.title.text)  # Example Domain

# Alle Links finden
for link in suppe.find_all("a"):
    print(link.get("href"))

Wichtige BeautifulSoup-Methoden

MethodeWas sie tutBeispiel
find("tag")Erstes Element findensuppe.find("h1")
find_all("tag")Alle Elemente findensuppe.find_all("p")
find(class_="name")Element mit CSS-Klassesuppe.find(class_="titel")
find(id="name")Element mit IDsuppe.find(id="content")
.textNur den Text (ohne HTML)element.text
.get("attr")Attribut-Wert lesenlink.get("href")
Ein vollständiges Beispiel

Dieses Skript lädt eine Webseite herunter und extrahiert alle Überschriften:

import requests
from bs4 import BeautifulSoup

url = "https://example.com"
antwort = requests.get(url)

if antwort.status_code == 200:
    suppe = BeautifulSoup(antwort.text, "html.parser")

    # Alle h1 und h2 Ueberschriften finden
    ueberschriften = suppe.find_all(["h1", "h2"])

    for h in ueberschriften:
        print(f"{h.name}: {h.text.strip()}")
else:
    print(f"Fehler: Status {antwort.status_code}")
🧠 Schrittweise vorgehen

Beim Scraping immer in kleinen Schritten arbeiten: Erst die Seite herunterladen und den HTML-Code anschauen, dann gezielt die richtigen Tags finden. Browser-DevTools (F12) helfen dir, die Struktur der Seite zu verstehen.

🤖
KI-Tipp: Scraping-Selektoren finden

Wenn du nicht weißt, welchen HTML-Tag oder welche Klasse du suchen musst, frage eine KI: „Ich möchte von dieser Webseite [URL] die Produktpreise extrahieren. Welche BeautifulSoup-Selektoren brauche ich?“

Praxisaufgaben
AUFGABE 17.1 Webseite herunterladen und Titel anzeigen

Der erste Schritt beim Web Scraping ist immer, die Seite herunterzuladen und den Inhalt zu verstehen.

1
Erstelle eine neue Datei scraper.py.
2
Importiere: import requests und from bs4 import BeautifulSoup
3
Lade die Seite: antwort = requests.get("https://example.com")
4
Prüfe den Statuscode: print(antwort.status_code). Erwartet: 200
5
Parse den HTML-Code: suppe = BeautifulSoup(antwort.text, "html.parser")
6
Gib den Seitentitel aus: print(suppe.title.text). Erwartet: Example Domain
⚠️ Internetverbindung nötig

Für diese Aufgabe brauchst du eine aktive Internetverbindung. Wenn requests.get() fehlschlägt, prüfe deine Verbindung oder versuche es mit try/except requests.ConnectionError.

Lösungshinweise anzeigen

example.com ist eine offizielle Test-Website, die immer verfügbar ist. Der Titel ist „Example Domain“. Wenn du antwort.text ausgibst, siehst du den rohen HTML-Code der Seite.

AUFGABE 17.2 Alle Links einer Seite extrahieren

Links extrahieren ist eine typische Scraping-Aufgabe – z. B. um alle Unterseiten einer Website zu finden.

1
Erweitere deine scraper.py Datei.
2
Finde alle Links: links = suppe.find_all("a")
3
Gib für jeden Link den Text und die URL aus: print(link.text, "-", link.get("href"))
4
Führe das Skript aus. Du solltest die Links der Seite sehen.
5
Probiere es auch mit einer anderen Webseite (z. B. https://news.ycombinator.com – erlaubt Scraping).
Lösungshinweise anzeigen

find_all("a") findet alle Anker-Elemente (Links) im HTML. link.get("href") gibt die URL zurück, link.text den anklickbaren Text. Manche Links haben kein href – dann gibt get("href") den Wert None zurück.

🤖
KI-Tipp: Eigene Scraping-Projekte planen

Frage eine KI: „Ich möchte mit Python die aktuellen Nachrichten-Überschriften von [Website] scrapen. Ist das erlaubt? Zeige mir den Code Schritt für Schritt.“