Wie man eine Aufgabe löst
Kurz gesagt: Eine Programmieraufgabe löst du in Schritten: Du liest die Aufgabe (was du bekommst und was du ausgibst), schreibst einen Plan in Pseudocode und prüfst ihn mit einem Schreibtischtest, bevor du Code schreibst.
Problem
Der leere Bildschirm
Du hast eine Aufgabe: Am ersten Tag sparst du 1 €, am zweiten 2 €, am dritten 3 € und so weiter. Wie viele Euro hast du nach N Tagen?
Du öffnest den Editor und… weißt nicht, mit welcher Zeile du anfangen sollst. Das passiert allen, und der Grund ist selten, dass du die Sprache nicht kannst. Meist ist noch nicht klar, was genau das Programm tun soll. Deshalb beginnt die Lösung vor dem Code: auf Papier oder im Kopf.
Die Idee
Die Aufgabe lesen
Die Aufgaben in diesem Kurs sehen so aus:
Sparen. Am ersten Tag sparst du 1 €, am zweiten 2 €, am dritten 3 € und so weiter. Die Eingabe ist die Anzahl der Tage N. Gib aus, wie viele Euro du insgesamt gespart hast.
Eingabe:
5Ausgabe:15
Bevor du an eine Lösung denkst, beantworte drei Fragen:
- Was bekomme ich? Eine ganze Zahl N, die Anzahl der Tage.
- Was muss ich ausgeben, und in welcher Form? Eine Zahl, ohne weiteren Text.
- Verstehe ich das Beispiel? Rechne es von Hand nach: 1 + 2 + 3 + 4 + 5 = 15. Das passt zur Ausgabe.
Wenn deine Rechnung von Hand nicht die Ausgabe aus dem Beispiel ergibt, hast du die Aufgabe nicht verstanden. Lies sie noch einmal, bevor du irgendetwas schreibst.
Die Idee
Die Aufgabe zerlegen
Eine große Aufgabe ist schwer auf einmal zu lösen. Zerleg sie in Teile, von denen du jeden lösen kannst:
1. lies die Anzahl der Tage N2. addiere die Zahlen von 1 bis N3. gib die Summe ausDer erste und der dritte Teil sind klar. Der zweite ist noch groß, also zerleg ihn auch. Wie addierst du von Hand? Du behältst die Summe im Kopf und zählst die nächste Zahl dazu, eine nach der anderen. Genau das macht eine Kassiererin, wenn sie deinen Einkauf eintippt.
Zerleg weiter, bis jeder Teil so klein ist, dass klar ist, wie man ihn macht.
Neben der Animation steht das Programm, das diesen Teilen folgt. Die Wörter darin lernst du im nächsten Modul. Schau jetzt nur, wie jeder Teil zu ein, zwei Zeilen Code wird.
n = int(input())total = 0for day in range(1, n + 1): total += dayprint(total)Schritt für Schritt, in Worten
- Als Ganzes ist die Aufgabe groß: Wie viele Euro sparst du in N Tagen?
- Du zerlegst sie in drei Teile. Jeder ist für sich klar.
- Teil 1: N einlesen. Im Beispiel ist N = 5.
- Teil 2: Die Summe beginnt bei 0, und jede Zahl von 1 bis N wird dazugezählt.
- Schreibtischtest: 0 + 1 + 2 + 3 + 4 + 5 = 15.
- Teil 3: Die Summe ausgeben. Die Ausgabe ist 15, genau wie im Beispiel.
Die Idee
Den Plan in Worten schreiben
Bring die Schritte jetzt in eine Reihenfolge, in einfachen Worten:
lies NSumme = 0für jede Zahl von 1 bis N: addiere die Zahl zur Summegib die Summe ausDas nennt man Pseudocode: eine Beschreibung der Lösung, die wie ein Programm aussieht, aber in keiner Sprache geschrieben ist. Strenge Regeln gibt es nicht. Wichtig ist, dass jeder Schritt klar ist und die Schritte in der richtigen Reihenfolge stehen.
Die Einrückung in der vierten Zeile zeigt, dass sich dieser Schritt für jede Zahl wiederholt. Bald siehst du, wie man das in einer echten Sprache schreibt.
Sieh es dir an
Schreibtischtest
Funktioniert der Plan? Prüf ihn, bevor es Code gibt. Nimm den Wert aus dem Beispiel (N = 5) und geh die Schritte von Hand durch, wobei du nach jedem die Summe aufschreibst:
| Schritt | Zahl | Summe vorher | Summe nachher |
|---|---|---|---|
| Start | 0 | ||
| 1 | 1 | 0 | 1 |
| 2 | 2 | 1 | 3 |
| 3 | 3 | 3 | 6 |
| 4 | 4 | 6 | 10 |
| 5 | 5 | 10 | 15 |
Der letzte Schritt gibt 15 aus, genau wie im Beispiel. Der Plan stimmt, zumindest für diesen Fall.
Das nennt man Schreibtischtest: Du gehst die Lösung mit Beispielwerten durch, ohne sie auszuführen. Das dauert ein paar Minuten und findet Logikfehler, bevor du auch nur eine Zeile Code geschrieben hast.
Genauer, für Neugierige
- Es gibt noch einen Weg zur selben Summe: N × (N + 1) / 2. Für N = 5 ist das 5 × 6 / 2 = 15. Zwei verschiedene Pläne liefern dasselbe Ergebnis. Der zweite ist schneller, aber um auf ihn zu kommen, musst du die Formel kennen. Der erste folgt genau dem, wie du von Hand rechnen würdest.
- Auch bei echtem Code wirst du Werte so Zeile für Zeile verfolgen. Editoren haben dafür ein Werkzeug, den Debugger: Er hält das Programm an einer Zeile an, die du wählst, und zeigt die Werte von allem darin.
Probier es aus
Finde den Fehler
Für N = 5 liefert dieser Plan 16 statt 15. Mach im Kopf einen Schreibtischtest. In welcher Zeile ist der Fehler?
Wähle die Zeile mit dem Fehler.
Die Summe beginnt bei 1, nicht bei 0. So kommt vor der ersten Zahl noch eine Einheit dazu, die nie gespart wurde: 1 + 1 + 2 + 3 + 4 + 5 = 16. Bevor du etwas dazugezählt hast, ist die Summe 0.
Die Idee
Die Lösung am Beispiel prüfen
Sobald du ein Programm hast, ist die Prüfung dieselbe, nur dass du es startest, statt von Hand zu rechnen:
- Gib die Eingabe aus dem Beispiel ein und vergleiche deine Ausgabe mit der in der Aufgabe. Vergleiche Zeichen für Zeichen: „Die Summe ist 15“ ist nicht „15“. Lösungen werden oft automatisch geprüft, und zusätzlicher Text macht die Antwort falsch.
- Probier auch eigene Werte aus, besonders Grenzfälle: den kleinsten erlaubten Wert, null, eine sehr große Zahl.
- Wenn die Ausgabe nicht passt, mach mit dem Beispielwert einen Schreibtischtest deines Codes. Die Stelle, an der die Werte nicht mehr zu deinen Erwartungen passen, ist der Fehler.
Probier es mit dem Sparplan: Was liefert er für N = 1? Und für N = 0?
Die Antwort
- Für N = 1 wiederholt sich der Schritt einmal: Die Summe wird 0 + 1 = 1. Das stimmt: Nach einem Tag hast du 1 €.
- Für N = 0 gibt es keine Zahlen von 1 bis 0, also läuft der Schritt kein einziges Mal. Die Summe bleibt 0. Auch das stimmt: In null Tagen hast du nichts gespart.
Test