← Alle LernbereicheFISI & FIAE · LF 5, 8 und 11a

Python: Programme und Daten

Mit Python Algorithmen, Datenaufbereitung und kleine Anwendungen entwickeln – mit klaren Funktionen, Klassen und Tests.

01

Einrückung und Programmablauf

Python verwendet Einrückung zur Strukturierung von Blöcken. Nach einer Blocküberschrift steht ein Doppelpunkt. Verwende konsistente Leerzeichen und mische nicht Tabs und Leerzeichen. Der Interpreter führt das Programm aus; Syntaxfehler, Laufzeitausnahmen und fachliche Logikfehler sind unterschiedliche Fehlerklassen. Die Übungen sind für Python 3 geschrieben und verwenden die Standardbibliothek.

status = "offen"
if status == "offen":
    print("bearbeiten")
else:
    print("abwarten")
02

Dynamische Typen und Konvertierung

Python-Objekte besitzen Typen; Variablennamen können auf unterschiedliche Objekte zeigen. Dynamische Typisierung bedeutet nicht, dass alle Typen beliebig zusammenpassen. input() liefert Text. int() und float() benötigen passende Eingaben und können ValueError auslösen. Ganzzahlen haben keinen festen 32-Bit-Wertebereich, aber Speicher und Rechenzeit sind begrenzt. Typannotationen dokumentieren und unterstützen Werkzeuge, erzwingen zur Laufzeit aber nicht automatisch alle Bedingungen.

03

Division und Geldbeträge

/ liefert echte Division, // Ganzzahldivision mit Abrunden Richtung minus unendlich. Deshalb ist -7 // 2 gleich -4, anders als Java-Ganzzahldivision. % steht in Beziehung zu dieser Division. Binäre Gleitkommazahlen stellen viele Dezimalbrüche nicht exakt dar. Nutze für Centbeträge geeignete Ganzzahlen oder Decimal mit bewusster Präzision und Rundungsregel.

print(7 / 2)   # 3.5
print(7 // 2)  # 3
print(-7 // 2) # -4
04

Bedingungen, Wahrheitswerte und None

Vergleiche Werte normalerweise mit ==. is prüft Identität; für None ist is None die übliche Form. Leere Listen, leere Texte und 0 gelten in Bedingungen als falsch, was nicht immer die gewünschte fachliche Regel ist: Eine erlaubte 0 darf nicht ungeprüft als fehlend behandelt werden. and und or werten kurzschließend aus und können einen Operanden statt eines reinen bool zurückgeben. Nutze klare Bedingungen für Freigaben und Grenzwerte.

05

Schleifen, range und Listen

range(start, stop) enthält stop nicht. Listen sind veränderbare geordnete Folgen und verwenden nullbasierte Indizes; negative Indizes zählen vom Ende. Iteriere nicht unüberlegt über eine Liste, während du darin Elemente entfernst: Dabei können Einträge übersprungen werden. Erstelle stattdessen eine neue gefilterte Liste oder durchlaufe eine geeignete Kopie. Listen-Comprehensions eignen sich für überschaubare Umformungen, nicht für beliebig verschachtelte Geschäftslogik.

werte = [4, 7, 2]
positive = [wert for wert in werte if wert > 0]
print(sum(positive))
06

Dictionaries, Sets und Kopien

Ein Dictionary ordnet Schlüssel Werten zu und bewahrt in aktuellen Python-3-Versionen die Einfügereihenfolge. dict[key] kann KeyError auslösen; get liefert einen vereinbarten Standard, der fehlend und tatsächlich vorhandenes None unter Umständen nicht unterscheidet. Sets enthalten eindeutige hashbare Werte, aber keine allgemein zugesicherte Anzeigereihenfolge. b = a kopiert keine Liste. list(a) erzeugt eine flache Kopie; verschachtelte veränderbare Objekte können weiterhin geteilt sein.

07

Funktionen und Seiteneffekte

def definiert eine Funktion. return liefert ein Ergebnis und beendet diesen Aufruf. Ohne expliziten Rückgabewert wird None geliefert. Trenne Berechnung von Ausgabe. Mutable Standardargumente werden beim Definieren einmal erzeugt und können ungewollt zwischen Aufrufen geteilt werden. Verwende dafür None und erstelle im Aufruf eine neue Liste. Dokumentiere, ob eine Funktion die Eingabe verändern darf.

def sammle(wert, ziel=None):
    if ziel is None:
        ziel = []
    ziel.append(wert)
    return ziel
08

Klassen und fachliche Regeln

Eine Klasse bündelt Zustand und Verhalten. __init__ initialisiert eine neu erzeugte Instanz; self bezeichnet in Instanzmethoden das konkrete Objekt. Ein Unterstrich kennzeichnet konventionell eine interne Verwendung, ist aber keine umfassende Zugriffssperre wie Java private. Nutze Eigenschaften und Methoden zur Prüfung fachlicher Regeln. dataclasses können Datenklassen vereinfachen; sie ersetzen keine Eingabevalidierung.

class Ticket:
    def __init__(self, minuten):
        if minuten < 0:
            raise ValueError("Minuten müssen >= 0 sein")
        self.minuten = minuten
09

Ausnahmen und Kontextmanager

Fange gezielt erwartete Fehler, etwa ValueError bei einer Konvertierung. except Exception darf einen Fehler nicht still als Erfolg verbergen. finally wird beim normalen Verlassen des Blocks auch bei Ausnahmen ausgeführt. Ein Kontextmanager mit with schließt Ressourcen zuverlässig, soweit das Programm regulär weiterlaufen kann. Eine Prozessbeendigung oder ein Systemausfall hat andere Grenzen.

try:
    nummer = int("12abc")
except ValueError:
    print("ungültige ID")
10

CSV, JSON und Module

Die Standardbibliothek bietet csv und json. csv.DictReader interpretiert eingeschlossene Felder und liefert Zuordnungen aus Kopfzeilennamen. json.loads liest JSON aus Text; ein Python-dict-Literal ist nicht automatisch gültiges JSON. Externe Eingaben brauchen zusätzliche Struktur- und Fachprüfungen. Module sollten klare Schnittstellen besitzen. if __name__ == "__main__" trennt den direkten Programmeinstieg von der Nutzung als Import.

import json
data = json.loads("{\"id\":7}")
print(data["id"])
11

Tests, Komplexität und Reproduzierbarkeit

unittest gehört zur Standardbibliothek. Prüfe erwartete Werte, Fehlerfälle und unveränderte Eingaben, sofern diese zugesichert sind. Eine lineare Suche wächst in der Größenordnung O(n); binäre Suche benötigt eine passende Sortierung. Messungen hängen von Eingabegröße und Umgebung ab. Zufallsbasierte Tests sollen reproduzierbar sein, ohne die fachlichen Erwartungen aus derselben fehlerhaften Berechnung abzuleiten.

12

Praxis: sichere Datenaufbereitung

Formuliere den Vertrag eines Ticketexports. Lies die Daten, prüfe Pflichtfelder und überführe Statuswerte anhand einer ausdrücklichen Tabelle. Nutze stabile IDs für Zuordnungen und dokumentiere Dublettenkonflikte. Baue kleine testbare Funktionen. Die Python-Werkstatt übt zunächst Datenstrukturen, Kontrollfluss und Auswertung; der Datenaustauschbereich ergänzt Datenverträge und Importregeln. Eigener Code läuft ohne Netzwerk und ohne Zugriff auf Kontodaten.

Wissen anwenden

Prüfe die Grundlagen in einer kurzen Übung.

Zur Übung ↗