Programmier-Übungen für jeden Tag

Kleine Übungen für alle, die die Grundlagen von Python oder JavaScript kennen und dranbleiben wollen. Jede dauert 10 bis 20 Minuten. Erst selbst probieren, dann die Lösung aufklappen.

Python-Übungen

Listen, Strings und Dictionaries: das Werkzeug, das du in Python jeden Tag brauchst.

1. Wörter zählen

Leicht

Schreib eine Funktion count_words(text), die zählt, wie oft jedes Wort in einem Text vorkommt. Groß- und Kleinschreibung spielt keine Rolle.

Beispiel: count_words("Der Hund und der Ball") ergibt {"der": 2, "hund": 1, "und": 1, "ball": 1}

Tipp: text.lower().split() gibt dir die Wörter, ein Dictionary merkt sich die Anzahl.

Lösung anzeigen
def count_words(text):
    counts = {}
    for word in text.lower().split():
        counts[word] = counts.get(word, 0) + 1
    return counts

Kürzer geht es mit collections.Counter: Counter(text.lower().split()).

2. Palindrom erkennen

Leicht

Schreib is_palindrome(text), die prüft, ob ein Satz vorwärts und rückwärts gleich ist. Leerzeichen und Groß- und Kleinschreibung zählen nicht.

Beispiel: is_palindrome("Ein Esel lese nie") ergibt True

Tipp: Behalte nur Buchstaben und Ziffern und vergleiche die Liste mit ihrer Umkehrung [::-1].

Lösung anzeigen
def is_palindrome(text):
    letters = [c for c in text.lower() if c.isalnum()]
    return letters == letters[::-1]

3. Passwort prüfen

Mittel

Schreib check_password(password), die eine Liste aller Probleme zurückgibt: kürzer als 8 Zeichen, keine Ziffer, kein Großbuchstabe. Ein gutes Passwort ergibt eine leere Liste.

Beispiel: check_password("hallo1") ergibt ["zu kurz", "kein Großbuchstabe"]

Tipp: any() mit c.isdigit() oder c.isupper() prüft, ob mindestens ein Zeichen passt.

Lösung anzeigen
def check_password(password):
    problems = []
    if len(password) < 8:
        problems.append("zu kurz")
    if not any(c.isdigit() for c in password):
        problems.append("keine Ziffer")
    if not any(c.isupper() for c in password):
        problems.append("kein Großbuchstabe")
    return problems

4. Einkäufe zusammenfassen

Mittel

Du hast eine Liste von Einkäufen als Paare aus Produkt und Preis. Schreib summarize(purchases), die pro Produkt die Summe bildet und das Ergebnis nach Summe absteigend sortiert.

Beispiel: summarize([("Brot", 2.5), ("Milch", 1.2), ("Brot", 2.5)]) ergibt [("Brot", 5.0), ("Milch", 1.2)]

Tipp: Erst in einem Dictionary aufsummieren, dann sorted() mit key und reverse=True.

Lösung anzeigen
def summarize(purchases):
    totals = {}
    for product, price in purchases:
        totals[product] = totals.get(product, 0) + price
    return sorted(totals.items(), key=lambda pair: pair[1], reverse=True)

JavaScript-Übungen

Kleine Aufgaben, wie sie in echten Projekten ständig vorkommen. Testen kannst du alles direkt in der Konsole deines Browsers.

5. Initialen bilden

Leicht

Schreib initials(name), die aus einem vollen Namen die Initialen in Großbuchstaben macht. Doppelte Leerzeichen sollen nicht stören.

Beispiel: initials("ada lovelace") ergibt "AL"

Tipp: trim(), dann split(/\s+/) und von jedem Teil den ersten Buchstaben.

Lösung anzeigen
function initials(name) {
  return name
    .trim()
    .split(/\s+/)
    .map((part) => part[0].toUpperCase())
    .join('');
}

6. Doppelte entfernen

Leicht

Schreib unique(list), die doppelte Werte aus einem Array entfernt und die Reihenfolge behält.

Beispiel: unique([3, 1, 3, 2, 1]) ergibt [3, 1, 2]

Tipp: Ein Set speichert jeden Wert nur einmal und behält die Reihenfolge, in der er zuerst kam.

Lösung anzeigen
function unique(list) {
  return [...new Set(list)];
}

7. Sekunden als Uhrzeit

Mittel

Schreib formatTime(seconds), die Sekunden als Stunden, Minuten und Sekunden ausgibt. Unter einer Stunde fallen die Stunden weg.

Beispiel: formatTime(3725) ergibt "1:02:05", formatTime(125) ergibt "2:05"

Tipp: Math.floor und % zerlegen die Zahl, padStart(2, '0') macht aus 5 eine 05.

Lösung anzeigen
function formatTime(seconds) {
  const h = Math.floor(seconds / 3600);
  const m = Math.floor((seconds % 3600) / 60);
  const s = seconds % 60;
  const pad = (n) => String(n).padStart(2, '0');
  return h > 0 ? `${h}:${pad(m)}:${pad(s)}` : `${m}:${pad(s)}`;
}

8. Nach Eigenschaft gruppieren

Mittel

Schreib groupBy(items, key), die eine Liste von Objekten nach dem Wert einer Eigenschaft gruppiert.

Beispiel: groupBy([{ name: "Apfel", typ: "Obst" }, { name: "Lauch", typ: "Gemüse" }], "typ") ergibt { Obst: [{ name: "Apfel", typ: "Obst" }], Gemüse: [{ name: "Lauch", typ: "Gemüse" }] }

Tipp: Ein leeres Objekt als Ergebnis, für jeden neuen Wert ein leeres Array anlegen.

Lösung anzeigen
function groupBy(items, key) {
  const groups = {};
  for (const item of items) {
    const value = item[key];
    if (!groups[value]) groups[value] = [];
    groups[value].push(item);
  }
  return groups;
}

In aktuellen Browsern und in Node gibt es dafür auch Object.groupBy(items, (item) => item[key]).

Algorithmen-Übungen

Hier geht es um den Lösungsweg, nicht um die Sprache. Die Lösungen gibt es deshalb in Python und in JavaScript.

9. Binäre Suche

Mittel

Schreib eine Funktion, die in einer sortierten Liste den Index einer Zahl findet, ohne die Liste von vorne bis hinten durchzugehen. Gibt es die Zahl nicht, ist das Ergebnis -1.

Beispiel: binary_search([1, 3, 5, 7, 9], 7) ergibt 3

Tipp: Schau in die Mitte. Ist die Zahl dort zu klein, suchst du nur noch rechts weiter, sonst links.

Lösung anzeigen
def binary_search(items, target):
    low, high = 0, len(items) - 1
    while low <= high:
        mid = (low + high) // 2
        if items[mid] == target:
            return mid
        if items[mid] < target:
            low = mid + 1
        else:
            high = mid - 1
    return -1
function binarySearch(items, target) {
  let low = 0;
  let high = items.length - 1;
  while (low <= high) {
    const mid = Math.floor((low + high) / 2);
    if (items[mid] === target) return mid;
    if (items[mid] < target) low = mid + 1;
    else high = mid - 1;
  }
  return -1;
}

Bei einer Million Einträgen reichen so etwa 20 Vergleiche.

10. Zwei Zahlen zur Summe

Mittel

Finde in einer Liste die beiden Zahlen, die zusammen eine Zielsumme ergeben, und gib ihre Indizes zurück. Versuch es mit nur einem Durchlauf durch die Liste.

Beispiel: two_sum([2, 7, 11, 15], 9) ergibt [0, 1]

Tipp: Merk dir in einem Dictionary jede Zahl, die du schon gesehen hast. Ist ziel - zahl schon drin, bist du fertig.

Lösung anzeigen
def two_sum(numbers, target):
    seen = {}
    for i, n in enumerate(numbers):
        if target - n in seen:
            return [seen[target - n], i]
        seen[n] = i
    return None
function twoSum(numbers, target) {
  const seen = new Map();
  for (let i = 0; i < numbers.length; i++) {
    const rest = target - numbers[i];
    if (seen.has(rest)) return [seen.get(rest), i];
    seen.set(numbers[i], i);
  }
  return null;
}

Zwei verschachtelte Schleifen gehen auch, brauchen bei langen Listen aber viel länger.

11. Klammern prüfen

Mittel

Prüf, ob in einem Text alle Klammern (), [] und {} richtig geschlossen sind, auch verschachtelt.

Beispiel: is_balanced("(a[b]{c})") ergibt True, is_balanced("(]") ergibt False

Tipp: Leg jede offene Klammer auf einen Stapel. Bei einer schließenden muss oben die passende offene liegen.

Lösung anzeigen
def is_balanced(text):
    pairs = {")": "(", "]": "[", "}": "{"}
    stack = []
    for c in text:
        if c in "([{":
            stack.append(c)
        elif c in pairs:
            if not stack or stack.pop() != pairs[c]:
                return False
    return not stack
function isBalanced(text) {
  const pairs = { ')': '(', ']': '[', '}': '{' };
  const stack = [];
  for (const c of text) {
    if ('([{'.includes(c)) stack.push(c);
    else if (c in pairs && stack.pop() !== pairs[c]) return false;
  }
  return stack.length === 0;
}

12. Anagramme gruppieren

Knifflig

Gruppiere eine Liste von Wörtern so, dass Wörter mit denselben Buchstaben zusammenstehen.

Beispiel: group_anagrams(["lager", "regal", "tor", "rot", "ort", "haus"]) ergibt [["lager", "regal"], ["tor", "rot", "ort"], ["haus"]]

Tipp: Sortierst du die Buchstaben eines Worts, sehen alle Anagramme gleich aus. Das ist dein Schlüssel.

Lösung anzeigen
def group_anagrams(words):
    groups = {}
    for word in words:
        key = "".join(sorted(word))
        groups.setdefault(key, []).append(word)
    return list(groups.values())
function groupAnagrams(words) {
  const groups = new Map();
  for (const word of words) {
    const key = [...word].sort().join('');
    if (!groups.has(key)) groups.set(key, []);
    groups.get(key).push(word);
  }
  return [...groups.values()];
}

So übst du richtig

Erst selbst, dann die Lösung

Auch ein halber Versuch bringt mehr, als sofort nachzuschauen. Hängst du fest, lies den Tipp.

Timer auf 20 Minuten

Ein festes Ende hält die Übung klein. Was du in der Zeit nicht schaffst, schaust du dir in der Lösung an.

Nachbauen, nicht kopieren

Lies die Lösung, klapp sie zu und schreib sie aus dem Kopf neu. So bleibt sie hängen.

Jeden Tag eine Übung

Kleine, regelmäßige Übungen halten dein Wissen frisch, viel besser als ein langer Tag im Monat.

Häufige Fragen

Für wen sind die Übungen?

Für alle, die die Grundlagen schon kennen: Variablen, Schleifen, Funktionen und Listen. Die Übungen bringen dir eine Sprache nicht von null bei, sie helfen dir, regelmäßig zu üben.

Wie kann ich den Code ausprobieren?

Python läuft in jedem Terminal mit installiertem Python oder in einem Online-Editor. JavaScript kannst du direkt in der Konsole deines Browsers testen, die du mit F12 öffnest.

Wie oft sollte ich programmieren üben?

Lieber jeden Tag 20 Minuten als einmal im Monat einen ganzen Tag. So bleibt das, was du gelernt hast, im Kopf.

Was bringen Algorithmen-Übungen?

Sie trainieren den Lösungsweg unabhängig von der Sprache: suchen, zählen, vergleichen. Genau solche Aufgaben kommen auch in vielen Bewerbungsgesprächen vor.

Gibt es eine App mit täglichen Programmier-Übungen?

Ja, FlowStart gibt dir jeden Tag eine neue Übung in Python, JavaScript oder Algorithmen, auf der Stufe, die du wählst. Du kannst die App 7 Tage gratis testen.

Jeden Tag eine neue Übung

FlowStart gibt dir jeden Tag eine Programmier-Übung, die in deinen Alltag passt. Trag dich ein, dann melden wir uns, sobald die App da ist.