ERSTE SCHRITTE

Ihre erste Aufgabe. Ein überprüfbares Ergebnis.

Öffnen Sie ein kleines Projekt in MonkeyCode, lassen Sie einen Fehler beheben und prüfen Sie das Ergebnis. Im Browser oder in der Desktop-App.

Anleitung starten

Umgebung wählen

Wählen Sie Ihre Arbeitsumgebung. Beispiel und Ziel bleiben gleich.

Mit einem Repository arbeiten

Sie benötigen ein MonkeyCode-Konto, ein eigenes GitHub-Repository und ein verfügbares Modell mit Nutzungskontingent.

MonkeyCode öffnen

Die Links öffnen die englische Produktoberfläche. Wählen Sie bei der Anmeldung den Tab „User“.

Orientierung in der aktuellen Oberfläche

Bei der Regionsabfrage „Stay on International“ wählen.

Auf der Anmeldung den Tab für reguläre Nutzer beibehalten und die gewünschte Anmeldemethode wählen. Vor dem Fortfahren die Nutzungsbedingungen lesen.

User
Regulärer Nutzer
GitHub Sign-in
Mit GitHub anmelden
Google Sign-in
Mit Google anmelden
Email and Password
Mit Passwort anmelden
Englische MonkeyCode-Anmeldung mit Nutzer-Tab sowie GitHub-, Google- und Passwort-Buttons.
Tatsächliche öffentliche Anmeldeseite, aufgenommen am .

Mit einem lokalen Ordner arbeiten

Sie benötigen die MonkeyCode-Desktop-App, ein nutzbares Konto oder eine konfigurierte Modellverbindung sowie Python in der lokalen Aufgaben-Umgebung.

Desktop-App herunterladen

Die Links öffnen die englische Produktoberfläche. Wählen Sie bei der Anmeldung den Tab „User“.

Orientierung in der aktuellen Oberfläche

Bei der Regionsabfrage „Stay on International“ wählen.

Der Link führt zum Desktop-Download. Windows, macOS oder Linux passend zu Ihrem Computer wählen und dem Installationsprogramm folgen.

Download for Windows
Windows-Installer herunterladen
Download for macOS
macOS-DMG herunterladen
Download for Linux
Linux-AppImage herunterladen

Auf dem eigenen Server arbeiten? Anleitung zum Selbsthosting →

Beispiel öffnen

Laden Sie den Starter herunter und entpacken Sie ihn in einen neuen Ordner namens monkeycode-first-task. Behalten Sie die ZIP-Datei für einen Neustart.

Starter-ZIP herunterladen

Direkt im Ordner sollten intervals.py, retry.py, zwei Testdateien, README.md und TASKS.md liegen.

Python 3.10+

Für die erste lokale Prüfung braucht Ihr Computer Python 3.10+. Auch die MonkeyCode-Aufgaben-Umgebung braucht Python zur Prüfung der Korrektur. Das Beispiel nutzt nur die Standardbibliothek. Die manuelle lokale Ausführung benötigt weder Konto noch API-Schlüssel. Python herunterladen ↗

Öffnen Sie vor dem Import in MonkeyCode ein lokales Terminal im entpackten Ordner mit intervals.py und führen Sie diesen Befehl aus.

Prüfbefehl
python3 -m unittest discover -v

Wenn unter Windows python3 fehlt, aber der Python-Launcher installiert ist, ersetzen Sie python3 in allen Befehlen und im Auftrag durch py -3.

Erwartung vor der Korrektur
Ran 8 tests
FAILED (failures=1)

8 Tests laufen. Nur test_touching_is_not_overlap schlägt fehl. Das ist der vorgesehene Ausgangspunkt.

Steht dort „Ran 0 tests“? Prüfen Sie den Arbeitsordner. Null Tests bedeuten hier keinen erfolgreichen Durchlauf.

Dateien in MonkeyCode öffnen

Im Browser

  1. Legen Sie die entpackten Beispieldateien in einem neuen eigenen GitHub-Repository ab.
  2. Verbinden Sie in den MonkeyCode-Einstellungen Ihr GitHub-Konto und erlauben Sie Zugriff auf dieses Repository.
  3. Erstellen Sie ein Projekt mit Namen, verbundenem Git-Konto und Beispiel-Repository.
Ausführliche Einrichtung →

In der Desktop-App

  1. Laden Sie die Desktop-App von der offiziellen Produktwebsite herunter und installieren Sie sie.
  2. Wählen Sie den lokalen Agenten und öffnen Sie den entpackten Ordner mit intervals.py.
  3. Prüfen Sie den Arbeitsordner der Aufgabe und wählen Sie ein verfügbares Modell.
Ausführliche Einrichtung →

Korrektur anfordern

Starten Sie eine Aufgabe für das Beispielprojekt. Prüfen Sie Repository und Modell und fügen Sie den Auftrag unten in das Eingabefeld ein.

Starten Sie eine lokale Aufgabe im Beispielordner. Prüfen Sie Ordner und Modell und fügen Sie den Auftrag unten in das Eingabefeld ein.

In MonkeyCode einfügen
Behebe den Fehler für halboffene Intervalle in intervals.py: (1, 3) und (3, 5) dürfen sich nicht überschneiden. Ändere nur intervals.py und schwäche keine Tests ab. Führe python3 -m unittest discover -v aus. Berichte Diff, genauen Befehl und Ergebnis. Fertig: alle 8 vorhandenen Tests bestehen, auch berührende, leere und umgekehrte Intervalle.

Warten Sie auf den Abschluss und prüfen Sie geänderte Dateien und Testausgabe. Behalten Sie die ursprünglichen Tests.

Ergebnis prüfen

Führen Sie denselben Prüfbefehl erneut aus und lesen Sie den Diff. Entscheiden Sie anhand dieser drei Kriterien über die Änderung.

Prüfbefehl
python3 -m unittest discover -v

  • Nur intervals.py wurde bearbeitet. Automatisch erzeugte Cache-Dateien zählen nicht als Quellcodeänderungen.
  • Die ursprünglichen Tests sind unverändert; alle 8 bestehen, auch berührende, leere und umgekehrte Intervalle.
  • Die Aufgabe nennt Änderung, genauen Befehl und Ergebnis.
Erwartung nach der Korrektur
Ran 8 tests
OK

Prüfen Sie die Testanzahl und „OK“. Eine andere korrekte Implementierung ist ebenfalls zulässig, wenn sie die Anforderungen erfüllt.

Alle drei Kriterien erfüllt? Ihre erste Aufgabe ist fertig.

Sie haben ein Projekt geöffnet, eine gezielte Änderung angefordert und das Ergebnis selbst geprüft. Speichern Sie den Diff vor der nächsten Aufgabe.

Bei Bedarf: zwei weitere Aufgaben

TASKS.md enthält zwei optionale Übungen. Führen Sie sie getrennt aus und vergleichen Sie jede Änderung mit dem vorherigen Stand.

  1. Vier Tests für Wiederholungsregeln hinzufügen, ohne retry.py zu ändern. Danach sollen 12 Tests bestehen.
  2. Nur README.md um „How it works“ ergänzen, ohne Code zu ändern. Alle 12 Tests sollen weiterhin bestehen.
Referenzlösung und Prüfausgaben

Erst ausprobieren, dann vergleichen. Diese lokal geprüften Dateien zeigen das erwartete Verhalten; sie sind kein aufgezeichneter MonkeyCode-Lauf.

Referenz und Belege herunterladen ↓
Vorher · ein Test schlägt fehlreturn a[0] <= b[1] and b[0] <= a[1]

[1, 3) + [3, 5) → True

Nachher · acht Tests bestandenreturn a[0] < b[1] and b[0] < a[1]

[1, 3) + [3, 5) → False

Die Ergebnisse stammen aus einem lokal von Codex erstellten und geprüften Referenzbeispiel. Es ist kein MonkeyCode-Produktlauf oder Kundenbenchmark; Zeit, Tokenkosten und Agenten-Erfolgsraten werden nicht behauptet.

1. Fehler beheben

Berührende Intervalle überschneiden sich nicht. Nur intervals.py ändert sich.

Protokoll und Diff öffnen
--- a/intervals.py
+++ b/intervals.py
@@ -2,4 +2,4 @@
 def overlaps(a, b):
     if a[0] >= a[1] or b[0] >= b[1]:
         return False
-    return a[0] <= b[1] and b[0] <= a[1]
+    return a[0] < b[1] and b[0] < a[1]
test_empty (test_intervals.IntervalTests.test_empty) ... ok
test_reversed (test_intervals.IntervalTests.test_reversed) ... ok
test_separated (test_intervals.IntervalTests.test_separated) ... ok
test_shared_interior (test_intervals.IntervalTests.test_shared_interior) ... ok
test_touching_is_not_overlap (test_intervals.IntervalTests.test_touching_is_not_overlap) ... ok
test_budget (test_retry.RetryTests.test_budget) ... ok
test_success (test_retry.RetryTests.test_success) ... ok
test_transient (test_retry.RetryTests.test_transient) ... ok

----------------------------------------------------------------------
Ran 8 tests in 0.000s

OK

2. Tests ergänzen

Vier Tests prüfen Limits, permanente Fehler, Versuchsgrenzen und ungültige Werte.

Protokoll und Diff öffnen
--- a/test_retry.py
+++ b/test_retry.py
@@ -9,5 +9,18 @@
     def test_budget(self):
         self.assertFalse(should_retry(503, 3))
 
+class AddedRetryTests(unittest.TestCase):
+    def test_rate_limit(self):
+        self.assertTrue(should_retry(429, 1))
+    def test_permanent_error(self):
+        self.assertFalse(should_retry(400, 1))
+    def test_before_budget(self):
+        self.assertTrue(should_retry(503, 2))
+    def test_invalid_attempts(self):
+        for attempt, maximum in [(0, 3), (-1, 3), (1, 0)]:
+            with self.subTest(attempt=attempt, maximum=maximum):
+                with self.assertRaises(ValueError):
+                    should_retry(503, attempt, maximum)
+
 if __name__ == "__main__":
     unittest.main()
test_empty (test_intervals.IntervalTests.test_empty) ... ok
test_reversed (test_intervals.IntervalTests.test_reversed) ... ok
test_separated (test_intervals.IntervalTests.test_separated) ... ok
test_shared_interior (test_intervals.IntervalTests.test_shared_interior) ... ok
test_touching_is_not_overlap (test_intervals.IntervalTests.test_touching_is_not_overlap) ... ok
test_before_budget (test_retry.AddedRetryTests.test_before_budget) ... ok
test_invalid_attempts (test_retry.AddedRetryTests.test_invalid_attempts) ... ok
test_permanent_error (test_retry.AddedRetryTests.test_permanent_error) ... ok
test_rate_limit (test_retry.AddedRetryTests.test_rate_limit) ... ok
test_budget (test_retry.RetryTests.test_budget) ... ok
test_success (test_retry.RetryTests.test_success) ... ok
test_transient (test_retry.RetryTests.test_transient) ... ok

----------------------------------------------------------------------
Ran 12 tests in 0.000s

OK

3. Code erklären

Die README erklärt beide Module und behält den Prüfaufruf.

Protokoll und Diff öffnen
--- a/README.md
+++ b/README.md
@@ -9,3 +9,11 @@
 ```
 
 The initial interval test intentionally fails. Work on a copy.
+
+## How it works
+
+- `intervals.py` checks half-open intervals: touching endpoints do not overlap.
+- Empty or reversed intervals never overlap.
+- `retry.py` retries 408, 429, 500, 502, 503 and 504 responses only.
+- A retry is allowed only while `attempt < max_attempts`; attempts start at 1.
+- Non-positive attempt values or budgets raise `ValueError`.
test_empty (test_intervals.IntervalTests.test_empty) ... ok
test_reversed (test_intervals.IntervalTests.test_reversed) ... ok
test_separated (test_intervals.IntervalTests.test_separated) ... ok
test_shared_interior (test_intervals.IntervalTests.test_shared_interior) ... ok
test_touching_is_not_overlap (test_intervals.IntervalTests.test_touching_is_not_overlap) ... ok
test_before_budget (test_retry.AddedRetryTests.test_before_budget) ... ok
test_invalid_attempts (test_retry.AddedRetryTests.test_invalid_attempts) ... ok
test_permanent_error (test_retry.AddedRetryTests.test_permanent_error) ... ok
test_rate_limit (test_retry.AddedRetryTests.test_rate_limit) ... ok
test_budget (test_retry.RetryTests.test_budget) ... ok
test_success (test_retry.RetryTests.test_success) ... ok
test_transient (test_retry.RetryTests.test_transient) ... ok

----------------------------------------------------------------------
Ran 12 tests in 0.000s

OK
Umgebung, Dateihashes und alle Ergebnisse →

Referenzergebnis reproduzieren

Referenzarchiv entpacken und im obersten Ordner python3 verify.py ausführen. Temporäre Kopien prüfen den beabsichtigten Fehler, die Änderungen, Dokumentation und eine Mutation. Die veröffentlichten Lösungen eignen sich nicht für einen Blindtest.

Prüfbefehl
python3 verify.py

Brauchen Sie Hilfe?

Brauche ich ein Konto oder einen API-Schlüssel?
Die lokale Python-Übung selbst benötigt beides nicht. Für MonkeyCode braucht der gehostete Dienst ein Konto und verfügbare Modellnutzung; die Desktop-App benötigt ein nutzbares Konto oder eine konfigurierte Modellverbindung.
Was tun, wenn Python fehlt?
Installieren Sie Python 3.10 oder neuer in der Testumgebung und prüfen Sie python3 --version. Mit dem Windows-Python-Launcher nutzen Sie py -3 --version und ersetzen python3 in Befehlen und Auftrag durch py -3.
Warum schlägt die erste Prüfung fehl?
Der Starter enthält absichtlich einen Grenzfallfehler. Von 8 Tests soll nur test_touching_is_not_overlap fehlschlagen. Bei null Tests oder anderen Fehlern prüfen Sie zuerst Ordner, Python und Starterdateien.
Warum fehlt mein GitHub-Repository?
Prüfen Sie das verbundene GitHub-Konto und die Repository-Berechtigungen der App. Organisations-Repositories benötigen eventuell eine Freigabe des Eigentümers. Aktualisieren Sie die Auswahl nach Berechtigungsänderungen.
Was tun, wenn der Fehler nicht behoben wird?
Bewahren Sie die Fehlerausgabe auf und fordern Sie eine Korrektur im gleichen Dateiumfang an. Wurden Tests oder fremde Quelldateien geändert, beginnen Sie mit einer frisch entpackten Kopie. Akzeptieren Sie das Ergebnis erst, wenn die 8 ursprünglichen Tests bestehen.

Cookie-Einstellungen

Wir verwenden Cookies nur für Analysen (GA4 + Matomo) zur Verbesserung der Doku. Keine Werbung, kein Cross-Site-Tracking.