Zwischen „Python kennen” und „Python anwenden können” liegt eine seltsame Kluft. Viele Menschen schauen Dutzende Videos, kopieren Beispiele und glauben, alles verstanden zu haben — und stehen dann ratlos da, wenn sie etwas von Grund auf selbst schreiben sollen. Dieses Buch wurde geschrieben, um diese Kluft zu schließen.
Der Ansatz ist einfach: Lernen durch Ausführen. Jedes Beispiel in diesem Buch lässt sich direkt im Browser ausführen, an Ort und Stelle. Sie müssen weder Python installieren noch einen Editor einrichten noch auf irgendeinen Prozess warten. Lesen, ausführen, ändern, wieder ausführen — und selbst erleben, was sich verändert.
Das Buch durchläuft drei aufeinander aufbauende Teile:
Jedes Kapitel folgt demselben Muster: eine kurze, dichte Erklärung, ausführbare Beispiele und anschließend Übungen mit Lösung, die sich aufklappen lässt. Überspringen Sie die Übungen nicht. Lesen lässt Sie etwas kennenlernen; Schreiben und Ausführen befähigt Sie, es zu können.
Ein ehrlicher Hinweis. Nicht alles lässt sich im Browser ausführen. Kapitel, die Dateien auf Ihrem Computer, Pakete aus dem Internet, ein Netzwerk oder lang laufende Programme benötigen, kennzeichnen dies deutlich und verweisen Sie auf die passende Umgebung. Das ist keine Schwäche — es gehört zum Lernen dazu, zu wissen, wo etwas ausgeführt werden sollte.
Viel Freude beim Lesen und viel Erfolg beim Programmieren.
— RWID
Dieses Buch ist kein gewöhnliches Buch: Es hat Python in sich. Jedes Codebeispiel lässt sich direkt ausführen, ohne dass Sie etwas installieren müssen.
Die obere Leiste des Readers enthält das Labor. Darin befindet sich das Python-Labor: ein in dieses Buch eingebetteter Python-Interpreter, in dem Sie Code ausprobieren, ohne die Seite zu verlassen. Für größere Projekte öffnen Sie die vollständige IDE, einen kompletten Editor in einem eigenen Fenster, in dem Sie Ihre Dateien speichern und ausführen.
Über jedem Codeblock befinden sich zwei Schaltflächen:
Mein Rat. Drücken Sie nicht nur auf Ausführen. Ändern Sie zuerst die Zahlen, tauschen Sie die Namen aus, machen Sie den Code absichtlich kaputt — und beobachten Sie, was passiert. Fehler sind der schnellste Lehrer.
Python im Browser ist echt, lebt aber in einer Sandbox (Sandbox, ein abgeschotteter Bereich). Es kann weder Dateien auf Ihrem Computer anfassen noch Pakete aus dem Internet installieren noch ein Netzwerk öffnen. Einige Themen lassen sich daher — ehrlich gesagt — hier nicht ausführen. Solche Kapitel kennzeichnen das deutlich:
Lokale Umgebung erforderlich. Dies lässt sich nicht im Browser ausführen. Folgen Sie der Anleitung und führen Sie es in lokalem Python + VS Code oder Google Colab aus.
Die vollständige Anleitung zur Installation von lokalem Python finden Sie in Anhang C. Kurz zusammengefasst:
| ✅ Läuft hier | ⚠️ Hier eingeschränkt | ❌ Lokale Umgebung erforderlich |
|---|---|---|
| Reines Python & grundlegende stdlib | Rechenintensive/große Datenmengen | Dateien auf Ihrem Computer lesen und schreiben |
| NumPy, pandas, Matplotlib | Kein echtes Netzwerk | pip install beliebiger Pakete |
| scikit-learn (kleiner Maßstab) | Nicht dauerhafter Speicher | requests, Sockets, Datenbanken |
HTML über rwid.show_html | GUI (tkinter/turtle), os/subprocess | |
multiprocessing, Server (Flask/FastAPI) |
Teil I und ein einleitendes Kapitel von Teil II können Sie kostenlos lesen. Um das gesamte Buch — bis zum Abschlussprojekt — freizuschalten, aktivieren Sie es für 25 über die Schaltfläche am Ende des letzten Beispielkapitels oder über die App Books / Shop.
Viel Freude beim Entdecken. Beginnen Sie auf der nächsten Seite.
Klicken Sie auf einen Titel, um dorthin zu springen. Mit einem Schloss gekennzeichnete Kapitel müssen freigeschaltet werden ( 25).
Jede Reise beginnt mit einer einzigen Zeile. In Python ist diese Zeile print(). Lassen Sie uns zuerst das Einfachste ausführen und dann auseinandernehmen, was dabei tatsächlich geschieht.
print("Halo, dunia!")
Eine Zeile, ein Befehl. print() ist eine Funktion: Sie nimmt etwas in den Klammern entgegen und gibt es auf dem Bildschirm aus. Text in Anführungszeichen — wie "Halo, dunia!" — heißt String.
Sie können auch mehrere Dinge auf einmal ausgeben, durch Kommas getrennt:
print("Nama saya", "Eko")
print("2 + 3 =", 2 + 3)
Beachten Sie: "Nama saya" und "Eko" werden automatisch durch ein Leerzeichen getrennt, während 2 + 3 zuerst tatsächlich zu 5 berechnet und erst dann ausgegeben wird.
Zeilen, die mit # beginnen, werden von Python ignoriert. Wir nutzen sie, um zu erklären, warum etwas geschieht, nicht was.
# Dies ist ein Kommentar: Python führt ihn nicht aus.
print("Halo") # Kommentare dürfen auch am Zeilenende stehen
Guter Code spricht durch seine Namen; Kommentare setzt man dort ein, wo der Grund aus dem Code selbst nicht ersichtlich ist.
Führen Sie den folgenden Code aus. Er ist absichtlich fehlerhaft, damit Sie das Gesicht eines Fehlers kennenlernen:
print("Halo"
Python hält an und meldet einen SyntaxError. Das ist keine Katastrophe — Python teilt Ihnen damit mit, dass eine Klammer nicht geschlossen wurde. Fehlermeldungen zu lesen ist eine zentrale Fähigkeit. Meist enthält die letzte Zeile der Meldung den Kern.
print("Halo")
Zum Vergleich: ein zusätzliches Zeichen, und alles läuft.
Python liest ein Programm von oben nach unten. Jedes print() wird der Reihe nach ausgeführt:
print("Satu")
print("Dua")
print("Tiga")
Variablen behandeln wir im nächsten Kapitel ausführlich, aber ein kleines Beispiel hilft schon hier:
nama = "Eko"
tahun_lahir = 1990
print("Hai,", nama)
print("Usia pada 2026:", 2026 - tahun_lahir)
Das Zeichen = gibt einem Wert einen Namen. Nach nama = "Eko" ersetzt Python überall dort, wo wir nama schreiben, den Namen durch "Eko".
17 * 24 und geben Sie es aus.panjang = 8 und lebar = 5 und geben Sie die Fläche des Rechtecks aus.SyntaxError, führen Sie ihn aus und lesen Sie die Fehlermeldung. Beheben Sie ihn dann.# 1
print("Eko")
print("Yogyakarta")
# 2
print(17 * 24)
# 3
panjang = 8
lebar = 5
print("Luas:", panjang * lebar)
# 4 — ein häufiger Fehler: nicht geschlossene Klammer
# print("Halo"
print("Halo")
print() gibt einen Wert auf dem Bildschirm aus.# leitet einen Kommentar ein, den Python ignoriert.Im nächsten Kapitel lernen wir Variablen und Datentypen gründlich kennen.
Eine Variable ist unsere Art, etwas einen Namen zu geben, damit wir es wiederverwenden können. Python verlangt nicht, dass wir Typen deklarieren — es errät sie anhand des Werts — dennoch ist es Pflicht, Datentypen zu verstehen, denn der Typ bestimmt, was man mit einem Wert tun kann und was nicht.
umur = 25
nama = "Siti"
tinggi = 1.68
menikah = False
Vier Zeilen, vier Grundtypen: int (25), str ("Siti"), float (1.68) und bool (False). Um den Typ von etwas zu sehen, verwenden Sie type():
print(type(25)) # <class 'int'>
print(type(1.68)) # <class 'float'>
print(type("Siti")) # <class 'str'>
print(type(False)) # <class 'bool'>
int ist eine ganze Zahl; float ist eine Zahl mit Nachkommastellen. Eine Division ergibt immer einen float:
print(10 / 3) # 3.3333333333333335
print(10 // 3) # 3 (Ganzzahldivision)
print(10 % 3) # 1 (Rest der Division)
print(2 ** 10) # 1024 (Potenz)
Die Operatoren // und % sind tägliche Begleiter: der eine teilt ohne Rest, der andere liefert den Rest. Zusammen können sie eine Zahl in ihre Bestandteile zerlegen:
menit = 145
print(menit // 60, "jam", menit % 60, "menit") # 2 Std. 25 Min.
Strings lassen sich mit + verketten und mit * wiederholen:
depan = "Eko"
belakang = "Wibowo"
print(depan + " " + belakang)
print("ha" * 3) # hahaha
print(len("Python")) # 6
Strings vertiefen wir in Kapitel 7. Merken Sie sich vorerst nur, dass ein String eine Folge von Zeichen ist und len() deren Länge zählt.
bool hat nur zwei Werte: True und False. Diese Werte entstehen durch Vergleiche:
print(5 > 3) # True
print(5 == 5) # True (Achtung: == zum Vergleichen, = zum Zuweisen)
print(5 != 5) # False
Die klassische Falle.
=weist einer Variablen etwas zu;==vergleicht. Diese beiden Zeichen zu verwechseln gehört zu den häufigsten Fehlern von Einsteigern.
Manchmal müssen wir einen Typ ändern. Die Funktionen int(), float() und str() erledigen das:
nomor = "42" # das ist ein String, keine Zahl
print(nomor + "5") # 425 (wird angehängt, nicht addiert!)
print(int(nomor) + 5) # 47 (jetzt wird wirklich addiert)
print(str(100) + "!") # 100!
print(int(3.9)) # 3 (abgeschnitten, nicht gerundet)
Der bequemste Weg, gemischte Werte auszugeben, ist der f-String — ein String mit vorangestelltem f, der in {} Ausdrücke enthalten kann:
nama = "Eko"
umur = 36
print(f"Hai {nama}, usiamu {umur} tahun.")
print(f"Setahun lagi: {umur + 1}")
print(f"Pi sekitar {3.14159:.2f}") # 2 Nachkommastellen
f-Strings begegnen Ihnen im ganzen Buch immer wieder. Beherrschen Sie sie ab sofort.
Manchmal hat eine Variable noch keinen Wert. In Python wird „noch nicht vorhanden” durch None dargestellt:
hasil = None
print(hasil) # None
print(hasil is None) # True
None ist etwas anderes als 0 und etwas anderes als "". Es bedeutet wirklich „nichts”.
200 Minuten sind."7" und 3; addieren Sie sie als Zahlen und geben Sie das Ergebnis aus.berat = 72.5 (kg) und tinggi = 1.75 (m) an, berechnen Sie den Body-Mass-Index berat / tinggi ** 2 und geben Sie ihn mit 1 Nachkommastelle aus.# 1
depan = "Eko"
belakang = "Wibowo"
tahun = 1990
print(f"{depan} {belakang}, lahir {tahun}.")
# 2
total = 200
print(f"{total // 60} jam {total % 60} menit")
# 3
print(int("7") + 3)
# 4
berat = 72.5
tinggi = 1.75
imt = berat / tinggi ** 2
print(f"IMT: {imt:.1f}")
int, float, str, bool und None.// teilt ganzzahlig, % liefert den Rest, ** potenziert.= weist zu, == vergleicht.Warum wirkt guter Python-Code so knapp und angenehm lesbar? Weil er Idiome verwendet — Schreibweisen, die unter Pythonistas üblich sind. Dieses Kapitel vermittelt Comprehensions und eine Reihe von Gewohnheiten, die Code kürzer, klarer und pythonischer machen.
Der alte Weg, eine Liste zu füllen:
kuadrat = []
for x in range(1, 6):
kuadrat.append(x ** 2)
print(kuadrat)
Eine Comprehension verdichtet das auf eine Zeile:
kuadrat = [x ** 2 for x in range(1, 6)]
print(kuadrat) # [1, 4, 9, 16, 25]
genap = [x for x in range(10) if x % 2 == 0]
print(genap) # [0, 2, 4, 6, 8]
Das Muster: [Ausdruck for item in iterable], optional gefiltert mit if.
Für ein dict verwenden Sie {Schlüssel: Wert for ...}; für ein set {...}:
panjang = {kota: len(kota) for kota in ["jakarta", "bali", "medan"]}
print(panjang)
unik = {huruf.lower() for huruf in "Halo Dunia" if huruf != " "}
print(sorted(unik))
enumerate vergibt laufende Nummern; zip läuft gleichzeitig über zwei Listen:
buah = ["apel", "mangga", "jeruk"]
for nomor, nama in enumerate(buah, start=1):
print(f"{nomor}. {nama}")
nama = ["Eko", "Siti"]
umur = [36, 25]
for n, u in zip(nama, umur):
print(f"{n} berusia {u} tahun")
Beide liefern Iteratoren und sind daher speichersparend. zip endet bei der kürzesten Liste.
Einfache Bedingungen lassen sich in einer Zeile schreiben; Unpacking zerlegt eine Folge in mehrere Variablen:
umur = 20
print("dewasa" if umur >= 18 else "anak")
a, b = 1, 2
a, b = b, a # tauschen ohne Hilfsvariable
print(a, b)
kepala, *ekor = [1, 2, 3, 4]
print(kepala, ekor) # 1 [2, 3, 4]
f-Strings können Zahlenformat und Ausrichtung steuern:
nilai = 1234567.891
print(f"{nilai:,.2f}") # 1,234,567.89
print(f"{0.87:.1%}") # 87.0%
print(f"{42:05d}") # 00042
print(f"{'kanan':>10}|")
print(f"{'kiri':<10}|")
Der Walrus-Operator := weist einen Wert zu und prüft ihn zugleich:
data = [1, 2, 3, 4, 5, 6]
if (n := len(data)) > 3:
print(f"ada {n} item")
from collections import Counter
kata = "susu roti susu teh roti susu".split()
print(Counter(kata).most_common(2))
pengguna = {"nama": "Eko"}
print(pengguna.get("kota", "tidak diketahui"))
harga = {"beras": 12000, "gula": 15000, "minyak": 18000} ein neues dict mit den Preisen nach 10 % Rabatt.zip + Dict-Comprehension, um ["a", "b", "c"] mit [1, 2, 3] zu paaren.enumerate ein nummeriertes Menü aus ["Nasi Goreng", "Mie Ayam", "Sate"] aus.hasil = []
for x in range(1, 11):
if x % 3 == 0:
hasil.append(x * x)
# 1
print([x ** 2 for x in range(1, 11) if x % 2 == 1])
# 2
harga = {"beras": 12000, "gula": 15000, "minyak": 18000}
print({nama: int(bayar * 0.9) for nama, bayar in harga.items()})
# 3
kunci = ["a", "b", "c"]
nilai = [1, 2, 3]
print({k: v for k, v in zip(kunci, nilai)})
# 4
for nomor, item in enumerate(["Nasi Goreng", "Mie Ayam", "Sate"], start=1):
print(f"{nomor}. {item}")
# 5
print([x * x for x in range(1, 11) if x % 3 == 0])
enumerate vergibt Nummern; zip läuft über mehrere Folgen gleichzeitig.a if Bedingung else b für kurze Bedingungen.* nimmt den Rest auf.:= weist zu und prüft zugleich.Im nächsten Kapitel zerlegen wir das Programm in importierbare Module und Pakete.