Scripting

Übungen

Übungsfragen und Aufgaben zu Skriptsprachen, Python, Suche, Datenstrukturen, String-Operationen, Frequenzanalyse, Regex und DFIR.

Übungen

Diese Seite sammelt die wichtigsten Übungsideen aus den Scripting-Unterlagen.

Grundlagen

  1. Erkläre, was eine Skriptsprache ist.
  2. Nenne fünf Beispiele für Skriptsprachen.
  3. Nenne drei Vorteile von Skriptsprachen.
  4. Nenne drei Nachteile von Skriptsprachen.
  5. Warum eignet sich Python gut für Automatisierung?
  6. Was bedeutet dynamische Typisierung?
  7. Was bedeutet, dass in Python alles ein Objekt ist?

Python Syntax

  1. Wozu dient die REPL?
  2. Wie werden Kommentare geschrieben?
  3. Warum ist Einrückung in Python wichtig?
  4. Was ist der Unterschied zwischen == und is?
  5. Welche Werte sind in Python logisch falsch?
  6. Warum gibt es in Python kein i++?

Kontrollfluss

Schreibe kleine Programme zu:

  1. if, elif, else
  2. while mit Zähler
  3. for über einen String
  4. for mit range
  5. break
  6. continue

Funktionen

  1. Schreibe eine Funktion add(a, b).
  2. Schreibe eine Funktion mit Default-Parameter.
  3. Schreibe eine Funktion, die Quotient und Rest zurückgibt.
  4. Erkläre, warum mehrere Rückgabewerte in Python praktisch Tupel sind.
  5. Was gibt eine Funktion ohne return zurück?

Übung 1: Listen durchsuchen

Implementiere drei Suchfunktionen:

def linear_search(list_of_numbers, number):
    pass

def search_using_in(list_of_numbers, number):
    pass

def binary_search(sorted_list_of_numbers, number):
    pass

Anforderungen:

  • True zurückgeben, wenn die Zahl enthalten ist
  • False zurückgeben, wenn sie nicht enthalten ist
  • Binärsuche iterativ implementieren
  • Performance mit timeit messen
  • 20.000 Durchgänge vergleichen

Diskussionsfragen:

  • Warum braucht Binärsuche eine sortierte Liste?
  • Warum ist in in Python oft schneller als selbst geschriebener Code?
  • Wann lohnt sich Sortieren vor der Suche?

Lineare Datenstrukturen

  1. Erkläre tuple, list und str.
  2. Welche davon sind veränderlich?
  3. Was ist Slicing?
  4. Was bedeutet s[::-1]?
  5. Warum braucht ein Tupel mit einem Element ein Komma?
  6. Wie kann man eine Liste als Stack verwenden?

Übung 2: String-Operationen

Satzumkehr

Schreibe eine Funktion:

def reverse_sentence(sentence):
    pass

Beispiel:

reverse_sentence("Never gonna give you up.")

Anforderungen:

  • Wortreihenfolge umdrehen
  • Satz beginnt wieder mit großem Wort
  • Satz endet mit Punkt
  • Groß- und Kleinschreibung der Wörter sonst beibehalten

Zeichentausch

Schreibe eine Funktion:

def manipulate_string(string):
    pass

Regeln:

  • Wörter mit weniger als zwei Zeichen bleiben unverändert.
  • Wörter mit ungerader Länge tauschen erstes und letztes Zeichen.
  • Wörter mit gerader Länge werden in zwei gleich lange Teile getrennt.
  • Ausgabe bleibt ein String mit Leerzeichen zwischen den Teilen.

Hash-Datenstrukturen

  1. Was ist ein Set?
  2. Warum entfernt ein Set Duplikate?
  3. Was ist ein frozenset?
  4. Was ist ein Dictionary?
  5. Warum müssen Dictionary-Keys hashbar sein?
  6. Wann verwendet man items()?

Comprehensions und Generatoren

  1. Schreibe eine List-Comprehension für Quadratzahlen.
  2. Schreibe eine Set-Comprehension für alle Buchstaben eines Strings.
  3. Schreibe eine Dict-Comprehension mit Zahlen als Keys.
  4. Was macht yield?
  5. Was bedeutet Lazy Evaluation?
  6. Warum kann ein Generator speicherschonender sein als eine Liste?

Übung 3: Frequenzanalyse

Schreibe eine Funktion zum Einlesen einer UTF-8-Datei:

def read_text_file(path):
    pass

Anforderungen:

  • Datei lesen
  • Leerzeichen entfernen
  • Zeilenumbrüche entfernen
  • bereinigten Text zurückgeben

Schreibe eine Funktion zur Analyse:

def analyze_text(text):
    pass

Anforderungen:

  • absolute Häufigkeit jedes Zeichens zählen
  • Groß- und Kleinschreibung ignorieren
  • Ergebnis als Dictionary zurückgeben

Zusatz:

  • Analysiere text_to_analyze.txt.
  • Gib die Ergebnisse sortiert aus.
  • Erkläre, warum ein Dictionary für diese Aufgabe passt.

File I/O

  1. Was macht open?
  2. Warum ist with empfehlenswert?
  3. Was ist der Unterschied zwischen r, w, a, rb und wb?
  4. Warum sollte man Encoding bewusst angeben?
  5. Was ist der Unterschied zwischen read() und zeilenweiser Iteration?

Regex

  1. Was ist ein regulärer Ausdruck?
  2. Was bedeutet \d{2,7}?
  3. Was bedeutet ^?
  4. Was bedeutet $?
  5. Was ist eine Gruppe?
  6. Was ist der Unterschied zwischen greedy und non-greedy?
  7. Was liefert findall mit Gruppen?

DFIR: Ping-Anrufe

Schreibe ein Skript, das call_log.txt analysiert.

Regeln für Angreifer-Nummern:

  • Vorwahl beginnt mit 0
  • Vorwahl ist fünf oder sechs Ziffern lang
  • erlaubte Trenner: /, //, ///, .
  • dritte Stelle der Nummer ist 1 oder 4
  • Nummer ist acht bis zehn Zeichen lang

Aufgaben:

  1. Datei lesen.
  2. Treffer mit Regex finden.
  3. Nummern auf Vorwahl/Nummer normalisieren.
  4. Duplikate entfernen.
  5. Ergebnis sortiert in attacker_numbers.txt schreiben.
  6. Optional SHA-256-Hash der Ergebnisdatei berechnen.

Mini-Prüfungsfragen

  1. Warum sind Skriptsprachen gut für Automatisierung?
  2. Warum ist Python dynamisch, aber stark typisiert?
  3. Wann nimmt man eine Liste und wann ein Set?
  4. Warum ist ein Dictionary gut für Frequenzanalyse?
  5. Warum sollte man Dateien mit with öffnen?
  6. Warum sind reguläre Ausdrücke für Loganalyse praktisch?
  7. Was macht ein Hashwert bei Ergebnisdateien nachvollziehbar?

Merksatz

Scripting lernt man am besten durch kleine, echte Aufgaben: Daten rein, Logik anwenden, Ergebnis sauber raus.

Zuletzt aktualisiert: 6. Juni 2026